【问题标题】:Calling wp_enqueue_media() in a custom theme widget on WordPress 3.5.x cause js error在 WordPress 3.5.x 上的自定义主题小部件中调用 wp_enqueue_media() 会导致 js 错误
【发布时间】:2013-01-30 18:26:33
【问题描述】:

我正在为自己的 WordPress 主题编写自定义小部件。

从 WordPress 3.5 开始,有一个新的媒体上传器,而不是旧的厚盒。

我的小部件过去可以在 3.5 之前的 WordPress 版本上正常工作,但现在新的媒体上传器阻止了旧的工作行为。

我在 costructor 中添加了一个检查 wp_enqueue_media 函数的存在:

if( function_exists( 'wp_enqueue_media' ) ) {
    wp_enqueue_media();
}

但是当这部分 cose 被执行时,javascript 会在停止 Js 引擎的控制台中抛出错误:

Uncaught TypeError: Cannot read property 'id' of undefined    load-scripts.php:69

我删除了所有小部件代码并将其简化为基本框架...该错误是由 wp_enqueue_media() 调用引起的,但我无法弄清楚为什么以及如何修复它。

我也看了Wordpress 3.5 custom media upload for your theme options,但是没有提到这个问题

谁能指出我正确的方向?是否有任何适用于 WordPress 3.5 媒体上传器的文档?

【问题讨论】:

  • 我遇到相同但不同的错误消息:Uncaught TypeError: Cannot read property 'length' of undefined jquery.js:2

标签: wordpress widget themes wordpress-3.5


【解决方案1】:

现在对你来说太晚了,但可能对其他人有帮助。我设法使用

add_action( 'admin_enqueue_scripts', 'wp_enqueue_media' );

希望对你有帮助!

【讨论】:

    【解决方案2】:

    您遇到的问题是因为您可能将自定义 jquery 放在标题中,而您没有注册 wordpress jquery。如果定义了多个 jquery,您将收到该错误。

    我的建议是你应该删除你的 jquery 脚本或从 wordpress 中删除一个

    function remove_jquery() {
    
    wp_deregister_script('jquery');
    //wp_register_script('jquery', ("//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"), false);
    
    }
    
    if(!is_admin()){add_action('init', 'remove_jquery');}
    

    我建议您使用 jquery wordpress 为您提供,如果没有,正确的入队方法是取消注册默认值并注册您的 jquery。只需从 remove_jquery 函数中删除 cmets。

    另外,上面的代码应该放在functions.php中

    干杯。

    【讨论】:

    • 对不起,但这不是我要做的:如果存在的话,我总是使用 Wordpress 提供的 Js 库。
    • 试过了。我遇到了同样的问题并寻找解决方案,最后我发现 jquery 也是自定义嵌入在标题中的。这就是为什么我回答的原因,以为你有同样的问题 :) 另外,如果你的小部件与最后一个一起工作,请确保你不要将脚本加倍,旧方法是将不同的脚本排入队列,现在 wp_enqueue_media() 完成所有他们。如果旧媒体有任何剩余的工作,也许这就是问题:)
    • 谢谢@eek 我会仔细研究主题、小部件和插件...可能还有一些东西...
    • 如果你能给我一个网址,也许我可以看看它:)
    【解决方案3】:

    从 codex [1] 中,函数 wp_enqueue_media( $args ) 应该从 'admin_equeue_scripts' 动作挂钩中调用。或更高版本。

    例子:

    function enqueue_media() {
        if( function_exists( 'wp_enqueue_media' ) ) {
            wp_enqueue_media();
        }
    }
    
    add_action('admin_enqueue_scripts', 'enqueue_media');
    

    希望对您有所帮助。

    [1]。 https://codex.wordpress.org/Function_Reference/wp_enqueue_media

    【讨论】:

      【解决方案4】:

      要调试,您需要将非缩小版的 js 发送到浏览器。见docs

      SCRIPT_DEBUG

      SCRIPT_DEBUG 是一个相关的常量,它将强制 WordPress 使用核心 CSS 和 Javascript 文件的“开发”版本,而不是通常加载的缩小版本。当您测试对任何内置 .js 或 .css 文件的修改时,这很有用。默认为假。

      define('SCRIPT_DEBUG', true);
      

      【讨论】:

        猜你喜欢
        • 2017-02-20
        • 1970-01-01
        • 1970-01-01
        • 2021-05-26
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多