Trouble Making WP_Query paged

时间:2013-03-05 作者:Chozen

我正在索引中使用下面的查询。php文件作为主查询,每当我尝试转到第二页时,我都会遇到404错误,我尝试使用posts\\u per\\u页面,但没有效果。

<?php
    $args = array(
  \'post_type\' => array( \'post\', \'videos\', \'music\' ),
  \'tax_query\' => array(
     array(
       \'taxonomy\' => \'content\',
       \'field\'    => \'slug\',
       \'terms\'    => \'indy\',
       \'operator\' => \'NOT IN\' 
     )
   )
);
        $products = new WP_Query( $args );
        if( $products->have_posts() ) {
            while( $products->have_posts() ) {
                $products->the_post();
                ?>

Do stuff here.

<?php }
        }
        else {
            echo \'Oh boy, no posts available\';
        } ?>
我错过了什么?

3 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

URL中的分页仅适用于“main”查询。您所创建的是一个二次查询,因此WordPress无法“了解”它,从而使应用程序能够创建分页。如果您使用辅助查询(如您的示例),则由您手动执行分页操作。

我建议您使用pre_get_posts 钩示例:

<?php
add_action(\'pre_get_posts\', \'wpse89413_pre_posts\');
function wpse89413_pre_posts($query)
{
    // make sure you\'re on the blog page and altering the main query
    if (is_home() && $q->is_main_query()) {
        $query->set(\'post_type\', array(\'post\', \'videos\', \'music\'));

        $query->set(\'tax_query\', array(array(
           \'taxonomy\' => \'content\',
           \'field\'    => \'slug\',
           \'terms\'    => \'indy\',
           \'operator\' => \'NOT IN\' 
        )));
    }
}

SO网友:Brooke.

参见Adding the $paged Parameter to a query 在法典中。您将需要执行以下操作:

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; //or use the global $paged 

$args = array(
  \'post_type\' => array( \'post\', \'videos\', \'music\' ),
  \'posts_per_page\' => -1, //-1 for all post that match query
   \'paged\' => $paged, //get current page 
   \'tax_query\' => array(
     array(
       \'taxonomy\' => \'content\',
       \'field\'    => \'slug\',
       \'terms\'    => \'indy\',
       \'operator\' => \'NOT IN\' 
     )
   )
);

//loop code 
然而,正如Chris所说,它只适用于主查询,因此您需要执行以下操作:

        $temp = $wp_query; //save the main loop query for later use
        $wp_query= null; //set the current query to null
        $wp_query = new WP_Query($args); //get your args

 //do some sweet loop action

$wp_query = null; //set custom query to null
$wp_query = $temp; //rest main query back to the way things were
wp_reset_query(); //reset the main query
查看此问题或google自定义查询不使用分页查找this same solution 在其他网站上。

SO网友:Chozen

解决的问题是,我厌倦了尝试在索引中工作。php文件,并最终使用函数。改为php文件。

我做了以下事情。

add_action( \'pre_get_posts\', \'add_my_custom_post_type\' );

function add_my_custom_post_type( $query ) {
    if ( is_home() && $query->is_main_query() )
        $query->set( \'post_type\', array( \'post\', \'music\', \'videos\' ) );
        $query->set(\'tax_query\', array(array(
           \'taxonomy\' => \'content\',
           \'field\'    => \'slug\',
           \'terms\'    => \'indy\',
           \'operator\' => \'NOT IN\' 
        )));
    return $query;
}
分页和筛选工作完美。

结束

相关推荐

Pagination stops at page 6

下面的循环工作得很好,除了分页总是在第6页停止之外。无论我指定什么参数,它都不会显示超过6页的内容。有人知道为什么吗?<?php $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1; $idxargs = array( \'posts_per_page\' => \'1\', \'paged\' =>