2017-06-18 41 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是的,這也可以很好地工作 –