我使用的是Wordpress 4.0,因为我写的插件不仅可以从{{ {1}} Wordpress核心已经允许的页面。
我以这种方式打电话给wp_enqueue_media
:
wp-admin
我遇到的问题是,当从 wp-admin
页面调用时,此enqueue会导致以下javascript异常:
wp_enqueue_media
所有其他网页都运行得很好,甚至是function my_admin_load_styles_and_scripts() {
wp_enqueue_media();
}
add_action( 'admin_enqueue_scripts', 'my_admin_load_styles_and_scripts' );
有什么想法吗?谢谢你的帮助
答案 0 :(得分:7)
我遇到了同样的问题......我所做的就是确保我没有在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' );
}
“is_admin()”部分也确保这只在管理区域运行,而不是在前端运行。在我看来,事情变得更加清晰。
更新:1
这是我通过一些研究发现的。当您查看wp-admin / upload.php时,网格布局有一个新的部分。在该部分中,您将获得以下调用(第24-26行):
wp_enqueue_media();
wp_enqueue_script( 'media-grid' );
wp_enqueue_script( 'media' );
你可能在这里没有收到任何错误,因为wp_enqueue_media()
有一个内置的检查,以确保每页只调用一次(wp-includes / media.php中的第2785行)。
在upload.php页面的下方,在网格代码之后,您只看到以下调用(第192行):
wp_enqueue_script( 'media' );
没有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' );
}
它会阻止错误......
说明:第3-8行直接来自wp-admin / upload.php(第15-21行)。当您在upload.php上显示时,他们只会告诉您是否正在查看网格模式或列表模式。这很重要,因为无论您选择哪种模式,它都会作为选项保存在数据库中。下次返回上载页面时,不使用URL中的查询字符串,但选项为。因此,仅定位URL中的查询字符串是不可靠的。在第9行,我们已经移动了检查,因为我们只想在upload.php页面上发生这种减轻代码,并且只在我们处于列表模式时删除脚本。第10行取消注册页面的脚本。
但是我不知道删除媒体脚本还会在upload.php列表视图中“中断”。而且我不知道是否通过使用wp_enqueue_media()将其添加到了某个地方,因为我没有时间完全查看该功能。我在调用wp_enqueue_media()之后尝试将其添加回来,但是出现了同样的错误。但希望这会让你朝着正确的方向前进。