From 60c285aa22ff785d21791108599a95988b69fb15 Mon Sep 17 00:00:00 2001 From: Scott Taylor Date: Fri, 16 Jan 2015 05:19:22 +0000 Subject: [PATCH] In `wp_ajax_parse_media_shortcode()`, don't require a global `$post` for all passed shortcodes. `embed` is the only shortcode that requires a post ID. This will allow MCE views to work for `playlist`, `audio`, and `video` outside of the Edit Post screen. See #30835. Built from https://develop.svn.wordpress.org/trunk@31201 git-svn-id: http://core.svn.wordpress.org/trunk@31182 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/ajax-actions.php | 24 +++++++++++++++++------- wp-includes/version.php | 2 +- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/wp-admin/includes/ajax-actions.php b/wp-admin/includes/ajax-actions.php index f17f1a8cad..1e846fbdfd 100644 --- a/wp-admin/includes/ajax-actions.php +++ b/wp-admin/includes/ajax-actions.php @@ -2725,18 +2725,28 @@ function wp_ajax_parse_embed() { function wp_ajax_parse_media_shortcode() { global $post, $wp_scripts; - if ( ! $post = get_post( (int) $_POST['post_ID'] ) ) { + if ( empty( $_POST['shortcode'] ) ) { wp_send_json_error(); } - if ( empty( $_POST['shortcode'] ) || ! current_user_can( 'edit_post', $post->ID ) ) { - wp_send_json_error(); + $shortcode = wp_unslash( $_POST['shortcode'] ); + + if ( ! empty( $_POST['post_ID'] ) ) { + $post = get_post( (int) $_POST['post_ID'] ); } - setup_postdata( $post ); - $shortcode = do_shortcode( wp_unslash( $_POST['shortcode'] ) ); + // the embed shortcode requires a post + if ( ! $post || ! current_user_can( 'edit_post', $post->ID ) ) { + if ( 'embed' === $shortcode ) { + wp_send_json_error(); + } + } else { + setup_postdata( $post ); + } - if ( empty( $shortcode ) ) { + $parsed = do_shortcode( $shortcode ); + + if ( empty( $parsed ) ) { wp_send_json_error( array( 'type' => 'no-items', 'message' => __( 'No items found.' ), @@ -2756,7 +2766,7 @@ function wp_ajax_parse_media_shortcode() { ob_start(); - echo $shortcode; + echo $parsed; if ( 'playlist' === $_REQUEST['type'] ) { wp_underscore_playlist_templates(); diff --git a/wp-includes/version.php b/wp-includes/version.php index bc76778763..18e5ebdf98 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.2-alpha-31200'; +$wp_version = '4.2-alpha-31201'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.