筛选WordPress归档小工具以排除具有特定自定义分类术语ID的帖子

时间:2017-01-11 作者:busy360

我正在使用已经发布在这里的不同版本的代码,它旨在过滤默认的“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\' ";
}

1 个回复
最合适的回答,由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 返回默认查询。

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'