将类分配给循环中类别中的第一个元素

时间:2017-06-24 作者:Olek Tomkowski

我正在尝试执行以下操作:

1) 分配col-lg-4 当给定类别中有3个或更多帖子时,将类化为循环中的第一个元素。

2) 分配col-lg-8 当给定类别中有2个帖子时,将类初始化为循环中的第一个元素。

3) 离开col-sm-12 当给定类别中只有一篇文章时,在循环中的第一个元素上初始化。

下面是我的想法:

<div class="container special-offer-wrap">
    <div class="row special-offer-wrap special-offer-row">
        <?php
            $columns_query_args = array(
                \'category_name\' => \'featured\',
                \'posts_per_page\' => \'3\'
            )
        ?>
        <?php $columns_query = new WP_Query( $columns_query_args ); ?>
        <?php if ( $columns_query->have_posts() ) : ?>
            <?php while ( $columns_query->have_posts() ) : $columns_query->the_post(); ?>
                <div class="col-sm-12
                    <?php if( $columns_query_item_number == 0){
                        if( $the_query->found_posts == 1 ){
                        echo \' \';
                        }  else {
                            if( $the_query->found_posts == 2 ){
                            echo \'col-lg-8\';
                            }  else {
                            echo \'col-lg-4\';
                           }
                        }
                        } else echo \'col-lg-4\'; /*all other posts */
                        $columns_query_item_number++;  ?>">
                    <div class="special-offer-description">
                        <h2><?php the_title(); ?></h2>
                        <?php the_excerpt( ); ?>
                    </div>                         
                </div>
            <?php endwhile; ?>
            <?php wp_reset_postdata(); ?>
        <?php else : ?>
            <p><?php _e( \'Sorry, no posts matched your criteria.\', \'fresh_spring\' ); ?></p>
        <?php endif; ?>
    </div>
</div>
当类别中有3个帖子时,看起来是这样的:

问题是,它不会更改为类似于以下内容:

当我回到类别内的2篇帖子时(通过从第3篇帖子中删除类别),但它保留了col-lg-4 在第一个元素上初始化。

有什么想法吗?我想我把查询条件搞砸了。

编辑:

根据@Michael的建议,我使用了调试模式,这显示了定义变量时的一些问题$columns_query_item_number. 现在它被正确定义了,我得到的唯一通知是关于woocommerce_get_page_id 不推荐使用(虽然我的站点上没有它,只有debug.log文件中有,所以我现在还不介意)。

我做的另一件事是我改变了$the_query$columns_query, 这立刻让我找到了解决方案,但现在的问题是,下一个循环不知何故被破坏了。我真的不知道为什么,因为循环最后被重置了wp_reset_postdata() 作用

1 个回复
SO网友:Dominik Späte

如果wp_reset_postdata() 无法按预期工作您可以备份原始$post 通过插入对象

global $post; // if you aren\'t in global scope
$postBk=$post;
在执行WP\\U查询并使用还原之前

$post=$postBk;
紧接着wp_reset_postdata();

结束

相关推荐

Duplicates with WP_Query loop

我在头版上只显示带有特色图片的帖子。我的问题是,每次加载下一个页面时,我都会收到相同的结果,也就是得到重复的结果。我正在使用按自定义字段排序。欢迎任何可能导致此问题的指示/想法。下面是我的主循环// Layout if(is_category()) { $post_layout = blt_get_option(\'category_post_layout\', \'normal\'); } elseif(is_author()) {