web-dev-qa-db-ja.com

複数のオブジェクト型とupdate_count_callbackを持つregister_taxonomy

register_taxonomyはオブジェクト型として配列を受け入れているので、私はカスタム分類法に多くのカスタム投稿型をリンクすることができます。それは結構です。

問題は、デフォルトの分類数はデフォルトの設定では常にゼロであるということです。それで、引数update_count_callbackに何を設定すればよいのでしょうか。

分類学は複数の投稿タイプにリンクされているので、私はこれを考えていたので、特定の投稿タイプを表示しているときにカウントは意味があります。

それでは、この分類法が複数のカスタム投稿タイプにリンクされている場合、カスタム分類法カウントを処理するための最良の方法は何ですか?

4
Yoga

私は時々同じようなことにぶつかる。カスタム投稿タイプと分類法を使用したときに行ったことは次のとおりです。

  • 分類法を登録するためにinit(10より前)にコールバックを設定します。
  • 投稿タイプを登録するためにinit(10以前)にもう1つを設定します。
  • それらを関連付けるために別の10に別のものを設定してください、おそらく他の人々のカスタム分類法とポストタイプで作業していて、彼らが10でそれらを登録しているなら多分後で。

そうすることで、私がカスタムオブジェクトで遭遇した奇妙な問題と、ワードプレスのregister_ *関数に関するドキュメンテーションがinitの間にそれらを確実に登録するべきであるというメモを排除しました。

それらを手動でリンクしない場合は、それらの間で適切にやり取りすることもできないこともあります。また、update_callback_countはやり取りの一部なので、initの前に10まですべてのオブジェクトを登録してから関連付けます。 10の後(または上).

add_action('init', do_create_taxonomies, 7);
function do_create_taxonomies() {
   # setup taxonomies as array of key => options arrays
   foreach ( $taxonomies as $slug => $options ) {
      register_taxonomy("{$slug}", null, "{$options}");
   }
}

add_action('init', do_create_post_types, 8);
function do_create_post_types() {
   # setup post types as array of key => options arrays
   foreach ( $post_types as $slug => $options ) {
      register_post_type("{$slug}", "{$options}");
   }
}

add_action('init', do_bind_post_types_to_taxonomies, 11);
function do_bind_post_types_to_taxonomies() {
   # setup relationships as Tax_slug => array( post_type_slugs )
   foreach ( $relationships as $tax_slug => $post_types ) {
      if ( is_array($post_types) ) {
         foreach ( $post_types as $post_type_slug ) {
            register_taxonomy_for_object_type( "{$tax_slug}", "{$post_type_slug}" );
         }
      } else {
         register_taxonomy_for_object_type("{$tax_slug}", "{$post_types}");
      }
   }
}

これで、カスタム投稿タイプと分類法に関するさまざまな奇妙な問題が解決しました。それがうまくいかない場合は、_update_post_term_countがどのように機能するのかを正確に調べるためにソースを掘り下げる価値があるかもしれません...そして代わりに_update_generic_term_countを強制しているかどうかあなたの関係を調べてください。

1
Privateer