如何在function.php文件中获取当前的post_id

Ked*_*r B 3 wordpress

这是我在 function.php 文件中的函数

  function getcity(){
    global $wpdb;

    if($_POST['state'])
            {
                $id=$_POST['state'];
                $district = get_post_meta(get_the_ID() , 'district', true);

                                     var_dump($district);
                $result=$wpdb->get_results("SELECT * FROM districts WHERE state_id='$id'");

                                                       foreach($result as $row) {
                                                             $district_name   = $row-
  >district_name;
                             $district_id     = $row->district_id;

                            echo '<option value="'.$district_id.'">'.$district_name.'</option>';


            }
     }
   }
 add_action("wp_ajax_nopriv_getcity", "getcity");
 add_action("wp_ajax_getcity", "getcity");
Run Code Online (Sandbox Code Playgroud)

我想在此函数中获取当前帖子 ID 以显示选定的下拉值..

GDY*_*GDY 8

请注意,$postorget_queried_object_id()在第一个查询被触发之前不起作用。所以这个选项只在钩子template_redirect和以后可用。但是functions.php 被包含得更早(在 hook 之前after_setup_theme)所以这不是一个解决方案。

一个几乎可以在任何地方工作的函数是

$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
$current_post_id = url_to_postid( $url );
Run Code Online (Sandbox Code Playgroud)

这是钩子执行顺序的概述。

如果您的代码在template_redirect钩子之后执行,这些选项可能会更好:

global $post;
$id = $post->id;
Run Code Online (Sandbox Code Playgroud)

或者

$id = get_queried_object_id();
Run Code Online (Sandbox Code Playgroud)