在Wordpress中,我创建的图库将自动显示所选类别及其子类别中的新图像。我已经设置了类别,以便它们将使用以下内容应用于媒体:
register_taxonomy_for_object_type( 'category', 'attachment' );
现在我需要这样做,以便类别将计算相关附件而不仅仅是帖子。 我发现此链接如何使用以下代码覆盖默认的update_count_callback类别:
function change_category_arg() {
global $wp_taxonomies;
if ( ! taxonomy_exists('category') )
return false;
$new_arg = &$wp_taxonomies['category']->update_count_callback;
$new_arg->update_count_callback = 'your_new_arg';
}
add_action( 'init', 'change_category_arg' );
但是到目前为止我还没有弄明白(不确定它是否有效或者我是否只是不理解某些内容,例如什么是' your_new_arg') 。 我在注册新的分类法时确实找到了update_count_callback函数选项,但我不想自己编写,我想将它与现有的类别分类一起使用。
非常感谢任何帮助。谢谢!
答案 0 :(得分:2)
希望这有助于任何有这个问题的人。这就是我最终放入的功能.php:
//Update Category count callback to include attachments
function change_category_arg() {
global $wp_taxonomies;
if ( ! taxonomy_exists('category') )
return false;
$wp_taxonomies['category']->update_count_callback = '_update_generic_term_count';
}
add_action( 'init', 'change_category_arg' );
//Add Categories taxonomy
function renaissance_add_categories_to_attachments() {
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'renaissance_add_categories_to_attachments' );
答案 1 :(得分:0)
我已经测试了Victoria S的答案,并且可以正常工作。
如果有人希望避免直接操纵WordPress全局变量,则以下解决方案基于本机WordPress功能。
function my_add_categories_to_attachments() {
$myTaxonomy = get_taxonomies(array('name' => 'category'), 'objects')['category'];
$myTaxonomy->update_count_callback = '_update_generic_term_count';
register_taxonomy ('category',
$myTaxonomy->object_type,
array_merge ((array) $myTaxonomy,
array('capabilities' => (array) $myTaxonomy->cap)));
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'my_add_categories_to_attachments' );
这里的关键是register_taxonomy
用于相同地重新创建category
分类,但是改变了update_count_callback
函数。我们使用分配给$myTaxonomy
的{{3}}中的分类对象。
'category'
get_taxonomies
返回的对象中使用它。$args
)是分类法属性的数组。我们必须确保正确包含$myTaxonomy
中的所有内容,以确保重新创建的category
与原始update_count_callback
相同,除了我们想要的更改外,在这种情况下,请修改_update_generic_term_count
使用_update_post_term_count
而不是默认的capabilities
。唯一的问题是capabilities
属性,因为它必须作为cap
传递,但是作为$args
存储在分类法对象中,因此我们需要扩展{{1 }},并将cap
对象强制转换为数组,标签为capabilities
。请注意,由于某些原因,在我的测试中,我看到重新创建的分类法的labels
数组与原始分类相比包含了一个额外的项目(["archives"]=>"All Categories"
)。这不会影响系统,因为任何地方未引用的附加标签都不会引起问题。
通过使用var_dump(get_taxonomies(array('name' => 'category'), 'objects')['category'])
,您可以轻松地在编辑前后比较分类法,以确保一切都井井有条。 (除非您知道自己在做什么,否则请不要在生产站点上这样做!)