如何在分类页面上只显示粘性帖子?

时间:2016-08-10 作者:jrcollins

如果有人能帮我,我会非常感激的。我试图让分类页面只显示当前分类中的粘性帖子。我希望有一个插件可以做到这一点,但看起来没有。这是我的分类模板:

 <?php
 /**
* The template for displaying category archive pages.
*
* @link https://codex.wordpress.org/Template_Hierarchy
*
* @package Codilight_Lite
*/

get_header(); ?>
<div id="content" class="site-content container <?php echo codilight_lite_sidebar_position(); ?>">
    <div class="content-inside">
        <div id="primary" class="content-area">
            <main id="main" class="site-main" role="main">

            <?php
            if ( have_posts() ) : $count = 0; ?>

                <header class="page-header">
                    <?php
                        the_archive_title( \'<h1 class="page-title">\', \'</h1>\' );
                        the_archive_description( \'<div class="taxonomy-description">\', \'</div>\' );
                    ?>
                </header><!-- .page-header -->

                <?php
                $layout_archive_posts = get_theme_mod( \'layout_archive_posts\', \'grid\' );
                if ( $layout_archive_posts == \'grid\' ) {
                    echo \'<div class="block1 block1_grid">\';
                    echo \'<div class="row">\';
                        while ( have_posts() ) : the_post();
                        $count++;
                            get_template_part( \'template-parts/content-grid\' );
                        if ( $count % 2 == 0 ) {
                            echo \'</div>\';
                            echo \'<div class="row">\';
                        }
                        endwhile;
                    echo \'</div>\';
                    echo \'</div>\';
                    codilight_lite_custom_paginate();

                } else {
                    echo \'<div class="block1 block1_list">\';
                        while ( have_posts() ) : the_post();
                        get_template_part( \'template-parts/content-list\' );
                        endwhile;
                    codilight_lite_custom_paginate();
                    echo \'</div>\';
                }
                ?>

            <?php else : ?>

                <?php get_template_part( \'template-parts/content\', \'none\' ); ?>

            <?php endif; ?>

            </main><!-- #main -->
        </div><!-- #primary -->

<?php get_sidebar(); ?>
<?php get_footer(); ?>

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

您可以尝试从sticky_posts 选项,然后相应地修改类别存档的主查询:

/**
 * Category Archives: Only display sticky posts for each category term
 */
add_action( \'pre_get_posts\', function( \\WP_Query $q )
{
    if( ! is_admin() && $q->is_category() && $q->is_main_query() )
    {
        $sticky_posts = get_option( \'sticky_posts\' );
        if( ! empty( $sticky_posts ) )
            $q->set( \'post__in\', (array) $sticky_posts );
    }
} );
请注意,这里我们使用的是一种简化方法,即查询所有这些粘性帖子,而不管其类别如何。我们让主查询的分类查询进行过滤。