问题描述

为了提高效率,我们试图将某些 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。