Odd map_meta_cap $ args na publicação de edição – às vezes inteiro, às vezes string

Estive cavando no filtro map_meta_cap, pois eu preciso expandir as capacidades do usuário com base no contexto, em determinadas situações. Isso está funcionando bem, mas em meus traços percebi algo estranho sobre a forma como os $ args aparecem na function de retorno de chamada. Aqui está o registro do meu filtro (dentro de uma class):

add_filter( 'map_meta_cap', array(&$this, 'post_map_meta_cap'), 10, 4 ); 

e aqui está a definição da function de retorno de chamada que acompanha:

 public function post_map_meta_cap( $caps, $cap, $user_id, $args ) { error_log("Filter fired: ------> meta_cap args: " . json_encode($args)); } 

Agora, estou na página de administração que mostra todos os meus tipos de postagem personalizados listados e prestes a clicar em “editar” para uma das postagens (número de identificação 6). Aqui está o traço:

 on page: edit.php?post_type=my_custom_post_type click on edit post id 6 Filter fired: map_meta_cap: ------> meta_cap args: [6] Filter fired: admin_enqueue_scripts Filter fired: admin_head Filter fired: in_admin_header Filter fired: admin_bar_menu Filter fired: wp_before_admin_bar_render Filter fired: wp_after_admin_bar_render Filter fired: map_meta_cap: ------> meta_cap args: ["6"] Filter fired: in_admin_footer Filter fired: admin_footer_text Filter fired: admin_footer Filter fired: admin_print_footer_scripts on page: post.php?post=6&action=edit 

Estou escrevendo o valor de $ args com isso:

 json_encode($args) 

que é uma maneira rápida / fácil de obter qualquer object para ser legível em um rastreamento / log.

Então, o que eu achei estranho é que, como você pode ver a primeira vez que o filtro é acionado, a matriz $ args tem um elemento que é um número inteiro , 6. A segunda vez que triggers a matriz tem um elemento e é uma string “6 “.

Eu estou lançando o resultado em número inteiro apenas para estar seguro, agora que vejo isso – mas eu queria saber por que isso faz isso? Esperamos que o ID do post às vezes seja um número inteiro e às vezes seja uma string?

Solutions Collecting From Web of "Odd map_meta_cap $ args na publicação de edição – às vezes inteiro, às vezes string"

A function map_meta_cap lida genericamente com argumentos de contexto – você pode dar qualquer coisa e felizmente passá-lo para baixo da cadeia. São apenas resources específicos como edit_post que esperam que o argumento seja um número inteiro, mas mesmo assim cabe ao chamador passar um valor apropriado.

Aqui é onde você obtém seus mashups de cordas / inteiros – geralmente o chamador passará a ID diretamente de um object WP_Post , mas pode ser de qualquer lugar – outra chamada de database, outro object que tenha uma referência a uma ID de publicação, codificado, etc. palavras, muitas oportunidades para uma string passar.

Você pode tentar um debug_backtrace em seus testes para encontrar os culpados, mas há coisas mais importantes na vida para continuar – fique em seu int-casting e continue codificando;)