2016-04-05 17 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'); 
}); 

私はウィジェットコードにget_post_types()とポストタイプをvar_dump()すると、それが新たに登録されたが表示されませんので、同様

投稿タイプ。投稿タイプがまだwidget_initに登録されていないようです。私が間違っていることがあるのですか、それとも何か不足していますか?

答えて

0

そして、すべての公共書留郵便の種類を取得するために以下のコードを使用します。それで私の投稿タイプがまだ登録されていない理由がわかります。自分のアクションを優先度0に設定しているので、私のウィジェットが登録される前に投稿タイプが登録されます。

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

出典:https://codex.wordpress.org/Plugin_API/Action_Reference

0

register_post_type()関数で渡された引数に公開鍵が設定されていることを確認してください。どうやらwidget_initinitアクションの優先順位1で焼成され

$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フックがロードされ、他にウィジェットフックなどが続きます –

関連する問題