web-dev-qa-db-fra.com

register_taxonomy avec plusieurs types d'objet et update_count_callback

Le register_taxonomy accepte le tableau en tant que type d'objet afin que je puisse lier autant de types de publication personnalisés à une taxonomie personnalisée. C'est bon.

Le problème est que le nombre de taxonomie par défaut est toujours égal à zéro avec les paramètres par défaut. Que dois-je définir pour l'argument update_count_callback?

J'y pense depuis, la taxonomie étant liée à plusieurs types de publication, le décompte est significatif lorsque je visualise un type de publication particulier.

Alors, quel est le meilleur moyen de gérer le nombre de taxonomie personnalisé si cette taxonomie est liée à plusieurs types de publication personnalisés?

4
Yoga

Je rencontre des choses semblables de temps en temps. Ce que j'ai fini par utiliser lors de l'utilisation de types d'articles et de taxonomies personnalisés est le suivant:

  • Configurez un rappel sur init (avant 10) pour enregistrer les taxonomies.
  • Configurez-en un autre sur init (avant 10) pour enregistrer les types de publication.
  • Installez-en un autre sur 10 pour les relier, peut-être plus tard si vous travaillez avec des taxonomies personnalisées et des types d'article et qu'ils les enregistrent à 10.

Cela a presque toujours éliminé les problèmes étranges rencontrés avec les objets personnalisés et la documentation sur register_ * dans les notes wordpress que vous devriez absolument enregistrer au cours de la procédure init.

Si vous ne les liez pas manuellement, vous pouvez avoir une conversation correcte entre eux ... et le compte update_callback_count fait partie de la conversation. J'enregistre donc tous les objets pendant init avant 10, puis les associe tous. après (ou sur) 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}");
      }
   }
}

Cela a résolu pour moi toutes sortes de problèmes étranges liés aux types de publication personnalisés et aux taxonomies. Si cela ne vous convient pas, il peut être utile de creuser dans la source pour voir exactement comment fonctionne _update_post_term_count ... et examinez vos relations pour voir si elle force peut-être plutôt _update_generic_term_count.

1
Privateer