问题描述
为了提高效率,我们试图将某些 JS 脚本仅绑定在一个主题的特定页面模板上,该主题是一个表单:page-with-form.php
在主题 functions.php 中,我们定义了一个 init_method:
function my_init_method(){
$dir = get_bloginfo('stylesheet_directory')."/js/jquery.js";
wp_deregister_script('jquery');
wp_register_script('jquery',$dir);
wp_enqueue_script('jquery');
$dir = get_bloginfo('stylesheet_directory')."/js/jquery.validate.min.js";
wp_deregister_script('jquery.validate.min');
wp_register_script('jquery.validate',$dir);
wp_enqueue_script('jquery.validate.min');
$dir = get_bloginfo('stylesheet_directory')."/js/funcion.js";
wp_deregister_script('funcion');
wp_register_script('funcion',$dir);
wp_enqueue_script('funcion');
}
然后我们预计我们可以在 page-with-form.php 页面模板 (before get_header()) 的贴片线上添加:
add_action('init', 'my_init_method');
-
这不可能吗
-
我们是否强制将一个 if 规则添加到 functions.php 函数来检测我们在该页面上?
基于答案的代码修改:在页面模板上直接加载函数,不需要 add_action(“init” …
my_init_method();
...
get_header();
最佳解决方案
init
比页面模板加载早很多,而不是排队的合适位置 (尽管许多教程和文档都使用它) 。
将您的功能挂接到 wp_enqueue_scripts
,并确保您在 wp_head()
调用模板之前进行挂接。
次佳解决方案
除了使用正确的钩子 (由 @Rarst 指出) 之外,您需要将功能代码移至 functions.php
,并将功能内容包装在 if ( is_page( 'page-with-form' ) )
条件中。
第三种解决方案
当您加载模板文件时,您已经通过了'template_redirect'
钩子,太晚了 (参见:Plugin/Action API Reference) 。
您需要在您的 functions.php 文件中设置 add_action
调用,该文件在 after_setup_theme
钩子之前加载 – 这是主题的第一个可用钩子。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。