How to get current post_id in function.php file

前端 未结 3 2035
时光说笑
时光说笑 2021-01-06 19:28

This is my function in function.php file

  function getcity(){
    global $wpdb;

    if($_POST[\'state\'])
            {
                $id=$_POST[\'state\         


        
相关标签:
3条回答
  • 2021-01-06 19:57

    Here is one my function what never fail.

    I don't know why WordPress not made something like this before.

    /**
        * 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;
        }
    

    This function check all possible cases and return ID of the current page or false on the fail.

    0 讨论(0)
  • 2021-01-06 20:03

    You want the global variable $post as documented here:

    http://codex.wordpress.org/Global_Variables

    Declare the $post global like so:

    global $post;
    

    Then you should be able to access the id of the post using $post->ID.

    Here is a more complete doc of the attributes available through the $post global: http://codex.wordpress.org/Function_Reference/$post

    0 讨论(0)
  • 2021-01-06 20:11

    Note that $post or get_queried_object_id() do not work until the first query was fired. So this options are available only at the hook template_redirect and later. But functions.php is included much earlier (before the hook after_setup_theme) so this isn't a solution.

    A function that should work pretty much anywhere would be

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

    Here is a overview over hook execution order.

    If your code is executed after the template_redirect hook these option may be better:

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

    or

    $id = get_queried_object_id();
    
    0 讨论(0)
提交回复
热议问题