wp_query (e post_id) está vazio no admin_init

Estou desenvolvendo um plugin e uma das questões em que estou executando é que não consigo obter o ID da postagem dentro de uma function atribuída ao gancho admin_init.

Provei alguns methods diferentes; Mas, todos eles parecem usar o $ wp_query. O ID não está no URL (URL de SEO).

Abaixo está uma versão simples do código que estou usando. Eu implementei o código como este agora e o executei visualizando a página “editar publicação”

add_action('admin_init','do_optional_featured_article'); function do_optional_featured_article() { global $wp_query; echo "
"; print_r($wp_query); echo "

"; die(); }

$ wp_query é uma matriz principalmente vazia, notavelmente, o membro do post está vazio

Seguindo o conselho da Webord abaixo, adicionei esta function:

 function get_admin_post() { if( isset($_GET['post']) ) { $post_id = absint($_GET['post']); // Always sanitize $post = get_post( $post_id ); // Post Object, like in the Theme loop return $post; } elseif( isset($_POST['post_ID']) ) { $post_id = absint($_POST['post_ID']); // Always sanitize $post = get_post( $post_id ); // Post Object, like in the Theme loop return $post; } else { return false; } } 

Obrigado Webord !!

Solutions Collecting From Web of "wp_query (e post_id) está vazio no admin_init"

No administrador, não há como o WP_Query atual, porque a maioria das páginas no administrador não está vinculada a nenhuma postagem, então as páginas que têm alguma relação com uma postagem devem pegar a ID do $_GET como esse :

 add_action('admin_init','do_optional_featured_article'); function do_optional_featured_article() { if( isset($_GET['post']) ) { $post_id = absint($_GET['post']); // Always sanitize $post = get_post( $post_id ); // Post Object, like in the Theme loop echo "
" . esc_html( print_r( $post, true ) ) . "

"; // Better way to print_r without breaking your code with the html... die(); } }

Se você está tentando alcançar isso em uma ação de salvamento, o ID da postagem deve estar em $_POST['post_ID'] ;

Espero ter ajudado.


Então, mudei seu código um pouco mais:

 function get_admin_post() { $post_id = absint( isset($_GET['post']) ? $_GET['post'] : ( isset($_POST['post_ID']) ? $_POST['post_ID'] : 0 ) ); $post = $post_id != 0 ? get_post( $post_id ) : false; // Post Object, like in the Theme loop return $post; }