自定义POST类型寻呼在第3页后无法正常工作

时间:2013-08-28 作者:asaunders

我有一个称为服务的自定义帖子类型,它有23个自定义帖子,我还有一个所有类别(5个类别)的自定义分类法。

我正在尝试创建一个所有自定义服务帖子的列表,并且一次只显示5篇我已经完成的帖子。我也在尝试使用wp\\u paginate对它们进行分页,我可以将第1、2和3页转到第1、2和3页,但由于某些原因,我在第4和5页得到了404。

这是我用来分页列表的查询:

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
  $wp_query = new WP_Query(array(\'post_type\' => \'services\', \'paged\'=>$paged, \'posts_per_page\' => 5, \'order\' => \'DESC\' ));
我的自定义帖子类型代码为:

register_post_type( \'services\',
        array(
            \'labels\' => array(
                \'name\' => __( \'Services\' ),
                \'singular_name\' => __( \'Service\' )
            ),
            \'public\' => true,
            \'publicly_queryable\' => true,
            \'show_ui\' => true,
            \'show_in_menu\' => true,
            \'query_var\' => \'services\',
            \'capability_type\' => \'page\',
            \'has_archive\' => \'our-services\',
            \'rewrite\' => array( \'slug\' => \'our-services/%service_categories%\', \'with_front\' => false),
            \'taxonomies\' => array( \'service_categories\' ),
            \'supports\' => array(
                \'title\',
                \'editor\',
                \'custom-fields\',
                \'revisions\',
                \'thumbnail\',
                \'page-attributes\'
            )
        )
    );
我的自定义分类代码是:

function init_service_categories() {
    register_taxonomy(
        \'service_categories\',
        \'services\',
        array(
            \'labels\' => array(
                \'name\' => \'Services Categories\',
                \'add_new_item\' => \'Add New Services Category\',
                \'new_item_name\' => "New Services Category"
            ),
            \'show_ui\' => true,
            \'show_tagcloud\' => false,
            \'hierarchical\' => true,
            \'rewrite\' => array( \'slug\' => \'our-services\' ),
        )
    );
}
add_action(\'init\', \'init_service_categories\', 0);
我也使用这段代码,所以当我转到服务的单个页面时,它的类别位于服务的前面。

add_filter(\'post_type_link\', \'glossary_term_permalink\', 10, 4);
function glossary_term_permalink($post_link, $post, $leavename, $sample)
{
    if ( false !== strpos( $post_link, \'%service_categories%\' ) ) {
        $glossary_letter = get_the_terms( $post->ID, \'service_categories\' );
        $post_link = str_replace( \'%service_categories%\', array_pop( $glossary_letter )->slug, $post_link );
    }
    return $post_link;
}
我真的很感激在这方面的帮助,因为我太迷茫了,不明白为什么它不起作用。

谢谢

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

不要在模板中运行自定义查询来修改查询参数。主查询在加载模板之前运行,这样做会浪费资源,并且会导致分页问题,正如您所发现的那样。

删除您的自定义WP_Query, 恢复正常循环,并使用pre_get_posts 在运行查询之前修改查询参数。

function wpa_services_posts_per_page( $query ) {
    if ( !is_admin()
    && $query->is_post_type_archive( \'services\' )
    && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', 5 );
    }
}
add_action( \'pre_get_posts\', \'wpa_services_posts_per_page\' );

结束

相关推荐

从wp-Query获取数据,在循环之外&不更改url

我正在基于自定义分类法在wordpress上进行高级搜索。我已经被困72小时了,所以我希望能得到一些帮助或思考。。。步骤1——在js文件中,查询字符串如下所示:if (jQuery(\'#s\').val() == \'\'){ URL = \"/?genre=\" + genre + \'...other Stuff\' #content\'; }else{ URL = \"/?s=\"+searchQueryString+\"&genre=\" + genre +\'.