Gancho mais antigo para obter com segurança $ post / $ posts

8

Qual é a ação mais rápida possível em que poderei acessar as $post/$postsvariáveis globais no front e no back-end? Tentei examinar a referência do Codex , a referência de Adam Brown e percorrer a fonte várias vezes, mas não tive muita sorte em encontrar uma boa.

pre_get_postsé muito cedo; O uso posts_selectionnão funciona se você quiser fazer uma segunda chamada get_posts () durante o retorno de chamada; e template_redirectnão é executado no lado do administrador. the_postpode ser anterior template_redirectao front-end, mas também não é executado no back-end. Idealmente, eu gostaria de algo que funcione logo antes do get_post()/get_posts()retorno, mas não estou vendo nada parecido.

Eu usei o the_postsfiltro no passado, mas prefiro uma ação porque é tecnicamente mais correta.

No momento, estou apenas entrando duas vezes; uma vez usando template_redirectpara o front-end e novamente usando admin_xml_nspara o back-end. Eu realmente não gosto disso, já que a minha lógica não está semanticamente relacionada a nenhum desses ganchos, e parece que essa é uma necessidade muito comum e deve haver um gancho como "post_get_posts" (ala pre_get_posts) que funcione em ambos os lados.

Ian Dunn
fonte

Respostas:

12

Para todas as páginas de administração e páginas de front-end, exceto as telas individuais de pós-edição ( wp-admin/post.php), 'wp'é o gancho mais confiável para obter os valores globais.

http://phpxref.ftwr.co.uk/wordpress/nav.html?wp-includes/class-wp.php.source.html#l486

Você pode ver lá que ele dispara imediatamente após os WP::main()disparos WP::register_globals(). O problema de usar coisas como post_resultse get_postsé que ele será executado toda vez que você fizer uma consulta por postagens. 'wp'somente dispara na função WP::main(), que é o núcleo do WP usado para executar a consulta de solicitação principal da página.

Para telas de pós-edição, parece que o primeiro gancho que você pode usar com segurança seria 'add_meta_boxes'. Você só precisa ter certeza de estar em uma página principal ao se conectar, embora ele passe o $postobjeto global como o segundo argumento (o primeiro é o $post_typeda postagem atual).

John P Bloch
fonte
4

posts_resultsé o filtro no resultado da consulta bruta. veja a linha 2627 em wp-includes/query.php.

Milo
fonte