Wordpress后循环,仅在以管理员身份登录时显示变量

时间:2014-08-08 08:25:18

标签: php wordpress loops 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和fancify.php

格式距离:

function format_distance($min, $max) {
if($min < $max)
    return sprintf('%s-%skm', $min, $max);
elseif($min > $max)
    return sprintf('>%skm', $min);
else
    return '?';}

Fancify:

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 '?';}

我似乎无法找到问题为什么循环只会在我登录时向我显示afstanden(距离)。

1 个答案:

答案 0 :(得分:0)

原来这是Wordpress插件自定义高级字段和BBPress论坛之间的冲突。他们都使用get_field关系post对象。这就是我没有登录时无法看到内容的原因。要解决此问题,请将此添加到主题的功能文件中。

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; }