我正在使用Wordpress 4.0,我正在wp_enqueue_media从不同的wp-admin页面调用,因为我正在编写的插件使得不仅可以从wp-adminWordpress核心已经允许的页面上传图像.
我是这样打电话的wp_enqueue_media:
function my_admin_load_styles_and_scripts() {
wp_enqueue_media();
}
add_action( 'admin_enqueue_scripts', 'my_admin_load_styles_and_scripts' );
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,当从/wp-admin/upload.php?mode=list页面调用时,此enqueue会导致以下javascript异常:
TypeError: wp.media(...) is undefined
所有其他页面工作得很好,甚至 /wp-admin/upload.php?mode=grid
有任何想法吗?谢谢你的帮助
我遇到了同样的问题......我所做的就是确保我没有在upload.php页面上包含wp_enqueue_media()!在这个if语句中包装你的函数
if( is_admin() && ! empty ( $_SERVER['PHP_SELF'] ) && 'upload.php' !== basename( $_SERVER['PHP_SELF'] ) ) {
function my_admin_load_styles_and_scripts() {
wp_enqueue_media();
}
add_action( 'admin_enqueue_scripts', 'my_admin_load_styles_and_scripts' );
}
Run Code Online (Sandbox Code Playgroud)
"is_admin()"部分还确保仅在管理区域中运行,而不是在前端运行.在我看来,让事情变得更加清晰.
更新:1
这是我通过一些研究发现的.当您查看wp-admin/upload.php时,网格布局有一个新的部分.在该部分中,您将获得以下调用(第24-26行):
wp_enqueue_media();
wp_enqueue_script( 'media-grid' );
wp_enqueue_script( 'media' );
Run Code Online (Sandbox Code Playgroud)
你可能在这里没有得到任何错误,因为它wp_enqueue_media()有一个内置的检查,以确保每页只调用一次(wp-includes/media.php中的第2785行).
在upload.php页面的下方,在网格代码之后,您只能看到以下调用(第192行):
wp_enqueue_script( 'media' );
Run Code Online (Sandbox Code Playgroud)
没有调用wp_enqueue_media()(WordPress中的错误?我不知道),但是这一行导致了这个问题.您可以将代码更新为:
if( is_admin() ) {
function my_admin_load_styles_and_scripts() {
$mode = get_user_option( 'media_library_mode', get_current_user_id() ) ? get_user_option( 'media_library_mode', get_current_user_id() ) : 'grid';
$modes = array( 'grid', 'list' );
if ( isset( $_GET['mode'] ) && in_array( $_GET['mode'], $modes ) ) {
$mode = $_GET['mode'];
update_user_option( get_current_user_id(), 'media_library_mode', $mode );
}
if( ! empty ( $_SERVER['PHP_SELF'] ) && 'upload.php' === basename( $_SERVER['PHP_SELF'] ) && 'grid' !== $mode ) {
wp_dequeue_script( 'media' );
}
wp_enqueue_media();
}
add_action( 'admin_enqueue_scripts', 'my_admin_load_styles_and_scripts' );
}
Run Code Online (Sandbox Code Playgroud)
它会阻止错误......
说明:第3-8行直接取自wp-admin/upload.php(第15-21行).当您在upload.php上显示时,他们只会告诉您是否正在查看网格模式或列表模式.这很重要,因为无论您选择哪种模式,它都会作为选项保存在数据库中.下次返回上载页面时,不使用URL中的查询字符串,但选项为.因此,仅定位URL中的查询字符串是不可靠的.在第9行,我们已经移动了检查,因为我们只想在upload.php页面上发生这种有效的代码,并且只在我们处于列表模式时删除脚本.第10行取消注册页面的脚本.
但是我不知道删除媒体脚本还会在upload.php列表视图中"中断".而且我不知道是否通过使用wp_enqueue_media()将其添加到了某个地方,因为我没有时间完全查看该功能.我在调用wp_enqueue_media()之后尝试将其添加回来,但是出现了同样的错误.但希望这会让你朝着正确的方向前进.
| 归档时间: |
|
| 查看次数: |
4800 次 |
| 最近记录: |