Reputation:
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
Reputation: 1
or just use these free online tools
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
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();
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
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
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
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
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
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
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
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