繁体   English   中英

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

[英]Calling wp_enqueue_media() in a custom theme widget on WordPress 3.5.x cause js error

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

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

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

add_action( 'admin_enqueue_scripts', 'wp_enqueue_media' );

希望能帮助到你!

您遇到的问题是因为您可能将自定义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中

干杯。

从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

要进行调试,您需要获取发送到浏览器的非缩小版本的js。 查看文档

SCRIPT_DEBUG

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

define('SCRIPT_DEBUG', true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM