register_taxonomy com vários tipos de objetos e update_count_callback

4

A register_taxonomy aceita a matriz como o tipo de objeto para que eu possa vincular muitos tipos de postagem personalizados a uma taxonomia personalizada. Tudo bem.

O problema é que a contagem de taxonomia padrão é sempre zero com as configurações padrão, então o que devo definir para o argumento update_count_callback ?

Eu tenho pensado nisso desde então, a taxonomia está vinculada a vários tipos de postagens, então a contagem é significativa quando estou visualizando um determinado tipo de postagem.

Então, qual é a melhor maneira de lidar com a contagem de taxonomia personalizada se essa taxonomia estiver vinculada a vários tipos de postagem personalizados?

    
por Yoga 15.01.2015 / 18:54

1 resposta

1

Eu me deparo com coisas semelhantes de tempos em tempos. O que acabei fazendo ao usar tipos de postagem personalizados e taxonomias é o seguinte:

  • Configure um retorno de chamada no init (antes de 10) para registrar taxonomias.
  • Configure outro no init (antes de 10) para registrar os tipos de postagem.
  • Configure outro em 10 para relacioná-los, talvez mais tarde, se estiver trabalhando com outras taxonomias e tipos de postagens de outras pessoas e eles estiverem registrando-os em 10.

Fazer isso quase sempre eliminou problemas estranhos que eu tive com objetos personalizados e a documentação sobre funções register_ * em notas do wordpress que você definitivamente deveria estar registrando-os durante o init.

Se você não vinculá-los manualmente, você pode ou não falar corretamente entre eles ... e o update_callback_count é parte do processo de conversa, então eu registro todos os objetos durante o init antes das 10 e depois associá-los todos depois (ou em) 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}");
      }
   }
}

Isso resolveu todos os tipos de problemas estranhos relacionados a tipos de postagem personalizados e taxonomias para mim. Se isso não resolver o problema, talvez valha a pena procurar na fonte para ver exatamente como _update_post_term_count funciona ... e olhar para seus relacionamentos para ver se talvez isso esteja forçando _update_generic_term_count.

    
por Privateer 19.01.2015 / 07:04