在WordPress 3.5.x上的自定义主题小部件中调用wp_enqueue_media()会导致js错误

时间:2013-01-30 18:26:33

标签: wordpress widget themes wordpress-3.5

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

从WordPress 3.5开始,有一个新的Media Uploader而不是旧的ThickBox。

我的小部件曾经在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 Media Uploader的文档?

4 个答案:

答案 0 :(得分:3)

现在为时已晚,但可能对其他人有帮助。我设法使用

使其工作

add_action( 'admin_enqueue_scripts', 'wp_enqueue_media' );

希望它有所帮助!

答案 1 :(得分: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

干杯。

答案 2 :(得分:1)

从codex [1]开始,应该从'admin_equeue_scripts'动作钩子调用函数wp_enqueue_media( $args )。或以后。

示例:

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

答案 3 :(得分:0)

要进行调试,您需要获取发送到浏览器的非缩小版本的js。请参阅docs

<强> SCRIPT_DEBUG

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

define('SCRIPT_DEBUG', true);