wp_query (и post_id) пуст в admin_init

Я разрабатываю плагин, и одна из проблем, с которыми я сталкиваюсь, заключается в том, что я не могу получить идентификатор сообщения в функции, назначенной hook_init.

Я попробовал несколько разных методов; но все они, похоже, используют $ wp_query. Идентификатор не указан в URL (URL-адреса SEO).

Ниже приведена простая версия кода, который я использую. Я реализовал такой код, как сейчас, и запустил его, просмотрев страницу «Редактировать сообщение»

add_action('admin_init','do_optional_featured_article'); function do_optional_featured_article() { global $wp_query; echo "<pre>"; print_r($wp_query); echo "</pre>"; die(); } 

$ wp_query – в основном пустой массив, в частности, член сообщения пуст

Следуя приведенным ниже рекомендациям Webord, я добавил эту функцию:

 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; } } 

Спасибо, Webord!

Solutions Collecting From Web of "wp_query (и post_id) пуст в admin_init"

В admin нет такой вещи, как текущий WP_Query, потому что большинство страниц в admin не связаны с какой-либо почтой, поэтому страницы, которые имеют какое-либо отношение к сообщению, вы должны получить идентификатор от $_GET как это :

 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 "<pre>" . esc_html( print_r( $post, true ) ) . "</pre>"; // Better way to print_r without breaking your code with the html... die(); } } 

Если вы пытаетесь добиться этого в результате действия Saving, идентификатор сообщения должен находиться в $_POST['post_ID'] ;

Надеюсь, я помог.


Поэтому я немного изменил код:

 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; }