具有自定义帖子类型的类别页面上的分页

时间:2014-08-14 作者:3lb3rt

Wordpress对我来说并不新鲜,但我真的被这段代码困住了,无法正常工作。

我注册自定义帖子类型News 并让自定义帖子类型使用Wordpress类别

\'taxonomies\' => array(\'category\')
到目前为止还不错。我可以为自定义帖子类型新闻分配不同的类别。但我希望人们能够看到特定类别的新闻。因此,我希望这样做的类别。php页面。问题是分页不起作用。当我转到/page/2时,我找到一个找不到的页面

我在一个类别上使用此代码。php页面。

// Get post ID
$post_type = get_post_type( $post->ID );

// Get category ID
$category_id = get_cat_ID(single_cat_title(\'\', false));

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

// WP_Query arguments
$args_news = array (
    \'post_type\'             => array( \'news\' ),
    \'pagination\'            => true,
    \'posts_per_page\'        => \'9\',
    \'orderby\'               => \'date\',
    \'paged\'                 => $paged,
    \'cat\'                   => $category_id,
);

// The Query
$query = new WP_Query( $args_news );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post(); ?>
        <div>
            <h1><?php the_title(); ?></h1>
            <p><?php the_content(); ?></p>
        </div>
<?php }

} else { 
    // no news found
}
?>

<div class="pagination">
    <div class="previous-page"><?php previous_posts_link( \'Newer Posts\' );?></div>
    <div class="next-page"><?php next_posts_link( \'Older Posts\', $query->max_num_pages ); ?></div>
</div>

<?php
// Reset postdata
wp_reset_postdata();

1 个回复
SO网友:Pieter Goosen

在讨论您的问题之前,我想首先问一下,为什么要在类别页面上使用自定义查询而不是主查询。绝不应在任何存档页或主页上更改自定义查询的主查询。

Wordpress提供了一个动作挂钩,pre_get_posts 您可以将其与conditional tags 在特定页面上执行主查询之前,将其作为目标并进行修改。对于类别页面is_category() 提供条件检查。

您只需在函数中执行以下操作即可。php,同时在类别页面上保持默认循环。只是一个提示,pre_get_posts 使用与相同的参数WP_Query

function add_news_to_category( $query ) {
    if ( !is_admin && $query->is_category() && $query->is_main_query() ) {

         $query->set( \'post_type\', array( \'news\' ) );
         $query->set( \'posts_per_page\', \'9\' );
         $query->set( \'orderby\', \'date\' );

    }
}
add_action( \'pre_get_posts\', \'add_news_to_category\' );
好的,现在来看看您的代码的实际问题。

首先,您不需要使用wp_reset_querywp_reset_postdata 在一起wp_reset_query 实际上与一起使用query_posts, 你绝对不能用,我的意思是永远不要。只是简单地使用wp_reset_postdata afterWP\\U查询andget\\u posts`,记住,永远不要忘记这样做

其次,仔细查看您的代码。你有$query = new WP_Query( $args_news );, 但是你有<?php next_posts_link( \'Older Posts\', $custom_query->max_num_pages ); ?>. 找出差异?$query$custom_query. 所以<?php next_posts_link( \'Older Posts\', $custom_query->max_num_pages ); ?> 应该是<?php next_posts_link( \'Older Posts\', $query->max_num_pages ); ?>

进一步阅读:

结束

相关推荐

Get a list of categories ids

我正在使用基于自定义帖子类型的过滤器制作一个公文包。该过滤器必须只显示公文包中显示的帖子的类别,因为用户可以在短代码中通过id指定它们-[公文包id=“1,2,3”],而我无法获得该类别id的列表。下面是一个简单的例子,说明我正在尝试做什么:来自快捷码的自定义帖子ID列表:$ids 相同ID的数组:$id_array = explode(\',\', $ids) 必须返回类别ID列表的感兴趣的变量:$cat_ids = ??? 接下来,我们只获取具有所需id的类别:$ca