繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM