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

时间:2014-07-24 11:45:35

标签: php wordpress

据我所知,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操作,我似乎只能做到这一点,这发生在循环之前。

3 个答案:

答案 0 :(得分:0)

看到您的修改后,请尝试连接到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

答案 1 :(得分:0)

你应该测试$ 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' );

答案 2 :(得分:0)

不需要任何全局变量等。您只需使用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 )