Make WordPress Core


Ignore:
Timestamp:
11/08/2016 04:28:47 AM (10 years ago)
Author:
rmccue
Message:

REST API: Change attachment caption & description to objects.

Just like excerpt and content for regular posts, these have transformations applied that can make the content significantly different from the raw value.

Props jnylen0.
Fixes #38679.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php

    r39105 r39154  
    248248                $prepared_attachment = parent::prepare_item_for_database( $request );
    249249
     250                // Attachment caption (post_excerpt internally)
    250251                if ( isset( $request['caption'] ) ) {
    251                         $prepared_attachment->post_excerpt = $request['caption'];
    252                 }
    253 
     252                        if ( is_string( $request['caption'] ) ) {
     253                                $prepared_attachment->post_excerpt = wp_filter_post_kses( $request['caption'] );
     254                        } elseif ( isset( $request['caption']['raw'] ) ) {
     255                                $prepared_attachment->post_excerpt = wp_filter_post_kses( $request['caption']['raw'] );
     256                        }
     257                }
     258
     259                // Attachment description (post_content internally)
    254260                if ( isset( $request['description'] ) ) {
    255                         $prepared_attachment->post_content = $request['description'];
     261                        if ( is_string( $request['description'] ) ) {
     262                                $prepared_attachment->post_content = wp_filter_post_kses( $request['description'] );
     263                        } elseif ( isset( $request['description']['raw'] ) ) {
     264                                $prepared_attachment->post_content = wp_filter_post_kses( $request['description']['raw'] );
     265                        }
    256266                }
    257267
     
    277287                $data = $response->get_data();
    278288
     289                $data['description'] = array(
     290                        'raw'       => $post->post_content,
     291                        /** This filter is documented in wp-includes/post-template.php */
     292                        'rendered'  => apply_filters( 'the_content', $post->post_content ),
     293                );
     294
     295                /** This filter is documented in wp-includes/post-template.php */
     296                $caption = apply_filters( 'the_excerpt', apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ) );
     297                $data['caption'] = array(
     298                        'raw'       => $post->post_excerpt,
     299                        'rendered'  => $caption,
     300                );
     301
    279302                $data['alt_text']      = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
    280                 $data['caption']       = $post->post_excerpt;
    281                 $data['description']   = $post->post_content;
    282303                $data['media_type']    = wp_attachment_is_image( $post->ID ) ? 'image' : 'file';
    283304                $data['mime_type']     = $post->post_mime_type;
     
    367388
    368389                $schema['properties']['caption'] = array(
    369                         'description'     => __( 'The caption for the resource.' ),
    370                         'type'            => 'string',
    371                         'context'         => array( 'view', 'edit' ),
    372                         'arg_options'     => array(
    373                                 'sanitize_callback' => 'wp_filter_post_kses',
     390                        'description' => __( 'The caption for the resource.' ),
     391                        'type'        => 'object',
     392                        'context'     => array( 'view', 'edit', 'embed' ),
     393                        'arg_options' => array(
     394                                'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database()
    374395                        ),
     396                        'properties'  => array(
     397                                'raw' => array(
     398                                        'description' => __( 'Caption for the resource, as it exists in the database.' ),
     399                                        'type'        => 'string',
     400                                        'context'     => array( 'edit' ),
     401                                ),
     402                                'rendered' => array(
     403                                        'description' => __( 'HTML caption for the resource, transformed for display.' ),
     404                                        'type'        => 'string',
     405                                        'context'     => array( 'view', 'edit', 'embed' ),
     406                                        'readonly'    => true,
     407                                ),
     408                        ),
    375409                );
    376410
    377411                $schema['properties']['description'] = array(
    378                         'description'     => __( 'The description for the resource.' ),
    379                         'type'            => 'string',
    380                         'context'         => array( 'view', 'edit' ),
    381                         'arg_options'     => array(
    382                                 'sanitize_callback' => 'wp_filter_post_kses',
     412                        'description' => __( 'The description for the resource.' ),
     413                        'type'        => 'object',
     414                        'context'     => array( 'view', 'edit' ),
     415                        'arg_options' => array(
     416                                'sanitize_callback' => null, // Note: sanitization implemented in self::prepare_item_for_database()
     417                        ),
     418                        'properties'  => array(
     419                                'raw' => array(
     420                                        'description' => __( 'Description for the object, as it exists in the database.' ),
     421                                        'type'        => 'string',
     422                                        'context'     => array( 'edit' ),
     423                                ),
     424                                'rendered' => array(
     425                                        'description' => __( 'HTML description for the object, transformed for display.' ),
     426                                        'type'        => 'string',
     427                                        'context'     => array( 'view', 'edit' ),
     428                                        'readonly'    => true,
     429                                ),
    383430                        ),
    384431                );
Note: See TracChangeset for help on using the changeset viewer.