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