WordPress类别不计算媒体附件



在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函数选项,但我不想自己做,我想把它与现有的类别分类法一起使用。

非常感谢对此的任何帮助。谢谢!

希望这对任何也遇到此问题的人有所帮助。这就是我最终放入函数的内容.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' );

我已经测试了维多利亚 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 get_taxonomies分类对象。

  • 第一个参数是我们想要更改的分类学蛞蝇:'category'
  • 第二个参数是对象(post)类型的数组。我们从 get_taxonomies返回的对象 .
  • 第三个参数($args)是分类法属性的数组。我们必须确保正确包含 $myTaxonomy 中的所有内容,以确保重新创建的category与原始相同,除了我们想要的更改,在这种情况下,修改update_count_callback以使用 _update_generic_term_count 而不是默认_update_post_term_count 。唯一的问题是 capabilities 属性,因为它必须作为 capabilities 传递,但作为 cap 存储在 Taxonomy 对象中,因此我们需要扩展$args数组,将cap对象转换为 capabilities 标签下的数组。

请注意,由于某些原因,在我的测试中,我看到重新创建的分类法的labels数组与原始分类法相比包含一个额外的项目(["archives"]=>"All Categories")。这应该不会影响系统,因为未在任何地方引用的附加标签不会导致问题。

您可以使用 var_dump(get_taxonomies(array('name' => 'category'), 'objects')['category']) 轻松比较编辑前后的分类法,以确保一切正常。(除非您知道自己在做什么,否则不要在生产现场这样做!

相关内容

  • 没有找到相关文章

最新更新