[英]Wordpress post loop, only shows variable when logged in as admin
我的问题是当我没有以管理员身份登录wordpress时。 它在事件页面上向我显示了以下内容。
http://www.productplusconcepts.nl/hiteclife/wp-content/themes/hi-tec/hl-step1.jpg
现在,当我登录到wordpress后端并转到相同的事件页面时,它的确在下一张图片的方框中显示了内容。
http://www.productplusconcepts.nl/hiteclife/wp-content/themes/hi-tec/hl-step2.jpg
这是我对循环的查询。
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args['post_type'] = 'evenementen';
$args['post_status'] = 'publish';
$args['relation'] = 'AND';
$args['order_by'] = 'datum_start';
$args['order'] = 'ASC';
$args['posts_per_page'] = 10;
$args['paged'] = $paged;
$args['meta_query'] = array(
array(
'key' => 'datum_eind',
'value' => date('Ymd'),
'compare' => '>='
)
);
if(!empty($_GET['maand'])){
$args['meta_query'] = array(
array(
'key' => 'datum_eind',
'value' => date('Ymd'),
'compare' => '>='
),
array(
'key' => 'welke_maand',
'value' => $_GET['maand'],
'compare' => '='
)
);
}
if(!empty($_GET['provincie'])){
$args['meta_query'] = array(
array(
'key' => 'datum_eind',
'value' => date('Ymd'),
'compare' => '>='
),
array(
'key'=> 'provincie',
'value'=> $_GET['provincie'],
'compare'=> '='
)
);
}
if(!empty($_GET['afstand'])){
$afstanden = explode(',', urldecode($_GET['afstand']));
$args['meta_query'] = array();
array_push($args['meta_query'],
array(
'key' => 'datum_eind',
'value' => date('Ymd'),
'compare' => '>='
)
);
foreach($afstanden as $afstand) {
array_push($args['meta_query'],
array(
'key'=>'afstand',
'value'=> $afstand,
'compare'=>'LIKE'
)
);
}
}
$overzicht = new WP_Query($args);
现在,我对其加载的内容使用3个过滤器,它们可以正常工作,但是在循环中无法显示代码。
if( $overzicht->have_posts() ) :
while( $overzicht->have_posts() ) : $overzicht->the_post(); ?>
<li>
<a href="<?php the_permalink();?>"><?php the_title();?>
<div class="click"></div>
<div class="extrainfo">
<span class="pull-right">
<?php echo '<span class="label label-info">' . get_field('plaats') . '</span>'; ?>
</span>
<span class="pull-left">
<?php
$afstanden = get_field('afstand');
//echo "<pre>";
//print_r($afstanden);
//echo "</pre>";
if(!empty($afstanden)) {
if(is_array($afstanden)) {
$items = array();
foreach($afstanden as $afstand) {
$fields = get_fields($afstand->ID);
$items[] = format_distance($fields['minimaal'], $fields['maximaal']);
}
if(count($items) > 1)
echo '<strong>Afstanden: </strong>';
elseif(count($items === 1))
echo '<strong>Afstand: </strong>';
echo fancify($items);
} else {
echo '<em>Geen afstand(en) beschikbaar.</em>';
}
} else {
echo '<em>Geen afstand(en) beschikbaar.</em>';
}
echo '<br>';
if(get_field('datum_start') && get_field('datum_eind')){
$date_start = datum_omzetten(get_field('datum_start'));
$date_eind = datum_omzetten(get_field('datum_eind'));
echo 'Van: '. $date_start . ' t/m: '. $date_eind;
}else{
echo datum_omzetten(get_field('datum'));
}
?>
</span>
</div>
</a>
<div class="clearfix"></div>
</li>
<?php
endwhile;
wp_reset_postdata();
else:
?>
<p>Helaas, er zijn geen evenementen gevonden. <br /><br>Wilt u een evenement aanmelden? Neem dan <a href="<? echo site_url();?>/contact">contact</a> met ons op</p>
<?php
endif;
在循环中唯一被调用的函数是format_distance并在模板functions.php中进行幻想化
格式距离:
function format_distance($min, $max) {
if($min < $max)
return sprintf('%s-%skm', $min, $max);
elseif($min > $max)
return sprintf('>%skm', $min);
else
return '?';}
幻想:
function fancify($items) {
if(is_array($items)) {
$str = '';
$size = count($items);
for($i = 0; $i < $size; $i++) {
$str .= $items[$i];
if($i < $size - 2)
$str .= ', ';
elseif($i < $size - 1)
$str .= ' of ';
}
return $str;
} else
return '?';}
我似乎找不到问题,为什么循环仅在我登录时显示给我(距离)。
原来这是Wordpress插件自定义高级字段和BBPress论坛之间的冲突。 它们都利用get_field关系发布对象。 这就是为什么我未登录时看不到内容的原因。要解决此问题,请将其添加到主题的功能文件中。
add_filter('acf/get_post_types', 'my_acf_post_type_filter', 20, 3);
function my_acf_post_type_filter ($post_types) {
$exclude = array('topic', 'reply');
// exclude
foreach( $exclude as $p )
{
unset( $post_types[ $p ] );
}
return $post_types; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.