遇到同样的问题,我在几个小时后找到了答案,几乎放弃了。这是一段代码,用来让自定义程序处理播放列表。从签出此评论/wp-includes/widgets/class-wp-widget-text.php
:
/**
* Enqueue preview scripts.
*
* These scripts normally are enqueued just-in-time when a playlist shortcode is used.
* However, in the customizer, a playlist shortcode may be used in a text widget and
* dynamically added via selective refresh, so it is important to unconditionally enqueue them.
*
* @since 4.9.3
*/
public function enqueue_preview_scripts() {
require_once dirname( __DIR__ ) . \'/media.php\';
wp_playlist_scripts( \'audio\' );
wp_playlist_scripts( \'video\' );
}
因此,这是在自定义程序中使用的,自定义程序也会在页面加载后动态加载HTML。如果我们想在前端做类似的事情,我们还需要在页面首次加载时加载这些东西。以下是我最终使用的代码:
function squarecandy_wp_enqueue_scripts() {
wp_enqueue_script( \'wp-playlist\' );
require_once get_home_path() . \'wp-includes/media.php\';
wp_playlist_scripts( \'audio\' );
wp_playlist_scripts( \'video\' );
}
add_action( \'wp_enqueue_scripts\', \'squarecandy_wp_enqueue_scripts\' );
轰!现在你可以跑步了
wp.playlist.initialize()
在你的js中,任何时候都不会出错。
还有一件事需要注意:解决这个问题可能特别麻烦,因为如果您的页面在初始页面加载时自然包含播放列表,那么您可以在页面上加载其他播放列表HTML,然后运行wp.playlist.initialize()
一切都很顺利。只有当您的初始页面上没有播放列表(所以这个神秘的“即时”排队永远不会发生),然后您稍后尝试加载播放列表时,它才会失败。