3

我正在为我自己的 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 自定义媒体上传,但没有提及此问题

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

4

4 回答 4

4

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

add_action( 'admin_enqueue_scripts', 'wp_enqueue_media' );

希望能帮助到你!

于 2014-06-16T00:13:36.593 回答
1

您遇到的问题是因为您可能将自定义 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 函数中删除注释即可。

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

干杯。

于 2013-03-31T15:02:41.230 回答
1

在 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

于 2015-07-20T05:21:23.857 回答
0

要调试,您需要将非缩小版的 js 发送到浏览器。请参阅文档

脚本调试

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

define('SCRIPT_DEBUG', true);
于 2013-02-09T15:45:32.787 回答