Extensibility and shortcodes

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Extensibility and shortcodes

Luke Bryan
Greetings all,

I was looking at the wp media shortcode and wp-views, and noticed a few
things that seem not-too-portable in the view ajax and rendering:

In ajax-actions.php of Wordpress 4.0 we see this render-and-return routine
requiring a post_id of post the user can edit:


function wp_ajax_parse_media_shortcode() {
    global $post, $wp_scripts;

    if ( ! $post = get_post( (int) $_REQUEST['post_ID'] ) ) {
        wp_send_json_error();
    }

    if ( empty( $_POST['shortcode'] ) || ! current_user_can( 'edit_post',
$post->ID ) ) {
        wp_send_json_error();
    }

    setup_postdata( $post );
    $shortcode = do_shortcode( wp_unslash( $_REQUEST['shortcode'] ) );

    if ( empty( $shortcode ) ) {
        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 $shortcode;

    if ( 'playlist' === $_REQUEST['type'] ) {
        wp_underscore_playlist_templates();

        wp_print_scripts( 'wp-playlist' );
    } else {
        wp_print_scripts( 'wp-mediaelement' );
    }

    wp_send_json_success( array(
        'head' => $head,
        'body' => ob_get_clean()
    ) );
}


Why must this ajax call tie to the post-id of the post page containing the
shortcode to be rendered? Is it meant to soon have "symbolically-linked"
galleries and shortcodes that are linked to multiple post-ids, not just
embedded as shortcode in post_content? Or is there another reason for
requiring a post-id of a post the user can edit, not just "0", when
rendering playlist views?

I also noticed the Javascript mce object functions calling that ajax
action  were hardcoded to look for an element with a certain id, #post_ID.
(in wp-includes/js/media-views.js, wp-includes/js/mce-view.js). While it
works well for the wp-admin pages as given by Wordpress, it seems it could
use a more generic item, like a property in whatever the current tinymce
editor is? What do you think?

Glad to see there is good progress in wp 4.0

Best regards,
Luke
_______________________________________________
wp-hackers mailing list
[hidden email]
http://lists.automattic.com/mailman/listinfo/wp-hackers
Reply | Threaded
Open this post in threaded view
|

Re: Extensibility and shortcodes

Andrew Ozz
On 27/08/2014 12:10 AM, Luke Bryan wrote:
> I was looking at the wp media shortcode and wp-views, and noticed a few
> things that seem not-too-portable in the view ajax and rendering:
>
> In ajax-actions.php of Wordpress 4.0 we see this render-and-return routine
> requiring a post_id of post the user can edit:
> ...
> Why must this ajax call tie to the post-id of the post page containing the
> shortcode to be rendered?

This is meant for rendering the previews for these shortcodes in wpView,
not for returning the HTML for arbitrary shortcodes.

As this happens only when a user is writing/editing a post, the AJAX
action requires the post_id and checks if the current user can actually
edit that post.

_______________________________________________
wp-hackers mailing list
[hidden email]
http://lists.automattic.com/mailman/listinfo/wp-hackers