【问题标题】:WordPress WP Enqueue Script IssueWordPress WP Enqueue 脚本问题
【发布时间】:2017-05-26 20:31:59
【问题描述】:

我在 WordPress 中遇到了关于 wp_enqueue_script() 的奇怪事情,我想要通过向 functions.php 添加一个动作挂钩来在页面上添加一个脚本,但是当我这样做时,它不会添加页面上的脚本,但是当我将代码作为插件放置时,它现在会在页面上添加脚本

注意: 在functions.php 中,当我在页脚中添加脚本时:add_action('wp_footer','function_name'); 它工作正常,但是当我将它添加到 wp_head 并初始化时,它不会在我添加脚本时添加将代码放在functions.php 上,但当我将其作为插件执行时,即使我将其添加到 wp_head 和 init 上,它也能完美运行

我需要在初始化或 WP_HEAD 上添加脚本,但是当我将代码放在函数上时它不起作用。PHP 我需要脚本成为主题的一部分,而不是作为插件

//functions.php
add_action('init', 'function_name');

function function_name(){
wp_enqueue_script( 'script_holder', get_template_directory_uri() . '/script.js');   
}

//as a plugin
add_action('init', 'function_name');

function function_name() {
    $plugin_location=WP_PLUGIN_URL.'/'.str_replace(basename( __FILE__),"",plugin_basename(__FILE__));
    if( !is_admin()){
        wp_enqueue_script( 'script_holder', $plugin_location . '/script.js');
    }
}

我知道即使在functions.php中它也应该可以工作,但我真的很想知道为什么会这样 谁能帮我解释一下为什么会这样?

非常感谢

基本上这正是我正在做的事情:

add_action('init', 'override_jquery');

function override_jquery() {
    if( !is_admin()){
        wp_deregister_script('jquery');
        wp_enqueue_script( 'nashgraphics_jquery_library', get_template_directory_uri() . '/bootstrap/js/jquery-1.9.0.min.js');
    }
}

【问题讨论】:

    标签: wordpress wordpress-theming


    【解决方案1】:

    可能会发生几件事,但由于问题仅发生在 functions.php 上,人们会认为这是与主题相关的。 您应该确保主题同时具有:

    wp_head() - (紧接在</head> 之前)

    还有

    wp_footer() - (即将关闭之前</body>

    如果主题作者没有同时包含这两个功能,或者主题甚至缺少其中一个功能,则脚本可能无法加载。 (而且 80%​​ 的插件都会有问题)。

    此外,您没有指定使用哪个主题(您自己的代码??)以及它是否是子主题。

    您正在使用不能被子主题覆盖的get_template_directory_uri(),我不知道这是否是问题的一部分,但您可能还想尝试使用get_stylesheet_directory_uri(),这在许多情况下更好选择。

    看到你的更新:

    将核心 jQuery 替换为另一个没有后备的 jQuery 是一种非常糟糕的做法。 无论如何,您可以尝试删除 !is_admin() 条件,或者注销并查看您的站点代码。 (我有一种感觉,您在登录并打开 wp 管理栏时正在调试它..)

    【讨论】:

    • 是的,我正在尝试创建自己的父主题,当我使用 add_action('init','function_name'); 将脚本排入队列时真的很奇怪作为一个 wordpress 插件,它成功地包含了脚本,但是当我在 functions.php 中执行它时,它不包含脚本
    • 你读过我写的吗?你有 wp_head() 和 wp_footer() 吗??
    • 是的,我已经阅读了您的回复,我在正确的位置同时拥有 wp_header() 和 wp_footer(),它应该在 !is_admin 内部,因为该功能仅适用于前端,而当我不要使用 !is_admin 会破坏我的特色帖子图片上传器,所以这就是我使用 !is_admin 的原因之一,除了前端目的
    【解决方案2】:

    在前端排队脚本的正确钩子是wp_enqueue_scripts:http://codex.wordpress.org/Plugin_API/Action_Reference/wp_enqueue_scripts

    【讨论】:

    • 感谢您的回复,是的,我知道,但我真的需要回答我的问题,因为我担心的是为什么当我将代码作为插件放置时它包含脚本而不包含当我把它放在functions.php上时的脚本
    • init 在所有插件加载后触发。你可以尝试连接到plugins_loaded:codex.wordpress.org/Plugin_API/Action_Reference/plugins_loaded
    • 也没有工作,请阅读上面的编辑,这样你就知道我到底想要做什么。谢谢
    • 好吧,我在本地安装上测试了你的代码(twentytwelve + functions.php 中的代码),它可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    相关资源
    最近更新 更多