bugfix> wordpress > 投稿

バックグラウンド: 

私はからの定型コードを使用してプラグインを書いていますWordpressプラグイン開発者ハンドブック 特定の関数がそれ自体で発火し続ける理由を疑問に思います。 add_action() も追加しました下部で機能し、それを init にフックしました 、これがpost-typeが何度も登録される原因だと推測しています。

観察とそれを「修正」する私の試み:

ログを見て、この関数はそれ自体で発動し続けることに気付きましたが、その理由はわかりません。少し読んだ後、関数の先頭にifステートメントを追加して、 DOING_AJAX をチェックしようとしました 、ポストタイプが何度も登録されるのを抑制するようです。

質問: Wordpressがこの動作を示すのはなぜですか?

質問: 関数の上部にあるif文を取り出して、Wordpressにpost-typeを「登録」させ続けることは安全ですか?


関数は次のようになります。

function pluginprefix_setup_post_type() {
  // Exit function if doing an AJAX request
  if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
    return;
  }
  // set up labels
  $labels = array(
    'name'  => 'Products',
    'singular_name' => 'Product',
    'add_new' => 'Add Product',
    'add_new_item' => 'Add Product',
    'edit_item' => 'Edit Product',
    'new_item' => 'New Product',
    'all_items' => 'All Products',
    'view_item' => 'View Product',
    'search_items' => 'Search Products',
    'not_found' =>  'No Product Found',
    'not_found_in_trash' => 'No Product found in Trash',
    'parent_item_colon' => '',
    'menu_name' => 'Products',
  );
  //register post type
  error_log('Registering custom post type: my_product');
  register_post_type( 'my_product', array(
    'labels' => $labels,
    'has_archive' => true,
    'public' => true,
    'supports' => array( 'title', 'editor', 'excerpt', 'custom-fields', 'thumbnail','page-attributes' ),
    'taxonomies' => array( 'post_tag', 'category' ),
    'exclude_from_search' => false,
    'capability_type' => 'post',
    'rewrite' => array( 'slug' => 'myproduct' ),
    )
  );
}
add_action( 'init', 'pluginprefix_setup_post_type' );

回答 1 件
  • はい、投稿タイプの登録はそのままにしておくことができます。ザ・ init  フックは、ページが要求されるたびにWordPressシステムのロード中の特定のポイントで起動されます。投稿タイプは $wp_post_types に含まれています  サイトで使用できるようにする実行時のグローバル変数。そのため、このシナリオでは、常に登録されている投稿タイプのログがあります。それは正常です。

    質問にもう少し直接答えるには:

    Why does Wordpress exhibit this behaviour?

    実行時に利用可能なグローバルに投稿タイプを保存します。 WordPressのやり方です。

    Is it safe to take out the if-statement at the top of the function and let Wordpress keep 'registering' the post-type?

    完全に安全で意図的です。

あなたの答え