WordPress Version: 3.2
/**
* @since 4.0.0
*
* @global WP_Post $post Global post object.
* @global WP_Scripts $wp_scripts
*/
function wp_ajax_parse_media_shortcode()
{
global $post, $wp_scripts;
if (empty($_POST['shortcode'])) {
wp_send_json_error();
}
$shortcode = wp_unslash($_POST['shortcode']);
// Only process previews for media related shortcodes:
$found_shortcodes = get_shortcode_tags_in_content($shortcode);
$media_shortcodes = array('audio', 'embed', 'playlist', 'video', 'gallery');
$other_shortcodes = array_diff($found_shortcodes, $media_shortcodes);
if (!empty($other_shortcodes)) {
wp_send_json_error();
}
if (!empty($_POST['post_ID'])) {
$post = get_post((int) $_POST['post_ID']);
}
// The embed shortcode requires a post.
if (!$post || !current_user_can('edit_post', $post->ID)) {
if (in_array('embed', $found_shortcodes, true)) {
wp_send_json_error();
}
} else {
setup_postdata($post);
}
$parsed = do_shortcode($shortcode);
if (empty($parsed)) {
wp_send_json_error(array('type' => 'no-items', 'message' => __('No items found.')));
}
$head = '';
$styles = wpview_media_sandbox_styles();
foreach ($styles as $style) {
$head .= '<link type="text/css" rel="stylesheet" href="' . $style . '">';
}
if (!empty($wp_scripts)) {
$wp_scripts->done = array();
}
ob_start();
echo $parsed;
if ('playlist' === $_REQUEST['type']) {
wp_underscore_playlist_templates();
wp_print_scripts('wp-playlist');
} else {
wp_print_scripts(array('mediaelement-vimeo', 'wp-mediaelement'));
}
wp_send_json_success(array('head' => $head, 'body' => ob_get_clean()));
}