WordPress.org

WordPress build repository browser

Changeset 40766


Ignore:
Timestamp:
06/18/17 10:40:46 (4 months ago)
Author:
boonebgorges
Message:

Add term meta support to XML-RPC addTerm and editTerm endpoints.

This changeset also includes the new function has_term_meta(), a
counterpart to has_meta() (for posts).

Props enrico.sorcinelli.
Fixes #35991.
Built from https://develop.svn.wordpress.org/trunk@40916

Location:
trunk/wp-includes
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/class-wp-xmlrpc-server.php

    r40555 r40766  
    400400            } elseif ( current_user_can( 'add_post_meta', $post_id, wp_unslash( $meta['key'] ) ) ) { 
    401401                add_post_meta( $post_id, $meta['key'], $meta['value'] ); 
     402            } 
     403        } 
     404    } 
     405 
     406    /** 
     407     * Retrieve custom fields for a term. 
     408     * 
     409     * @since 4.9.0 
     410     * 
     411     * @param int $post_id Post ID. 
     412     * @return array Array of custom fields, if they exist. 
     413     */ 
     414    public function get_term_custom_fields( $term_id ) { 
     415        $term_id = (int) $term_id; 
     416 
     417        $custom_fields = array(); 
     418 
     419        foreach ( (array) has_term_meta( $term_id ) as $meta ) { 
     420 
     421            if ( ! current_user_can( 'edit_term_meta', $term_id ) ) { 
     422                continue; 
     423            } 
     424 
     425            $custom_fields[] = array( 
     426                'id'    => $meta['meta_id'], 
     427                'key'   => $meta['meta_key'], 
     428                'value' => $meta['meta_value'], 
     429            ); 
     430        } 
     431 
     432        return $custom_fields; 
     433    } 
     434 
     435    /** 
     436     * Set custom fields for a term. 
     437     * 
     438     * @since 4.9.0 
     439     * 
     440     * @param int $post_id Post ID. 
     441     * @param array $fields Custom fields. 
     442     */ 
     443    public function set_term_custom_fields( $term_id, $fields ) { 
     444        $term_id = (int) $term_id; 
     445 
     446        foreach ( (array) $fields as $meta ) { 
     447            if ( isset( $meta['id'] ) ) { 
     448                $meta['id'] = (int) $meta['id']; 
     449                $pmeta = get_metadata_by_mid( 'term', $meta['id'] ); 
     450                if ( isset( $meta['key'] ) ) { 
     451                    $meta['key'] = wp_unslash( $meta['key'] ); 
     452                    if ( $meta['key'] !== $pmeta->meta_key ) { 
     453                        continue; 
     454                    } 
     455                    $meta['value'] = wp_unslash( $meta['value'] ); 
     456                    if ( current_user_can( 'edit_term_meta', $term_id ) ) { 
     457                        update_metadata_by_mid( 'term', $meta['id'], $meta['value'] ); 
     458                    } 
     459                } elseif ( current_user_can( 'delete_term_meta', $term_id ) ) { 
     460                    delete_metadata_by_mid( 'term', $meta['id'] ); 
     461                } 
     462            } elseif ( current_user_can( 'add_term_meta', $term_id ) ) { 
     463                add_term_meta( $term_id, $meta['key'], $meta['value'] ); 
    402464            } 
    403465        } 
     
    743805        $_term['count'] = intval( $_term['count'] ); 
    744806 
     807        // Get term meta. 
     808        $_term['custom_fields'] = $this->get_term_custom_fields( $_term['term_id'] ); 
     809 
    745810        /** 
    746811         * Filters XML-RPC-prepared data for the given term. 
     
    19442009            return new IXR_Error( 500, __( 'Sorry, your term could not be created.' ) ); 
    19452010 
     2011        // Add term meta. 
     2012        if ( isset( $content_struct['custom_fields'] ) ) { 
     2013            $this->set_term_custom_fields( $term['term_id'], $content_struct['custom_fields'] ); 
     2014        } 
     2015 
    19462016        return strval( $term['term_id'] ); 
    19472017    } 
     
    20422112        if ( ! $term ) 
    20432113            return new IXR_Error( 500, __( 'Sorry, editing the term failed.' ) ); 
     2114 
     2115        // Update term meta. 
     2116        if ( isset( $content_struct['custom_fields'] ) ) { 
     2117            $this->set_term_custom_fields( $term_id, $content_struct['custom_fields'] ); 
     2118        } 
    20442119 
    20452120        return true; 
  • trunk/wp-includes/taxonomy.php

    r40389 r40766  
    12421242 
    12431243/** 
     1244 * Get all meta data, including meta IDs, for the given term ID. 
     1245 * 
     1246 * @since 4.9.0 
     1247 * 
     1248 * @global wpdb $wpdb WordPress database abstraction object. 
     1249 * 
     1250 * @param int $term_id 
     1251 * @return array|false 
     1252 */ 
     1253function has_term_meta( $term_id ) { 
     1254    // Bail if term meta table is not installed. 
     1255    if ( get_option( 'db_version' ) < 34370 ) { 
     1256        return false; 
     1257    } 
     1258 
     1259    global $wpdb; 
     1260 
     1261    return $wpdb->get_results( $wpdb->prepare( "SELECT meta_key, meta_value, meta_id, term_id FROM $wpdb->termmeta WHERE term_id = %d ORDER BY meta_key,meta_id", $term_id ), ARRAY_A ); 
     1262} 
     1263 
     1264/** 
    12441265 * Check if Term exists. 
    12451266 * 
  • trunk/wp-includes/version.php

    r40765 r40766  
    55 * @global string $wp_version 
    66 */ 
    7 $wp_version = '4.9-alpha-40915'; 
     7$wp_version = '4.9-alpha-40916'; 
    88 
    99/** 
Note: See TracChangeset for help on using the changeset viewer.