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

Wordpress 如何在function.php文件中获取当前post_id,wordpress,Wordpress,这是function.php文件中的函数 function getcity(){ global $wpdb; if($_POST['state']) { $id=$_POST['state']; $district = get_post_meta(get_the_ID() , 'district', true);

这是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");

我想在此函数中获取当前帖子id,以显示所选的下拉列表值。

您想要全局变量$post,如下所示:

声明$post global,如下所示:

global $post;
然后您应该能够使用$post->id访问帖子的id

下面是通过$post global:$post提供的更完整的属性文档。请注意,$post或get_queryed_object_id在启动第一个查询之前不起作用。因此,此选项仅在挂钩模板_重定向和更高版本中可用。但是functions.php包含在hook after_setup_主题之前,所以这不是一个解决方案

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

$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
$current_post_id = url_to_postid( $url );
是对钩子执行顺序的概述

如果您的代码是在模板链接之后执行的,那么这些选项可能会更好:

global $post;
$id = $post->id;


这是我的一个从未失败的功能

我不知道为什么WordPress以前没有做过这样的东西

/**
 * Get current page ID
 * @autor    Ivijan-Stefan Stipic
 * @version  2.0.0
**/
function get_current_page_ID(){

    static $current_page_ID;
    if(!$current_page_ID) return $current_page_ID;
    
    global $post, $wp_query, $wpdb;
    
    if(!is_null($wp_query) && isset($wp_query->post) && isset($wp_query->post->ID) && !empty($wp_query->post->ID)){
        $current_page_ID = $wp_query->post->ID;
    } else if(function_exists('get_the_id') && !empty(get_the_id())){
        $current_page_ID = get_the_id();
    }else if(!is_null($post) && isset($post->ID) && !empty($post->ID))
        $current_page_ID = $post->ID;
    else if( (isset($_GET['action']) && sanitize_text_field($_GET['action']) == 'edit') && $post = ((isset($_GET['post']) && is_numeric($_GET['post']))  ? absint($_GET['post']) : false))
        $current_page_ID = $post;
    else if($p = ((isset($_GET['p']) && is_numeric($_GET['p']))  ? absint($_GET['p']) : false))
        $current_page_ID = $p;
    else if($page_id = ((isset($_GET['page_id']) && is_numeric($_GET['page_id']))  ? absint($_GET['page_id']) : false))
        $current_page_ID = $page_id;
    else if(!is_admin() && $wpdb)
    {
        $actual_link = rtrim($_SERVER['REQUEST_URI'], '/');
        $parts = explode('/', $actual_link);
        if(!empty($parts))
        {
            $slug = end($parts);
            if(!empty($slug))
            {
                if($post_id = $wpdb->get_var(
                    $wpdb->prepare(
                        "SELECT ID FROM {$wpdb->posts} 
                        WHERE 
                            `post_status` = %s
                        AND
                            `post_name` = %s
                        AND
                            TRIM(`post_name`) <> ''
                        LIMIT 1",
                        'publish',
                        sanitize_title($slug)
                    )
                ))
                {
                    $current_page_ID = absint($post_id);
                }
            }
        }
    }
    else if(!is_admin() && 'page' == get_option( 'show_on_front' ) && !empty(get_option( 'page_for_posts' ))){
        $current_page_ID = get_option( 'page_for_posts' );
    }
    
    return $current_page_ID;
}

此函数检查所有可能的情况,并在失败时返回当前页面的ID或false。

您能告诉我应该做什么吗?$post在该阶段不可用。如果是在稍后调用的函数中,则可以。但是直接在包含functions.php时,它并没有被设置。url_to_posted是一个很好的函数,但由于某些原因,它在某些服务器上可能会很重。
/**
 * Get current page ID
 * @autor    Ivijan-Stefan Stipic
 * @version  2.0.0
**/
function get_current_page_ID(){

    static $current_page_ID;
    if(!$current_page_ID) return $current_page_ID;
    
    global $post, $wp_query, $wpdb;
    
    if(!is_null($wp_query) && isset($wp_query->post) && isset($wp_query->post->ID) && !empty($wp_query->post->ID)){
        $current_page_ID = $wp_query->post->ID;
    } else if(function_exists('get_the_id') && !empty(get_the_id())){
        $current_page_ID = get_the_id();
    }else if(!is_null($post) && isset($post->ID) && !empty($post->ID))
        $current_page_ID = $post->ID;
    else if( (isset($_GET['action']) && sanitize_text_field($_GET['action']) == 'edit') && $post = ((isset($_GET['post']) && is_numeric($_GET['post']))  ? absint($_GET['post']) : false))
        $current_page_ID = $post;
    else if($p = ((isset($_GET['p']) && is_numeric($_GET['p']))  ? absint($_GET['p']) : false))
        $current_page_ID = $p;
    else if($page_id = ((isset($_GET['page_id']) && is_numeric($_GET['page_id']))  ? absint($_GET['page_id']) : false))
        $current_page_ID = $page_id;
    else if(!is_admin() && $wpdb)
    {
        $actual_link = rtrim($_SERVER['REQUEST_URI'], '/');
        $parts = explode('/', $actual_link);
        if(!empty($parts))
        {
            $slug = end($parts);
            if(!empty($slug))
            {
                if($post_id = $wpdb->get_var(
                    $wpdb->prepare(
                        "SELECT ID FROM {$wpdb->posts} 
                        WHERE 
                            `post_status` = %s
                        AND
                            `post_name` = %s
                        AND
                            TRIM(`post_name`) <> ''
                        LIMIT 1",
                        'publish',
                        sanitize_title($slug)
                    )
                ))
                {
                    $current_page_ID = absint($post_id);
                }
            }
        }
    }
    else if(!is_admin() && 'page' == get_option( 'show_on_front' ) && !empty(get_option( 'page_for_posts' ))){
        $current_page_ID = get_option( 'page_for_posts' );
    }
    
    return $current_page_ID;
}