register_taxonomy con múltiples tipos de objetos y update_count_callback

4

La matriz register_taxonomy acepta como tipo de objeto, por lo que puedo vincular tantos tipos de publicaciones personalizadas a una taxonomía personalizada. Eso está bien.

El problema es que el recuento de taxonomía predeterminado siempre es cero con la configuración predeterminada, así que, ¿qué debo establecer para el argumento update_count_callback ?

He estado pensando en esto desde que la taxonomía está vinculada a varios tipos de publicaciones, por lo que el recuento es significativo cuando estoy viendo un tipo de publicación en particular.

Entonces, ¿cuál es la mejor manera de manejar el conteo de taxonomía personalizada si esta taxonomía está vinculada a varios tipos de publicaciones personalizadas?

    
pregunta Yoga 15.01.2015 - 18:54

1 respuesta

1

He encontrado cosas similares de vez en cuando. Lo que acabé haciendo al usar tipos de correos personalizados y taxonomías es lo siguiente:

  • Configure una devolución de llamada en init (antes de 10) para registrar taxonomías.
  • Configura otro en init (antes de 10) para registrar tipos de publicaciones.
  • Configure otro en 10 para relacionarlos, tal vez más adelante si trabaja con taxonomías y tipos de publicaciones personalizados de otras personas y los registra en 10.

Al hacerlo, casi siempre se eliminaron los problemas impares con los objetos personalizados y la documentación sobre el registro_ * funciona en las notas de WordPress en las que definitivamente debería estar registrándolos durante el inicio.

Si no los vinculas manualmente, puedes o no obtener una conversación correcta entre ellos ... y update_callback_count es parte de esa conversación, así que registro todos los objetos durante init antes del 10 y luego Asociarlos todos después (o en) 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}");
      }
   }
}

Para mí, he resuelto todo tipo de problemas extraños relacionados con tipos de correos personalizados y taxonomías. Si eso no funciona, podría valer la pena profundizar en la fuente para ver exactamente cómo funciona _update_post_term_count ... y ver sus relaciones para ver si tal vez está forzando a _update_generic_term_count en su lugar.

    
respondido por el Privateer 19.01.2015 - 07:04

Lea otras preguntas en las etiquetas