我需要一些修改(原版请参见Pieters的答案)才能让它只在分类页面上工作。此解决方案将显示当前类别(和子类别)的所有粘性帖子,但不会显示在搜索、标记和单个页面上:
add_action( \'pre_get_posts\', function ( $q ) {
if ( !is_admin()
&& $q->is_main_query()
&& !$q->is_home()
&& !$q->is_tag()
&& !$q->is_search()
&& !$q->is_page()
&& !$q->is_single()
) {
function is_existing_cat($q_catName) {
$existingCats = get_categories();
$isExistingCat = false;
foreach ($existingCats as $cat) {
if ($cat->name == $q_catName) {
$isExistingCat = true;
}
}
return $isExistingCat;
}
if ($q->is_category() && !$q->is_paged() && is_existing_cat($q->query[\'category_name\'])) {
$q->set( \'post__not_in\', get_option( \'sticky_posts\' ) );
add_filter( \'the_posts\', function ( $posts ) {
$catName = get_category(get_query_var(\'cat\'))->name;
$catID = get_cat_ID($catName);
if ( !empty(get_option( \'sticky_posts\' )) ) {
$stickies = get_posts( [
\'category\' => $catID,
\'post__in\' => get_option( \'sticky_posts\' )
] );
$posts = array_merge( $stickies, $posts );
}
return $posts;
}, 10, 2);
}
}
});
我添加了一个函数来检查该类别是否是现有类别,因为我遇到了指向该类别的问题。php而不是预期的404。php。链接,如
/existing-cat/not-existing-post
工作但链接如下
/not-existing-post-or-page-or-cat
没有。
如果您需要该帖子上的css类,可以将此代码添加到显示帖子内容的模板的PHP部分(例如,在2616中:template parts/content.PHP)
<?php
if (is_sticky()) {
$stickyClass = \'sticky\';
} else {
$stickyClass = \'\';
}
?>
然后将该类添加到帖子的css类中
post_class($stickyClass);
(此函数将通过几个类和您添加的类向HTML元素添加class属性)。您可以在以下文章中找到此功能:
<article id="post-<?php the_ID(); ?>" <?php post_class($stickyClass); ?>>
...
</article><!-- #post-## -->