在类别小部件中包括自定义帖子类型

时间:2011-09-17 作者:GreenDude

所以我得到了一个相当简单的设置,一个CPT,默认值为categorypost_tag 作为分类法。

假设我有一个帖子和一个CPT条目分配给同一个类别。我需要这也反映在类别小部件中。

我已经通过request 过滤以使小部件生成的链接正常工作。

问题是,如果帖子不存在,小部件将不会为该类别生成链接(考虑为空)。

此外,项目计数不正确,1而不是2。

仔细查看小部件代码,这就是导致问题的原因:

wp_list_categories(apply_filters(\'widget_categories_args\', $cat_args));
所以我可以通过过滤器改变参数,但是wp_list_categories() 没有关于应该使用何种post类型的参数。

我以前见过其他人遇到过这个问题:

http://wordpress.org/support/topic/custom-post-types-and-category-widget - 没有运气

http://themehybrid.com/support/topic/custom-post-types-and-category-widget - 同一个家伙,看不懂贾斯汀的回答,但我想不会再有运气了。他在最后提交了一张罚单,结果被关闭了

对解决方案的思考我真的不想复制/粘贴默认的小部件代码并创建一个新代码,而是想通过某种方式使用过滤器来解决这个问题。

也就是说,一个定制的步行者能帮上忙吗?有什么想法吗?

作为旁注,我使用以下方法解决了存档小部件的类似问题:

/*
* Add CPTs to wp_get_archives()
* http://bajada.net/2010/07/15/adding-custom-post-types-to-wp_get_archives
*/
function ucc_getarchives_where_filter( $where , $r ) {
    $args = array( \'public\' => true , \'_builtin\' => false );
    $output = \'names\'; $operator = \'and\';

    $post_types = get_post_types( $args , $output , $operator );
    $post_types = array_merge( $post_types , array( \'post\' ) ); $post_types = "\'" . implode( "\' , \'" , $post_types ) . "\'";

    return str_replace( "post_type = \'post\'" , "post_type IN ( $post_types )" , $where );
}
add_filter( \'getarchives_where\' , \'ucc_getarchives_where_filter\' , 10 , 2 ); 
干杯!

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

我有一个“actor”cpt,它似乎会自动添加到查询中:

SELECT object_id, term_taxonomy_id
FROM wp_term_relationships INNER JOIN wp_posts ON object_id = ID 
WHERE term_taxonomy_id IN (38,40,30,11,32,34,29,39,35,9,31,19,33,37,42,41,27,25,36,1,26) 
AND post_type IN (\'post\', \'actor\')
AND post_status = \'publish\'

Call from: require, require_once, include, get_sidebar, get_template_part, locate_template, load_template, require, dynamic_sidebar, call_user_func_array, WP_Widget->display_callback, WP_Widget_Categories->widget, wp_list_categories, get_categories, get_terms, _pad_term_counts
(使用Debug Queries 插件)

这就是CPT的定义:

register_post_type(\'actor\', array(
  \'public\' => true,
  \'labels\' => $labels,
  \'has_archive\' => \'actors\',
  \'taxonomies\' => array( \'category\' )
));

结束

相关推荐

post categories

我有一些帖子,我想把它们分为三类:新闻、事件和新闻稿,然后我有三个页面使用相同的模板。我想在相关页面上显示这些帖子,以便在新闻页面上发布新闻帖子。有人能告诉我什么是最好的方式吗。我想这很简单,但我对Wordpress还是相当陌生的。非常感谢,