排除具有的类别pre_get_posts()
我发现通过
pre_get_posts()
和
set_query_var()
除了小部件,其他都可以。最近发布的小部件仅在使用时排除类别
$query->set()
相反
<?php
/**
* Does NOT apply to the Recent Posts widget.
*/
function glck1403271109_exclude_categories( $query ) {
$excluded = array( \'1\', \'2\' );
if( ! is_admin() )
set_query_var( \'category__not_in\', $excluded );
}
add_filter( \'pre_get_posts\', \'glck1403271109_exclude_categories\' );
/**
* Does apply to the Recent Posts widget.
*/
function glck1403271122_exclude_categories( $query ) {
$excluded = array( \'1\', \'2\' );
if( ! is_admin() )
$query->set( \'category__not_in\', $excluded );
}
add_filter( \'pre_get_posts\', \'glck1403271122_exclude_categories\' );
排除查询和小部件中的类别需要我将几个功能打包到一个迷你插件中。代码可以在
Gist here.
从后期导航中排除类别(next/prev_post_link()
)
next/prev_post_link()
以及它们的基础
get_
所有功能都依赖于
get_adjacent_post()
到目前为止(WordPress 3.9.1)还没有使用
WP-Query
, 但修复了它自己的SQL查询。
Trac Ticket #26937 旨在获得
get_adjacent_post()
使用
WP_Query
, 但我们可能需要一段时间才能到达那里。
从中排除类别next/prev_post_link()
在我的例子中,通过将要排除的类别ID直接传递给函数就可以充分实现。我相信这也可能是由于插件与get_adjacent_post()
直接地这是我对模板标签的看法。正在检查glckprss_exclude_categories__category_names()
当然,前面提到的迷你插件只有在使用后者时才有意义。
<?php
/**
* Exclude categories from prev/next post links.
*
* $exclude (array) - category slugs to retrieve IDs from
* $excluded (array) - category IDs to be excluded
*/
$exclude = array();
$excluded = array();
// Mini plugin active?
if( function_exists( \'glckprss_exclude_categories__category_names\' ) ) {
$exclude = glckprss_exclude_categories__category_names();
else {
$exclude = array(
get_category_by_slug( \'my-category\' ),
get_category_by_slug( \'my-other-category\' )
);
}
// Retrieve IDs
foreach( $exclude as $category ) {
if( $category )
$excluded[] = absint( $category->term_id );
}
/* Next Post */
next_post_link( \'%link\', \'%title\', false, $excluded );
/* Previous post */
previous_post_link( \'%link\', \'%title\', false, $excluded );
菜单对于我的用例来说,没有必要从菜单中排除类别,因为我只有自定义菜单,所以我没有朝这个方向进行研究。我很确定
pre_get_posts()
但对菜单项很有把握,不是吗?
感谢您阅读所有这些,感谢您的评论!