In the admin, there is not such thing as the current WP_Query, because most of the pages on the admin are not linked to any post, so the pages that have any relation to a post you should grab the ID from the $_GET
like that:
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();
}
}
If you are trying to achieve this on a Saving action, the post id should be in $_POST['post_ID']
;
Hope I’ve helped.
So I’ve changed your code just a little bit more:
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;
}