7

I have a wp_localize_script() function in my functions.php where I need to push the current post ID of the current post to a jQuery file. So I was wondering how you can get the current post ID of a post in my functions.php.

These are both not working:

global $post;
$post_id = $post->ID;

global $wp_query;
$post_id = $wp_query->get_queried_object_id();

1 Answer 1

12

If you hook your localize script function to wp_enqueue_scripts, then you will have access to the global $post variable. As long as you pick a hook at or after 'wp' you should have access to the global $post.

<?php
add_action('wp_enqueue_scripts', 'YOUR_NAME_scripts'); 

function YOUR_NAME_scripts() {

            wp_enqueue_script('YOUR_NAME-js');

            global $post;
            $params = array(
                'site_url' => site_url(),
                'admin_ajax_url' => admin_url('admin-ajax.php'),
                'post_id' => $post->ID
            );

            wp_localize_script( 'jquery', 'YOUR_NAME', $params );

}
2
  • Is there any other workaround, as a standalone function for example, instead of inside wp_enqueue_scripts?
    – Manolis
    Commented Sep 17, 2014 at 13:04
  • Yes, just hook into wp_head and echo script tags with var post_id = <?php echo $post->ID;?>; Just make sure to use global $post; first. Or echo your script tags anywhere in the Page/Post Template if you really want. Commented Sep 17, 2014 at 15:44

Not the answer you're looking for? Browse other questions tagged or ask your own question.