获取wordpress插件页面中的当前页面ID

时间:2014-03-12 12:07:16

标签: php wordpress

我需要在循环外的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。如果你知道如何解决这个问题,那么我需要你的支持。提前谢谢。

7 个答案:

答案 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;
}

祝你好运,编码愉快!