WordPress.org

Make WordPress Core

Ticket #18429: dates_and_featured_image.patch

File dates_and_featured_image.patch, 4.5 KB (added by maxcutler, 2 years ago)
  • wp-includes/class-wp-xmlrpc-server.php

     
    467467        } 
    468468 
    469469        /** 
     470         * Convert a WordPress date string to an IXR_Date object. 
     471         * 
     472         * @access protected 
     473         * 
     474         * @param $date 
     475         * @return IXR_Date 
     476         */ 
     477        protected function _convert_date( $date ) { 
     478                if ( $date === '0000-00-00 00:00:00' ) { 
     479                        return new IXR_Date( '00000000T00:00:00Z' ); 
     480                } 
     481                return new IXR_Date( mysql2date( 'Ymd\TH:i:s', $date, false ) ); 
     482        } 
     483 
     484        /** 
    470485         * Prepares post data for return in an XML-RPC object. 
    471486         * 
    472487         * @access private 
     
    477492         */ 
    478493        function _prepare_post( $post, $fields ) { 
    479494                // holds the data for this post. built up based on $fields 
    480                 $_post = array( 'post_id' => $post['ID'] ); 
     495                $_post = array( 'post_id' => strval( $post['ID'] ) ); 
    481496 
    482497                // prepare common post fields 
    483498                $post_fields = array( 
    484499                        'post_title'        => $post['post_title'], 
    485                         'post_date'         => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date'], false ) ), 
    486                         'post_date_gmt'     => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date_gmt'], false ) ), 
    487                         'post_modified'     => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_modified'], false ) ), 
    488                         'post_modified_gmt' => new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_modified_gmt'], false ) ), 
     500                        'post_date'         => $this->_convert_date( $post['post_date'] ), 
     501                        'post_date_gmt'     => $this->_convert_date( $post['post_date_gmt'] ), 
     502                        'post_modified'     => $this->_convert_date( $post['post_modified'] ), 
     503                        'post_modified_gmt' => $this->_convert_date( $post['post_modified_gmt'] ), 
    489504                        'post_status'       => $post['post_status'], 
    490505                        'post_type'         => $post['post_type'], 
    491506                        'post_name'         => $post['post_name'], 
     
    497512                        'comment_status'    => $post['comment_status'], 
    498513                        'ping_status'       => $post['ping_status'], 
    499514                        'sticky'            => ( $post['post_type'] === 'post' && is_sticky( $post['ID'] ) ), 
     515                        'featured_image'    => get_post_meta( $post['ID'], '_thumbnail_id', true ), 
    500516                ); 
    501517 
    502518                // Consider future posts as published 
     
    591607         *      - comment_status - can be 'open' | 'closed' 
    592608         *      - ping_status - can be 'open' | 'closed' 
    593609         *      - sticky 
     610         *      - featured_image - ID of a media item to use as the featured image 
    594611         *      - custom_fields - array, with each element containing 'key' and 'value' 
    595612         *      - terms - array, with taxonomy names as keys and arrays of term IDs as values 
    596613         *      - terms_names - array, with taxonomy names as keys and arrays of term names as values 
     
    724741                        stick_post( $post_ID ); 
    725742                } 
    726743 
     744                if ( isset ( $post_data['featured_image'] ) ) { 
     745                        // empty value deletes, non-empty value adds/updates 
     746                        if ( empty( $post_data['featured_image'] ) ) { 
     747                                delete_post_meta( $post_ID, '_thumbnail_id' ); 
     748                        } 
     749                        else { 
     750                                $image = get_post( intval( $post_data['featured_image'] ), ARRAY_A ); 
     751                                if ( empty($image['ID'] ) ) 
     752                                        return new IXR_Error( 404, __( 'Invalid attachment ID.' ) ); 
     753                                update_post_meta( $post_ID, '_thumbnail_id', $image['ID'] ); 
     754                        } 
     755                        unset( $content_struct['featured_image'] ); 
     756                } 
     757 
    727758                if ( isset ( $post_data['custom_fields'] ) && post_type_supports( $post_data['post_type'], 'custom-fields' ) ) { 
    728759                        $this->set_custom_fields( $post_ID, $post_data['custom_fields'] ); 
    729760                } 
     
    880911                        return new IXR_Error( 404, __( 'Invalid post ID.' ) ); 
    881912 
    882913                // convert the date field back to IXR form 
    883                 $post['post_date'] = new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date'], false ) ); 
     914                $post['post_date'] = $this->_convert_date( $post['post_date'] ); 
    884915 
    885916                // ignore the existing GMT date if it is empty or a non-GMT date was supplied in $content_struct, 
    886917                // since _insert_post will ignore the non-GMT date if the GMT date is set 
    887918                if ( $post['post_date_gmt'] == '0000-00-00 00:00:00' || isset( $content_struct['post_date'] ) ) 
    888919                        unset( $post['post_date_gmt'] ); 
    889920                else 
    890                         $post['post_date_gmt'] = new IXR_Date( mysql2date( 'Ymd\TH:i:s', $post['post_date_gmt'], false ) ); 
     921                        $post['post_date_gmt'] = $this->_convert_date( $post['post_date_gmt'] ); 
    891922 
    892923                $this->escape( $post ); 
    893924                $merged_content_struct = array_merge( $post, $content_struct ); 
     
    10801111                                $query['order'] = $filter['order']; 
    10811112                } 
    10821113 
    1083                 do_action( 'xmlrpc_call', 'wp.getPosts' ); 
    1084  
    10851114                $posts_list = wp_get_recent_posts( $query ); 
    10861115 
    10871116                if ( ! $posts_list )