我需要在循环外的WordPress插件页面中获取当前page id
。我为获取当前page id
而编写的代码在我的插件页面中。我尝试了很多代码但不起作用
$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();
但它对我不起作用。
global $post;
echo "pageid: ".$post->ID;
这也行不通。
当我尝试
时 global $wp_query;
$post_obj = $wp_query->get_queried_object();
$Page_ID = $post_obj->ID;
echo $Page_ID;
然后出现错误消息
致命错误:调用成员函数get_queried_object() 在一个非对象中 H:\ XAMPP \ htdocs中\ WordPress的\可湿性粉剂内容\插件\朝鲜劳动党\ wpk.php 在线876
我打印时:
global $wp_query;
print_r($wp_query);
然后结果是:
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] =>
)
我不知道如何解决这个问题,如何获得当前page id
。如果你知道如何解决这个问题,那么我需要你的支持。提前谢谢。
答案 0 :(得分:35)
get_the_ID(); or $post->ID;
返回Wordpress中的当前页面或帖子ID。
但是你需要确保你的帖子保存在wordpress帖子中 表。其他明智的你无法获取id,仅仅是因为它 不是wordpress数据库中的条目。
如果它是一个静态页面而且它不是wordpress帖子中的条目,则get_the_ID()
没有返回任何内容。
例如:get_the_ID()没有在post archive页面,wordpress后端的管理页面等工作。
所以根据此问题 您正在尝试获取作为后端插件设置页面或任何存档页面的页面的ID。
<强>更新强>
在wordpress中获取当前帖子ID的方法
(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();
[建议此标记必须在The Loop中。 ]
看到这个
function get_the_ID() {
$post = get_post();
return ! empty( $post ) ? $post->ID : false;
}
即get_the_ID()返回当前$ post的ID。
(5)get_query_var('page_id')
[如果我们使用漂亮的永久链接将无法工作]
https://codex.wordpress.org/Function_Reference/get_query_var
答案 1 :(得分:13)
您可以使用以下技术在循环外的当前页面中获取ID
帖子:
global $wp_query;
$post_id = $wp_query->post->ID;
$post = get_post( $post_id );
$slug = $post->post_name;
答案 2 :(得分:4)
尝试使用以下代码获取页面ID
get_the_ID();
答案 3 :(得分:1)
只有当你把它放在Wordpress循环中时,选择的答案才能正常工作。在外面它将变得无用。
这无处不在:
global $wp_query;
$postID = $wp_query->post->ID;
答案 4 :(得分:1)
我想这是正确的解决方案:
$id = get_queried_object_id();
等于:
function get_queried_object_id() {
global $wp_query;
return $wp_query->get_queried_object_id();
}
答案 5 :(得分:0)
您可以在get_defined_vars()
函数中看到所有设置和变量:
var_dump(get_defined_vars());
在你的情况下,你需要得到&#39; _GET&#39;并且内部&#39;发布&#39; ...代码应如下所示:
$tmp = get_defined_vars();
var_dump($tmp['_GET']['post']);
答案 6 :(得分:0)
对于那些仍然无法使用的人,您需要使用某种 add_action(您可以选择要使用的那个)。对于我的示例,这将毫无问题地返回当前页面 ID,无论是在插件文件夹、php 函数还是其他地方。
add_action('template_redirect', 'showid');
function showid(){
global $wp_query;
$theid = intval($wp_query->queried_object->ID);
echo $theid;
}
祝你好运,编码愉快!