【问题标题】:get the current page id inside wordpress plugin page获取wordpress插件页面中的当前页面ID
【发布时间】:2014-04-16 13:25:02
【问题描述】:

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

【问题讨论】:

  • get_queried_object_id() 即使在循环之外也应该返回页面 ID。您正在运行的页面是否也在 WordPress 设置中的“首页”页面上?

标签: php wordpress


【解决方案1】:

对于那些仍然无法使用的人,您将需要使用某种 add_action(您可以选择要使用的)。对于我的示例,这将毫无问题地返回当前页面 ID,无论是在插件文件夹、函数 php 还是其他地方。

add_action('template_redirect', 'showid');

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

【讨论】:

    【解决方案2】:

    get_the_ID(); or $post->ID; 返回 Wordpress 中的当前页面或帖子 ID。

    但您需要确保您的帖子保存在 wordpress 帖子中 桌子。否则,您 无法 获得 id ,仅仅是因为它是 不是 wordpress 数据库中的条目。

    如果它是静态页面并且不是 wordpress 帖子中的条目,那么get_the_ID() 没有返回任何内容。

    例如:get_the_ID() 不适用于帖子存档页面、wordpress 后端的管理页面等。

    所以 根据这个问题,您正在尝试获取作为后端插件设置页面或任何存档页面的页面的 ID。

    更新

    wordpress中获取当前post 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();

    [ 建议此标签必须在循环内。 ]

    看到这个

          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

    【讨论】:

    • 对于Method (1),您现在只想使用$post->ID,因为函数ID() 不再存在。
    【解决方案3】:

    您可以看到get_defined_vars() 函数中的所有设置和变量:

    var_dump(get_defined_vars());
    

    在您的情况下,您需要获取“_GET”并在“post”内...代码应如下所示:

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

    【讨论】:

      【解决方案4】:

      您可以使用以下技术在循环外获取当前页面中帖子的ID

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

      【讨论】:

      • 我在 function.php 上使用它,但不工作。能指导一下吗?
      【解决方案5】:

      我想这是正确的解决方案:

      $id = get_queried_object_id();
      

      等于:

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

      【讨论】:

        【解决方案6】:

        只有当您将其放入 Wordpress 循环中时,选择的答案才有效。在外面它将变得无用。

        这在任何地方都有效:

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

        【讨论】:

          【解决方案7】:

          尝试使用以下代码获取页面ID

          get_the_ID();
          

          【讨论】:

          • 这并不适用于所有地方,例如在插件中需要当前页面 id 时。
          猜你喜欢
          • 1970-01-01
          • 2020-06-24
          • 1970-01-01
          • 2022-11-02
          • 2011-05-07
          • 2015-06-27
          • 1970-01-01
          • 2020-04-20
          • 2018-06-14
          相关资源
          最近更新 更多