我正在使用已经发布在这里的不同版本的代码,它旨在过滤默认的“wordpress存档小部件”,只显示特定类别的月份结果。
我试图修改它,以排除指定了特定自定义分类法的帖子。
该自定义分类术语id为139,出于测试目的,它附在2016年3月的一篇帖子上(这也是2016年3月的唯一一篇帖子)。因此,我将其编辑如下。
如果我设置tt。term\\u id=\'139\',则存档小部件仅显示\'2016年3月\',这是正确的。但如果我将其设置为不相等,如下所示,它将显示包括“2016年3月”在内的所有月份,这是它应该排除的月份。
我猜问题出在某种程度上与连接过滤器有关,但不确定如何调整它。谢谢你的提示。
add_filter( \'getarchives_join\' , \'getarchives_join_filter\');
function getarchives_join_filter( $join ) {
global $wpdb;
return $join . " INNER JOIN {$wpdb->term_relationships} tr ON ($wpdb->posts.ID = tr.object_id) INNER JOIN {$wpdb->term_taxonomy} tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)";
}
add_filter( \'getarchives_where\' , \'getarchives_where_filter\');
function getarchives_where_filter( $where ) {
global $wpdb;
return $where . " AND tt.term_id != \'139\' ";
}
最合适的回答,由SO网友:Cedon 整理而成
最好使用自定义WP_Query
与过滤器相反。
所以,假设你的网站是关于植物的,但你不想让这个自定义存档显示你的文章plant
自定义分类设置为weeds
:
$args = array(
\'post_type\' => \'post\',
\'tax_query\' => array(
\'taxonomy\' => \'plants\',
\'field\' => \'slug\',
\'terms\' => \'weeds\',
\'operator\' => \'NOT_IN\',
),
);
$myArchive = new WP_Query($args);
因此,这段代码所做的是为查看slug的帖子创建一个新的查询,用于
plants
然后抓住他们,除了那些鼻涕虫的名字
weeds
然后,您可以使用循环在小部件中以您想要的方式显示它们。
记住使用wp_reset_postdata()
在小部件中显示最后一篇文章以重置后$post
返回默认查询。