全局post变量在wordpress插件中不起作用


global post variable not working in wordpress plugin

我知道Wordpress全局$post可能无法工作,直到某一点,因为它还没有加载,但我想知道是否有一个解决办法。

基本上我是专门为客户端构建一个插件。此时变量没有显示任何内容。

此代码位于plugins文件夹中的一个插件中。

我希望确保它只加载javascript(我遗漏了这一点)时,在特定的页面(由用户选择),目前它加载在所有的页面。

我的另一个选择是在php模板上完成这一切,但说实话,我想把它写成一个插件,以便在将来定制它以供更通用的使用,再加上我对插件的经验很少,所以我也在努力改进这方面的事情。

function include_js() {
  global $post;
  print_r($post);
  if(is_object($post) && $post->ID == 14 ){ 
   // do stuff
   wp_enqueue_script('include-map',  plugin_dir_url( __FILE__ ) . 'map.js');
  }
}
add_action( 'init', 'include_js' );

编辑:我意识到我的主要问题是,我想包括javascript,因为我需要wp_enqueue_script,但我似乎只能得到那项工作,如果你使用init行动,这发生在循环之前。

看到编辑后,尝试连接到wp_enqueue_scripts而不是init。这样的:

function include_js() {
    global $post;
    print_r( $post );
    if ( is_object( $post ) && $post->ID == 14 ) { 
        // do stuff
        wp_enqueue_script( 'include-map',  plugin_dir_url( __FILE__ ) . 'map.js' );
    }
}
add_action( 'wp_enqueue_scripts', 'include_js' );

裁判:http://codex.wordpress.org/Plugin_API/Action_Reference/wp_enqueue_scripts

你应该测试$wp_query->queried_object_id而不是$post->id:

function include_js() {
    global $wp_query;
    if ( $wp_query->queried_object_id == 14 ) { 
        // do stuff
        //...
    }
}
add_action( 'wp_enqueue_scripts', 'include_js' );

不需要任何全局变量等。你可以简单地使用is_single($post)来检查你是否在一个特定的帖子上,然后进入你的脚本队列。你应该总是使用wp_enqueue_scripts钩子将你的函数挂钩到队列脚本和样式

function include_js() {
  if(is_single(14)) { 
   // do stuff
   wp_enqueue_script('include-map',  plugin_dir_url( __FILE__ ) . 'map.js');
  }
}
add_action( 'wp_enqueue_scripts', 'include_js', 999 );

还要记住,在添加自定义脚本/样式时总是添加优先级。参见add_action( $hook, $function_to_add, $priority, $accepted_args )