14

Most solutions I found are for front-end use. This is for a plugin, so the all activity is in the back-end.

How do I get the page ID that's being currently use(edited) in the admin?

Note I'm out of the loop. I just need to get the ID of page(not posts) that I'm currently seeing in the back-end.

2
  • You can get it from URL wp-admin/post.php?post=14&action=edit Commented Sep 14, 2013 at 5:07
  • 5
    I see the URL as a last shot. I hope there is more elegant way to do that.
    – Daniel
    Commented Sep 14, 2013 at 5:11

4 Answers 4

27

You can also use

$post_id = $_GET['post'];

Or you can use a hook (probably better).

function id_WPSE_114111() {
    global $post;
    $id = $post->ID;
    // do something
}

add_action( 'admin_notices', 'id_WPSE_114111' );

You will need to add a conditional since this will run on all admin pages, I recommend using get_current_screen();

For example to run only on pages:

function id_WPSE_114111() {

    global $my_admin_page;
    $screen = get_current_screen();

    if ( is_admin() && ($screen->id == 'page') ) {
        global $post;
        $id = $post->ID;
        var_dump($id);
    }
}

add_action( 'admin_notices', 'id_WPSE_114111' );
3
  • I need for pages.
    – Daniel
    Commented Sep 14, 2013 at 5:27
  • This also works for pages.
    – Wyck
    Commented Sep 14, 2013 at 5:34
  • 3
    what is global $my_admin_page; for?
    – Omer
    Commented Dec 8, 2016 at 17:26
2

You can add this code in functions.php file and it will give you a meta box above the publish settings box when editing a post or page.

 <?php

function cf_post_id() {
    global $post;

   // Get the data
   $id = $post->ID;

   // Echo out the field
   echo '<input type="text" name="_id" value="' . $id . '" class="widefat" disabled />';
  }

 function ve_custom_meta_boxes() {
    add_meta_box('projects_refid', 'Post ID', 'cf_post_id', 'post', 'side', 'high');
    add_meta_box('projects_refid', 'Page ID', 'cf_post_id', 'page', 'side', 'high');
   }
   add_action('add_meta_boxes', 've_custom_meta_boxes');

?>
1

This is probably the "most secure" way of checking what the current post is on the post edit (and add) page in wp admin.

function wpse114111_get_current_post_id(): ?WP_Post {
    global $post;

        if (empty($post) && array_key_exists('post', $_GET)) {
            $post = get_post($_GET['post']);
        }

        // Optional: get an empty post object from the post_type
        if (empty($post) && array_key_exists('post_type', $_GET)) {
            $object = new stdClass();
            $object->post_type = $_GET['post_type'];
            return new WP_Post($object);
        }

        if (empty($post)) {
            return null;
        }

        return $post;
}
-1

You just use this code in the functions.php file, It will give you a current edit page or post ID

function get_the_current_page_id(){
$post_id = null;
if( isset( $_REQUEST['post']) || isset($_REQUEST['post_ID'] ) ){
    $post_id = empty( $_REQUEST['post_ID'] ) ? $_REQUEST['post'] : $_REQUEST['post_ID' ];
}
    
//print_r($post_id) For check
//die();
}

//get_the_current_page_id() //Call the function

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.