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

时间:2014-09-16 07:01:36

标签: 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");

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

3 个答案:

答案 0 :(得分:2)

请注意,$postget_queried_object_id()在第一个查询被触发之前不起作用。因此,此选项仅在挂钩template_redirect及更高版本中可用。但是函数.php包含得更早(在after_setup_theme之前),所以这不是解决方案。

一个应该在任何地方工作的功能都是

$url = 'http://' . $_SERVER[ 'HTTP_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
$current_post_id = url_to_postid( $url );

Here是对钩子执行顺序的概述。

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

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

$id = get_queried_object_id();

答案 1 :(得分:0)

您希望全局变量$post如下所示:

http://codex.wordpress.org/Global_Variables

像这样声明$post全局:

global $post;

然后,您应该可以使用$post->ID访问帖子的ID。

以下是$post全局{{1}}全文提供的更完整的属性文档:http://codex.wordpress.org/Function_Reference/ $ post

答案 2 :(得分:0)

这是我的职责之一,永远不会失败。

我不知道为什么WordPress以前没有做过这样的事情。

/**
    * Get current page ID
    * @autor    Ivijan-Stefan Stipic
    * @version  1.0.0
    **/
    function get_current_page_ID(){
        global $post, $wp_query;
        
        if(!is_null($wp_query) && isset($wp_query->post) && isset($wp_query->post->ID) && !empty($wp_query->post->ID))
            return $wp_query->post->ID;
        else if(function_exists('get_the_id') && !empty(get_the_id()))
            return get_the_id();
        else if(!is_null($post) && isset($post->ID) && !empty($post->ID))
            return $post->ID;
        else if('page' == get_option( 'show_on_front' ) && !empty(get_option( 'page_for_posts' )))
            return get_option( 'page_for_posts' );
        else if((is_home() || is_front_page()) && !empty(get_queried_object_id()))
            return get_queried_object_id();
        else if($this->get('action') == 'edit' &&  && isset($_GET['post']) && !empty($_GET['post']))
            return absint($_GET['post']);
        else if(!is_admin() && isset($_GET['p']) && !empty($_GET['p']))
            return absint($_GET['p']);
        
        return false;
    }

此功能检查所有可能的情况并返回当前页面的ID,否则返回false。