为什么我的循环不能动态获取正确的类别并显示所有已分类的帖子?

时间:2018-10-09 作者:Peter

Objective: 单击类别时,我希望该类别。php页面,动态拉入该点击类别下的所有帖子。

示例:新闻->(操作:单击)->类别=新闻

目前,我的循环从类别中引入了3篇帖子:无论单击哪个类别,都是未分类的。我检查了我的循环和参数,似乎一切都应该按预期进行。如果能有新的眼光,我将不胜感激。

类别。PHP

<?php get_header(); ?>
<section class="component" role="main">
<header class="header">
<h1 class="entry-title"><?php single_cat_title(); ?></h1>
<?php if ( \'\' != category_description() ) echo apply_filters( \'archive_meta\', \'<div class="archive-meta">\' . category_description() . \'</div>\' ); ?>
</header>
<section class="component responsive">
<?php
$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;

// Grabs the selected category
foreach((get_the_category()) as $category)
{
    $postcat= $category->cat_ID;
}

$args = array(
           \'posts_per_page\' => 7,
           \'paged\' => $paged,
           \'cat\' => $postcat // Passes the selected category to the arguments
        );

$custom_query = new WP_Query( $args );
$post_number = 0;


if ( $custom_query->have_posts() ) : while($custom_query->have_posts()) : $custom_query->the_post(); ?>
        <?php the_title(); ?>
    <?php endwhile; else : ?>
<?php endif; ?>
    <div class="clear"></div>
    <?php if (function_exists("pagination")) {
        pagination($custom_query->max_num_pages);
    } ?>
    </section>
</section>

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

您的整个模板已损坏,因为您没有修改主查询,而是将其丢弃,并将一个全新的查询放入:

$args = array(
           \'posts_per_page\' => 7,
           \'paged\' => $paged,
           \'cat\' => $postcat // Passes the selected category to the arguments
        );

$custom_query = new WP_Query( $args );
WP做了大量的工作,找出了在新查询中必须复制的页面、帖子数量、帖子类型等。同样,这是一个全新的查询,它只执行您让它执行的操作。这对性能/速度也非常不利,会导致页面速度变慢。

相反,如果我们使用pre_get_posts 筛选若要将存档限制为最初计划的7篇文章,可以删除所有分页代码,也可以删除自定义查询:

首先,让我们调整查询以仅显示中的7篇文章functions.php 如果主查询是针对类别存档:

function limit_category( $query ) {
    if ( $query->is_category() && $query->is_archive() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', \'7\' );
    }
}
add_action( \'pre_get_posts\', \'limit_category\' );
现在,我们可以使用标准分页函数,并在category.php, e、 g。

if ( have_posts() ) { // if we have posts
    while( have_posts() ) { // while we still have posts
        the_post(); // set the current post
        the_title(); // display its title
        the_content(); // display its content
    }
    // display the pagination links
    ?>
    <div class="nav-previous alignleft"><?php previous_posts_link( \'Older posts\' ); ?> </div>
    <div class="nav-next alignright"><?php next_posts_link( \'Newer posts\' ); ?></div>
    <?php
} else {
    echo "<p>No posts found</p>";
}

结束

相关推荐

Categories manage

我正在尝试向CPT中添加特定类别,只有在添加新帖子时,您才能看到与这些帖子类型相关的类别。此外,我希望能够从后端添加类别,而不是从代码添加类别,因为我有很多类别将要更改。如果有一个插件可以做到这一点,那很好,但我也希望了解它是如何做到的。非常感谢