2016-04-05 126 views
0

我做了一個插件,用這些自定義帖子類型創建自定義帖子類型和小部件。自定義帖子類型通過init操作標籤和與widget_init一起註冊。尚未在Widgets_init中註冊的自定義帖子類型?

像這樣:

public function __construct() { 
    // load the modules 
    add_action('init', array($this, 'addModule')); 

} 

public function addModule() { 
    // register the post type. 
    register_post_type($this->post_type, $this->getArgs()); 
} 

而且小部件被稱爲像這樣:

add_action('widgets_init', function() { 
    register_widget('Webburo\Widgets\project\ProjectsWidget'); 
}); 

當我在小部件代碼var_dump()職位類型的get_post_types(),它不會顯示新註冊職位類型。所以在我看來,帖子類型尚未在widget_init中註冊。有什麼我做錯了,或者我錯過了什麼?

回答

0

顯然,widget_init是在init優先行動1解僱。這解釋了爲什麼我的帖子類型尚未註冊。我已將我的操作設置爲優先級0,因此我的帖子類型將在我的小部件發佈之前進行註冊。

add_action('init', array($this, 'addModule'), 0, 1); 

來源:https://codex.wordpress.org/Plugin_API/Action_Reference

0

確保您在register_post_type()函數中傳遞的參數中設置了公鑰。

然後使用下面的代碼來獲取所有市民掛號類型:

$args = array(
    'public' => true, 
); 

$output = 'names'; // names or objects, note names is the default 
$operator = 'and'; // 'and' or 'or' 

$post_types = get_post_types($args, $output, $operator); 

foreach ($post_types as $post_type) {  
    echo '<p>' . $post_type . '</p>'; 
} 
+0

我給自己定的公鑰真實的,但仍然沒有得到自定義文章類型我已經註冊。但是,如果我例如在'admin_init'操作中使用該函數,則可以看到自定義帖子類型。這就像它沒有在小部件代碼那一刻註冊過。 –

+0

這可能是原因,因爲當用戶訪問管理區域時,admin_init會在任何其他掛鉤之前觸發。 和init鉤子被加載並被其他人加載,即widget掛鉤等 –

相關問題