Make WordPress Core

Ticket #44238: 44238.4.diff

File 44238.4.diff, 10.8 KB (added by spacedmonkey, 6 years ago)
  • src/wp-admin/includes/ajax-actions.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    776776                wp_die( 1 );
    777777        }
    778778
    779         if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) {
     779
     780        $object_subtype = get_object_subtype( 'post', $id );
     781        if ( is_protected_meta( $meta->meta_key, 'post', $object_subtype ) || ! current_user_can( 'delete_post_meta', $meta->post_id, $meta->meta_key ) ) {
    780782                wp_die( -1 );
    781783        }
    782784        if ( delete_meta( $meta->meta_id ) ) {
     
    15121514                if ( ! $meta = get_metadata_by_mid( 'post', $mid ) ) {
    15131515                        wp_die( 0 ); // if meta doesn't exist
    15141516                }
    1515                 if ( is_protected_meta( $meta->meta_key, 'post' ) || is_protected_meta( $key, 'post' ) ||
     1517
     1518                $object_subtype = get_object_subtype( 'post', $meta->post_id );
     1519                if ( is_protected_meta( $meta->meta_key, 'post', $object_subtype ) || is_protected_meta( $key, 'post', $object_subtype ) ||
    15161520                        ! current_user_can( 'edit_post_meta', $meta->post_id, $meta->meta_key ) ||
    15171521                        ! current_user_can( 'edit_post_meta', $meta->post_id, $key ) ) {
    15181522                        wp_die( -1 );
  • src/wp-admin/includes/meta-boxes.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    725725<div id="ajax-response"></div>
    726726        <?php
    727727        $metadata = has_meta( $post->ID );
     728        $object_subtype = get_object_subtype( 'post', $post->ID );
    728729        foreach ( $metadata as $key => $value ) {
    729                 if ( is_protected_meta( $metadata[ $key ]['meta_key'], 'post' ) || ! current_user_can( 'edit_post_meta', $post->ID, $metadata[ $key ]['meta_key'] ) ) {
     730                if ( is_protected_meta( $metadata[ $key ]['meta_key'], 'post', $object_subtype ) || ! current_user_can( 'edit_post_meta', $post->ID, $metadata[ $key ]['meta_key'] ) ) {
    730731                        unset( $metadata[ $key ] );
    731732                }
    732733        }
  • src/wp-admin/includes/post.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    345345                        if ( $meta->post_id != $post_ID ) {
    346346                                continue;
    347347                        }
    348                         if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $meta->meta_key ) ) {
     348                        $object_subtype = get_object_subtype( 'post', $post_ID );
     349                        if ( is_protected_meta( $meta->meta_key, 'post', $object_subtype ) || ! current_user_can( 'edit_post_meta', $post_ID, $meta->meta_key ) ) {
    349350                                continue;
    350351                        }
    351                         if ( is_protected_meta( $value['key'], 'post' ) || ! current_user_can( 'edit_post_meta', $post_ID, $value['key'] ) ) {
     352                        if ( is_protected_meta( $value['key'], 'post', $object_subtype ) || ! current_user_can( 'edit_post_meta', $post_ID, $value['key'] ) ) {
    352353                                continue;
    353354                        }
    354355                        update_meta( $key, $value['key'], $value['value'] );
     
    363364                        if ( $meta->post_id != $post_ID ) {
    364365                                continue;
    365366                        }
    366                         if ( is_protected_meta( $meta->meta_key, 'post' ) || ! current_user_can( 'delete_post_meta', $post_ID, $meta->meta_key ) ) {
     367                        $object_subtype = get_object_subtype( 'post', $post_ID );
     368                        if ( is_protected_meta( $meta->meta_key, 'post', $object_subtype ) || ! current_user_can( 'delete_post_meta', $post_ID, $meta->meta_key ) ) {
    367369                                continue;
    368370                        }
    369371                        delete_meta( $key );
     
    902904                if ( $metakeyinput ) {
    903905                        $metakey = $metakeyinput; // default
    904906                }
    905 
    906                 if ( is_protected_meta( $metakey, 'post' ) || ! current_user_can( 'add_post_meta', $post_ID, $metakey ) ) {
     907                $object_subtype = get_object_subtype( 'post', $post_ID );
     908                if ( is_protected_meta( $metakey, 'post', $object_subtype ) || ! current_user_can( 'add_post_meta', $post_ID, $metakey ) ) {
    907909                        return false;
    908910                }
    909911
  • src/wp-admin/includes/template.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    590590function _list_meta_row( $entry, &$count ) {
    591591        static $update_nonce = '';
    592592
    593         if ( is_protected_meta( $entry['meta_key'], 'post' ) ) {
     593        $object_subtype = get_object_subtype( 'post', $entry['post_id'] );
     594        if ( is_protected_meta( $entry['meta_key'], 'post', $object_subtype ) ) {
    594595                return '';
    595596        }
    596597
     
    701702<select id="metakeyselect" name="metakeyselect">
    702703<option value="#NONE#"><?php _e( '&mdash; Select &mdash;' ); ?></option>
    703704                <?php
    704 
     705                $object_subtype = get_object_subtype( 'post',  $post->ID );
    705706                foreach ( $keys as $key ) {
    706                         if ( is_protected_meta( $key, 'post' ) || ! current_user_can( 'add_post_meta', $post->ID, $key ) ) {
     707                        if ( is_protected_meta( $key, 'post', $object_subtype ) || ! current_user_can( 'add_post_meta', $post->ID, $key ) ) {
    707708                                continue;
    708709                        }
    709710                        echo "\n<option value='" . esc_attr( $key ) . "'>" . esc_html( $key ) . '</option>';
  • src/wp-includes/capabilities.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    293293                        $meta_key = isset( $args[1] ) ? $args[1] : false;
    294294
    295295                        if ( $meta_key ) {
    296                                 $allowed = ! is_protected_meta( $meta_key, $object_type );
     296                                $allowed = ! is_protected_meta( $meta_key, $object_type, $object_subtype );
    297297
    298298                                if ( ! empty( $object_subtype ) && has_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
    299299
  • src/wp-includes/meta.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    10231023 * Determines whether a meta key is considered protected.
    10241024 *
    10251025 * @since 3.1.3
     1026 * @since x.x.x  Add $object_sub_type
    10261027 *
    10271028 * @param string      $meta_key  Meta key.
    10281029 * @param string|null $meta_type Optional. Type of object metadata is for (e.g., comment, post, term, or user).
     1030 * @param string      $object_subtype Optional. Object sub type is for (e.g., post or page).
    10291031 * @return bool Whether the meta key is considered protected.
    10301032 */
    1031 function is_protected_meta( $meta_key, $meta_type = null ) {
     1033function is_protected_meta( $meta_key, $meta_type = null, $object_subtype = '' ) {
    10321034        $protected = ( '_' == $meta_key[0] );
    10331035
     1036
     1037        if ( ! empty( $meta_type ) ) {
     1038                /**
     1039                 * Filters whether a meta key is considered protected.
     1040                 *
     1041                 * @since x.x.x
     1042                 *
     1043                 * @param bool $protected Whether the key is considered protected.
     1044                 * @param string $meta_key Meta key.
     1045                 * @param string|null $meta_type Type of object metadata is for (e.g., comment, post, or user).
     1046                 * @param string $object_subtype Optional. Object sub type is for (e.g., post or page).
     1047                 */
     1048                $protected = apply_filters( "protected_{$meta_type}_meta_{$meta_key}", $protected, $meta_key, $meta_type, $object_subtype );
     1049                if ( ! empty( $object_subtype ) ) {
     1050                        /**
     1051                         * Filters whether a meta key is considered protected.
     1052                         *
     1053                         * @since x.x.x
     1054                         *
     1055                         * @param bool $protected Whether the key is considered protected.
     1056                         * @param string $meta_key Meta key.
     1057                         * @param string|null $meta_type Type of object metadata is for (e.g., comment, post, or user).
     1058                         * @param string $object_subtype Optional. Object sub type is for (e.g., post or page).
     1059                         */
     1060                        $protected = apply_filters( "protected_{$meta_type}_meta_{$meta_key}_for_{$object_subtype}", $protected, $meta_key, $meta_type, $object_subtype );
     1061                }
     1062        }
     1063
    10341064        /**
    10351065         * Filters whether a meta key is considered protected.
    10361066         *
    10371067         * @since 3.2.0
     1068         * @since x.x.x  Add $object_sub_type
    10381069         *
    10391070         * @param bool        $protected Whether the key is considered protected.
    10401071         * @param string      $meta_key  Meta key.
     1072         * @param string      $object_subtype Optional. Object sub type is for (e.g., post or page).
    10411073         * @param string|null $meta_type Type of object metadata is for (e.g., comment, post, term, or user).
    10421074         */
    1043         return apply_filters( 'is_protected_meta', $protected, $meta_key, $meta_type );
     1075        return apply_filters( 'is_protected_meta', $protected, $meta_key, $meta_type, $object_subtype );
    10441076}
    10451077
    10461078/**
     
    11361168                $wp_meta_keys = array();
    11371169        }
    11381170
     1171        $protected = ( '_' == $meta_key[0] );
     1172
    11391173        $defaults = array(
    11401174                'object_subtype'    => '',
    11411175                'type'              => 'string',
     
    11441178                'sanitize_callback' => null,
    11451179                'auth_callback'     => null,
    11461180                'show_in_rest'      => false,
     1181                'protected'         => $protected,
    11471182        );
    11481183
    11491184        // There used to be individual args for sanitize and auth callbacks
     
    11801215
    11811216        $object_subtype = ! empty( $args['object_subtype'] ) ? $args['object_subtype'] : '';
    11821217
     1218
     1219        if ( is_callable( $args['protected'] ) ) {
     1220                $protected_callback = $args['protected'];
     1221        } else {
     1222                $protected = (bool) $args['protected'];
     1223                if ( empty( $protected ) ) {
     1224                        $protected_callback = '__return_false';
     1225                } else {
     1226                        $protected_callback = '__return_true';
     1227                }
     1228        }
     1229       
     1230        if ( ! empty( $object_subtype ) ) {
     1231                add_filter( "protected_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $protected_callback, 9, 1 );
     1232        } else {
     1233                add_filter( "protected_{$object_type}_meta_{$meta_key}", $protected_callback, 9, 1 );
     1234        }
     1235
     1236
    11831237        // If `auth_callback` is not provided, fall back to `is_protected_meta()`.
    11841238        if ( empty( $args['auth_callback'] ) ) {
    1185                 if ( is_protected_meta( $meta_key, $object_type ) ) {
     1239                if ( is_protected_meta( $meta_key, $object_type, $object_subtype ) ) {
    11861240                        $args['auth_callback'] = '__return_false';
    11871241                } else {
    11881242                        $args['auth_callback'] = '__return_true';
  • src/wp-includes/post-template.php

    IDEA additional info:
    Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
    <+>UTF-8
     
    10691069function the_meta() {
    10701070        if ( $keys = get_post_custom_keys() ) {
    10711071                $li_html = '';
     1072                $post_id = get_the_ID();
     1073                $object_subtype = get_object_subtype( 'post', $post_id );
    10721074                foreach ( (array) $keys as $key ) {
    10731075                        $keyt = trim( $key );
    1074                         if ( is_protected_meta( $keyt, 'post' ) ) {
     1076                        if ( is_protected_meta( $keyt, 'post', $object_subtype ) ) {
    10751077                                continue;
    10761078                        }
    10771079