[英]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.