当结果来自自定义发布类型WP_QUERY时,分页始终添加“Next”链接

时间:2013-12-30 作者:Evan Rose

或者至少看起来是这样。

我有一个页面,我传递了几个参数来查询自定义字段的post\\u meta,无论帖子的数量如何,我都会得到一个额外的“Next”链接。如果在我的WP\\u查询中查询相同的帖子类型而不向“meta\\u query”(将$female设置为null)传递任何变量,则分页工作正常。

我已经查看了所有关于自定义post类型分页的链接(有很多),安装了page navi,搜索了codex,禁用并重新访问了我的插件。我觉得自己有点傻,所以请对我好一点,因为我很尴尬,我不能让这个工作。这是我的精简代码,任何想法都将不胜感激。

URL:

http://dev.huntingtonmedical.com/doctors/page/7/http://dev.huntingtonmedical.com/doctors/page/5/?gender=female (下一个链接将带您进入空白页)

    get_header();

    $gender = $_GET[\'gender\'];
    if ( $gender != \'female\' ) unset( $gender );

    global $paged;

    $paged = ( get_query_var(\'paged\') ) ? get_query_var( \'paged\' ) : 1;

    $args = array(
        \'post_type\' => \'doctors\',
        \'meta_key\' => \'last_name\',
        \'orderby\' => \'meta_value\',
        \'order\' => \'ASC\',
        \'paged\' => $paged,
        \'meta_query\' => array(
            array(
                \'key\' => \'gender\',
                \'value\' => $gender,
                \'compare\' => \'IN\'
            ),
        )
    );

    $query = new WP_Query( $args );

    while( $query->have_posts() ) { 
        $query->the_post(); 
        the_title();
        echo \'<br>\';

    }

    posts_nav_link(\' | \',\' Previous Page \',\' Next Page \');

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

/doctors/ 是post类型的存档,因此我们可以检查该查询是否正在pre_get_posts 通过的操作conditional tag is_post_type_archive( \'doctors\' ) 并相应地修改这些查询。

WordPress通过引用($query 在本例中),因此我们可以通过set 查询对象的方法。此代码将放在您的主题中functions.php 文件:

function wpa_doctor_gender( $query ) {
    // if this is the main query on the doctors post type archive
    if ( $query->is_post_type_archive( \'doctors\' )
        && $query->is_main_query() ) {

        // set query vars for all doctors queries
        $query->set( \'meta_key\', \'last_name\' );
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'ASC\' );

        // set meta_query if gender is female
        if ( isset( $_GET[\'gender\'] )
            && \'female\' == $_GET[\'gender\'] ){
                $meta_query = array(
                    array(
                        \'key\' => \'gender\',
                        \'value\' => $_GET[\'gender\'],
                        \'compare\' => \'IN\'
                    )
                )
                $query->set( \'meta_query\', $meta_query );
        }
    }
}
add_action( \'pre_get_posts\', \'wpa_doctor_gender\' );
现在,在模板中,我们可以去掉所有自定义查询代码和循环,只需运行vanilla循环即可输出帖子:

while( have_posts() ) { 
    the_post(); 
    the_title();
    // etc..
}

结束

相关推荐

Pagination for event query

我正在使用Modern Tribe Events Calendar我的问题是分页。这是对WP\\U查询分页的错误方式,还是有其他方法可以对事件日历分页?我找到了一个tutorial 这使用了WPNavi插件,但我想使用核心wordpress函数。<?php $upcoming = new WP_Query(); $upcoming->query( array( \'post_type\'=> \'tribe_events\', \'eve