Make WordPress Core


Ignore:
Timestamp:
07/19/2018 06:48:52 PM (8 years ago)
Author:
kadamwhite
Message:

REST API: Support meta registration for specific object subtypes.

Introduce an object_subtype argument to the args array for register_meta() which can be used to limit meta registration to a single subtype (e.g. a custom post type or taxonomy, vs all posts or taxonomies).

Introduce register_post_meta() and register_term_meta() wrapper methods for register_meta to provide a convenient interface for the common case of registering meta for a specific taxonomy or post type. These methods work the way plugin developers have often expected register_meta to function, and should be used in place of direct register_meta where possible.

Props flixos90, tharsheblows, spacedmonkey.

Merges [43378] to the 4.9 branch.
Fixes #38323.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/4.9/src/wp-includes/rest-api/fields/class-wp-rest-meta-fields.php

    r41162 r43510  
    2424         */
    2525        abstract protected function get_meta_type();
     26
     27        /**
     28         * Retrieves the object meta subtype.
     29         *
     30         * @since 4.9.8
     31         *
     32         * @return string Subtype for the meta type, or empty string if no specific subtype.
     33         */
     34        protected function get_meta_subtype() {
     35                return '';
     36        }
    2637
    2738        /**
    … …  
    318329                $registered = array();
    319330
    320                 foreach ( get_registered_meta_keys( $this->get_meta_type() ) as $name => $args ) {
     331                $meta_type    = $this->get_meta_type();
     332                $meta_subtype = $this->get_meta_subtype();
     333
     334                $meta_keys = get_registered_meta_keys( $meta_type );
     335                if ( ! empty( $meta_subtype ) ) {
     336                        $meta_keys = array_merge( $meta_keys, get_registered_meta_keys( $meta_type, $meta_subtype ) );
     337                }
     338
     339                foreach ( $meta_keys as $name => $args ) {
    321340                        if ( empty( $args['show_in_rest'] ) ) {
    322341                                continue;
Note: See TracChangeset for help on using the changeset viewer.