user3400696
user3400696

Reputation:

get the current page id inside wordpress plugin page

I need to get the current page id in WordPress plugin page outside the loop. And the code I wrote for getting current page id is in my plugin page. I tried many codes, but doesn't work

$page_object = get_queried_object();
$page_id     = get_queried_object_id();


 // "Dirty" pre 3.1
 global $wp_query;

$page_object = $wp_query->get_queried_object();
$page_id     = $wp_query->get_queried_object_id();

But it doesn't work for me .

  global $post;
  echo "pageid: ".$post->ID;

This is also not working.

When I try

     global $wp_query;
     $post_obj = $wp_query->get_queried_object();
     $Page_ID = $post_obj->ID;
     echo $Page_ID;

Then a error message appears

Fatal error: Call to a member function get_queried_object() on a non-object in H:\xampp\htdocs\wordpress\wp-content\plugins\wpk\wpk.php on line 876

When I print:

global $wp_query;
print_r($wp_query);

then result is:

WP_Query Object
(
    [query] => 
    [query_vars] => Array
        (
        )

    [tax_query] => 
    [meta_query] => 
    [date_query] => 
    [queried_object] => 
    [queried_object_id] => 
    [request] => 
    [posts] => 
    [post_count] => 0
    [current_post] => -1
    [in_the_loop] => 
    [post] => 
    [comments] => 
    [comment_count] => 0
    [current_comment] => -1
    [comment] => 
    [found_posts] => 0
    [max_num_pages] => 0
    [max_num_comment_pages] => 0
    [is_single] => 
    [is_preview] => 
    [is_page] => 
    [is_archive] => 
    [is_date] => 
    [is_year] => 
    [is_month] => 
    [is_day] => 
    [is_time] => 
    [is_author] => 
    [is_category] => 
    [is_tag] => 
    [is_tax] => 
    [is_search] => 
    [is_feed] => 
    [is_comment_feed] => 
    [is_trackback] => 
    [is_home] => 
    [is_404] => 
    [is_comments_popup] => 
    [is_paged] => 
    [is_admin] => 
    [is_attachment] => 
    [is_singular] => 
    [is_robots] => 
    [is_posts_page] => 
    [is_post_type_archive] => 
    [query_vars_hash] => 
    [query_vars_changed] => 1
    [thumbnails_cached] => 
    [stopwords:WP_Query:private] => 
)

I don't know how to solve this, how to get the current page id.If you know how to solve this, then I need your support. Thanks in advance.

Upvotes: 31

Views: 115752

Answers (10)

Memed
Memed

Reputation: 1

or just use these free online tools

https://basrh.com/id-grabber

Actually, it's mine, and I usually need a WordPress ID grabber for a quick removing page or excluding it from the sitemap. and then I try to find an easy online tool and can't find it. so I created a simple id scrap using BeautifulSoup4 Python and just injected it into my personal site.

Python code: Google Colab

feel free to try it out and let me know if you find any issues or bugs. Thanks!!

Upvotes: 0

Sagin
Sagin

Reputation: 1019

get_the_ID(); or $post->ID; returns the current page or post id in Wordpress.

But you need to ensure that your post is saved in wordpress post table, otherwise you can't get the id , simply because it is not an entry in wordpress database.

If it is a static page and it's not an entry in wordpress post then, get_the_ID() doesn't return anything.

For example:

get_the_ID() isn't going to work in post archive pages, administration pages in wordpress back-end etc.

So as per this question you are trying to get the id of the page that is a back-end plugin setting page or any archive page.

UPDATE

Methods to get the current post id in wordpress

(1) global $post; $post->ID();

(2) global $wp_query; $post_id = $wp_query->get_queried_object_id();

(3) global $wp_query; $post_id = $wp_query->post->ID;

(4) get_the_ID();

  • [ It is recommended that this tag must be within The Loop. ]

see this:

function get_the_ID(){
  $post = get_post();
  return !empty($post) ? $post->ID : false;
}

i.e. get_the_ID() returns the id of the current $post.

(5) get_query_var('page_id')

Upvotes: 46

Md Abu Sohib Hossain
Md Abu Sohib Hossain

Reputation: 71

Above solutions did not works for me. I did it like this and works for me.

add_action ( 'after_setup_theme', 'custom_function' );
function custom_function() {
    $current_url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    // get page id from url and check for ssl enabled 
    $pageId = url_to_postid(set_url_scheme($current_url));
    
} 

Upvotes: 2

Anand Mohan
Anand Mohan

Reputation: 111

Nothing seemed to work for me until I tried this

<?php

function child_pages() {
  
    $page_id = get_query_var( 'paged' ) ? (int) get_query_var( 'paged' ) : 1;

    echo "<h2>" . $page_id . "</h2>";

}

add_action( 'template_redirect', 'child_pages' );
?>

Upvotes: 0

IndustryDesigns
IndustryDesigns

Reputation: 2268

For those of you who this still isn't working for, you will need to use some sort of add_action (you can choose which one you want to use). For my example, this will return the current page ID without any problems, regardless of whether in a plugin folder, functions php, or elsewhere.

add_action('template_redirect', 'showid');

function showid(){
    global $wp_query;
    $theid = intval($wp_query->queried_object->ID);
    echo $theid;
}

Upvotes: 0

Brane
Brane

Reputation: 3339

You get see all of the settings and variables in get_defined_vars() function:

var_dump(get_defined_vars());

In your case you need to get '_GET' and inside 'post'... The code should look like this:

$tmp = get_defined_vars();
var_dump($tmp['_GET']['post']);

Upvotes: 0

Rajalakshmi
Rajalakshmi

Reputation: 289

You can get ID of the post in current page outside the loop using the technique below:

global $wp_query;
$post_id = $wp_query->post->ID;

$post = get_post( $post_id );
$slug = $post->post_name;

Upvotes: 16

D.A.H
D.A.H

Reputation: 919

I guess that this is the proper solution:

$id = get_queried_object_id();

which equals to:

function get_queried_object_id() {
    global $wp_query;
    return $wp_query->get_queried_object_id();
}

Upvotes: 4

Dreszczyk
Dreszczyk

Reputation: 118

Chosen answer is working only if you put it in the Wordpress loop. Outside it will render useless.

This is working everywhere:

global $wp_query;
$postID = $wp_query->post->ID;

Upvotes: 2

Ram Sharma
Ram Sharma

Reputation: 8809

try to use below code to get the page id

get_the_ID();

Upvotes: 5

Related Questions