2017-06-18 59 views
1

在我的WordPress插件,我用下面的代码来自动添加元盒安装的所有Taxonimies:WordPress插件注册分类为主题分类标准的对象类型

add_action('init', 'my_plugin_register_taxonomies_for_object_type'); 
function my_plugin_register_taxonomies_for_object_type() 
{ 
    $args = array(
    'public' => true, 
); 
    $output = 'objects'; 
    $taxonomies = get_taxonomies($args, $output); 
    foreach ($taxonomies as $taxonomy) 
    { 
    register_taxonomy_for_object_type($taxonomy->name, 'jt_condet_content'); 
    } 
} 

这个作品真的很好所有Taxonmies,即使是那些通过插件安装。但是,我注意到缺少一个分类标准。这是一个普通的邮政分类标准安装的一个儿童主题使用register_taxonomy()init挂钩的主题。

任何想法为什么只有这个分类标准被我的插件漏掉了my_plugin_register_taxonomies_for_object_type()?它让我疯狂。我想为所有已安装的公共分类法显示元框,而不管它们是否内置,通过插件或通过主题进行安装。

我在动作钩周围玩了一下,wp_loaded似乎有效,但我并不是100%确信这是正确的使用钩子还是我很好?

你能解释一下使用wp_loaded而不是init吗?

回答

0

如果您使用init和儿童主题也使用init你可能只需要改变挂钩的优先级,以确保它后他们运行。尝试这样做:

add_action('init', 'my_plugin_register_taxonomies_for_object_type', 20); 

假设他们的主题使用默认值(10)后,他们将你的运行及其分类应该可用。

我能想到使用wp_loaded唯一的缺点是,wp_loaded会后其他一些动作,如widgets_initregister_sidebar和其他人大概几运行。如果其他插件/主题有任何其他插件/主题回调,您的帖子类型有这些分类注册,他们挂钩wp_loaded之前,他们会失败,因为wp_loaded追赶他们。在大多数情况下,很可能wp_loaded都可以。

+0

如果我在init中注册我自己的自定义帖子类型,并且只提出所提到的一段代码(将分类元框添加到我的帖子类型中),我应该保持安全,对吗? – xxtesaxx

+0

@xxtesaxx是的,这也可以很好地工作 –