我正在为自己的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的文档?
答案 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);