Duplicates with WP_Query loop

时间:2015-06-20 作者:tslid

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

// Layout
if(is_category())
{
    $post_layout = blt_get_option(\'category_post_layout\', \'normal\');
}
elseif(is_author())
{
    $post_layout = blt_get_option(\'author_post_layout\', \'normal\');
}
elseif(is_archive())
{
    $post_layout = blt_get_option(\'archive_post_layout\', \'normal\');
}
else
{
    $post_layout = blt_get_option(\'home_post_layout\', \'normal\');
}


$i = 1;
if(have_posts()){ 

    while(have_posts()){ 

        the_post();
        get_template_part( \'inc/template-parts/content\', $post_layout );


        // Ad spot #4
        if($ad_spot_between_posts = blt_get_option(\'spot_between_posts\', \'none\') != \'none\'){

            $ad_posts_frequency = blt_get_option(\'spot_between_posts_frequency\', 3);

            // take into account ad frequency
            if(($i % (int) $ad_posts_frequency) == 0){
                blt_get_ad_spot( \'spot_between_posts\' );
            }

        }
        $i++;

    }

}else{

    $has_posts = false;

}
这是我的索引:

  <?php get_header(); ?>


<div id="site-content" class="clearfix">

    <?php

        // Front Page - Top of container
        if(is_front_page() and is_active_sidebar(\'front-top_of_container\')){
            dynamic_sidebar(\'front-top_of_container\');
        }

    ?>
    <div id="site-content-column"><?php

        if(is_archive()){
            blt_get_title();        
        }


        if(have_posts()){ 

            echo \'<div class="row">\';
            include(get_template_directory().\'/loop.php\');
            echo \'</div>\';


            // Previous/next page navigation.
            if(!blt_get_option(\'enable_infinite_scrolling\')){

                the_posts_pagination(array(
                    \'prev_text\'          => \'<i class="fa fa-chevron-left"></i>\',
                    \'next_text\'          => \'<i class="fa fa-chevron-right"></i>\',
                    \'before_page_number\' => \'<span class="meta-nav screen-reader-text">\' . __( \'Page\', \'blue\' ) . \' </span>\',
                ));

            }           

        }else{ 

            get_template_part( \'inc/template-parts/content\', \'none\' );

        } ?> 

    </div><?php

    #   
    #   SIDEBAR
    #   ========================================================================================
    #   Load the sidebar if needed
    #   ========================================================================================
    #       
    if(in_array(blt_get_option(\'sidebar_layout\', \'right\'), array(\'left\', \'right\'), true)){
        get_sidebar();
    } ?>

</div>

<?php get_footer(); ?>
编辑:无限滚动功能

function blt_infinitepaginate(){ 

    $has_posts      = true;
    $type           = isset($_POST[\'type\']) ? $_POST[\'type\'] : false;
    $loopFile       = $_POST[\'loop_file\'];
    $paged          = $_POST[\'page_no\'];
    $posts_per_page = get_option(\'posts_per_page\');
    $post_id        = isset($_POST[\'post_id\']) ? $_POST[\'post_id\'] : false;

    # Load the posts
    if($post_id){

        include(get_template_directory().\'/loop-hottest.php\');

    }else{

        query_posts( array( \'paged\' => $paged+1, \'post_status\' => \'publish\', \'post__not_in\' => get_option(\'sticky_posts\') ) );
        include(get_template_directory().\'/loop.php\');

    }

    if(!$has_posts){
        return false;
    }

    exit;

}

function blt_change_main_loop( $query ) {

    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_home() and isset($_GET[\'page\'])) {
        $query->set( \'posts_per_page\', $_GET[\'page\'] * get_option(\'posts_per_page\') );
        return;
    }

}
add_action( \'pre_get_posts\', \'blt_change_main_loop\', 1 );


}

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

很难用你问题中的大量上下文来正确回答你的问题,但我将尝试使用你的previous question

在模板上有更多的上下文,如果我读对了,这就在您的索引上了。php,我仍然相信并坚持我的观点pre_get_posts 是你的答案。按如下方式解决此问题(仅当这不是静态首页时,因为以下内容不起作用)

删除自定义查询。返回默认设置,在那里您可以正常获得所有帖子

下一步,使用pre_get_posts 将主页上的主查询更改为仅显示带有缩略图的帖子。这将解决分页问题

在函数中添加以下内容。php:(至少需要php 5.3)

add_action( \'pre_get_posts\', function ( $q ) 
{
    if (     $q->is_home() // Target the home page only
          && $q->is_main_query() // Target only the main query
    ) {
        $meta_query = array(
            array(
                \'key\' => \'_thumbnail_id\'
            )
        );
        $q->set( \'meta_query\', $meta_query );
    }
});
如果这不能解决您的问题,那么您确实需要发布更多的上下文。

编辑我不打算详细介绍query_posts 这到底有多糟糕,我在之前回答你之前的问题时已经谈到了这一点。由于您很可能没有编写该代码,因此我会就此联系开发人员。

无论如何,要通过无限滚动快速解决您的问题,您需要将以下内容添加到query_posts 参数

\'meta_query\' => array( array( \'key\' => \'_thumbnail_id\' ) ),
请注意,我宁愿重写完整的无限滚动函数WP_Query 如前一个问题所述

结束

相关推荐

从phpMyAdmin创建新用户

我正在尝试将我在免费web托管服务器中创建的站点复制到我在WAMP上运行WP的windows pc上。我复制了所有文件,但采用了wp配置。php来自我在PC上运行的示例站点,并对其中的db连接进行了一些修改。复制的网站以某种方式在我的电脑上运行,但现在我需要访问wp管理员。我不知道为什么我不能用用户名登录并通过,这在免费主机中非常有效。我决定从phpMyAdmin页面创建新用户。但如何处理密码生成?系统对空的那个感到愤怒。如果我从PC上运行的另一个站点导出用户并导入到当前表(wp\\U users),则无