WordPress.org

Make WordPress Core


Ignore:
Timestamp:
02/01/2018 05:18:54 AM (3 years ago)
Author:
dd32
Message:

Themes: Use api.wordpress.org/themes/info/1.2/ to query theme information.

See #43192.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/theme.php

    r42343 r42632  
    422422 */
    423423function themes_api( $action, $args = array() ) {
     424    // include an unmodified $wp_version
     425    include( ABSPATH . WPINC . '/version.php' );
    424426
    425427    if ( is_array( $args ) ) {
     
    427429    }
    428430
    429     if ( ! isset( $args->per_page ) ) {
    430         $args->per_page = 24;
     431    if ( 'query_themes' == $action ) {
     432        if ( ! isset( $args->per_page ) ) {
     433            $args->per_page = 24;
     434        }
    431435    }
    432436
    433437    if ( ! isset( $args->locale ) ) {
    434438        $args->locale = get_user_locale();
     439    }
     440
     441    if ( ! isset( $args->wp_version ) ) {
     442        $args->wp_version = substr( $wp_version, 0, 3 ); // X.y
    435443    }
    436444
     
    466474
    467475    if ( ! $res ) {
    468         // include an unmodified $wp_version
    469         include( ABSPATH . WPINC . '/version.php' );
    470 
    471         $url = $http_url = 'http://api.wordpress.org/themes/info/1.0/';
     476        $url = 'http://api.wordpress.org/themes/info/1.2/';
     477        $url = add_query_arg(
     478            array(
     479                'action'  => $action,
     480                'request' => $args,
     481            ),
     482            $url
     483        );
     484
     485        $http_url = $url;
    472486        if ( $ssl = wp_http_supports( array( 'ssl' ) ) ) {
    473487            $url = set_url_scheme( $url, 'https' );
     
    476490        $http_args = array(
    477491            'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ),
    478             'body'       => array(
    479                 'action'  => $action,
    480                 'request' => serialize( $args ),
    481             ),
    482492        );
    483         $request   = wp_remote_post( $url, $http_args );
     493        $request   = wp_remote_get( $url, $http_args );
    484494
    485495        if ( $ssl && is_wp_error( $request ) ) {
     
    494504                );
    495505            }
    496             $request = wp_remote_post( $http_url, $http_args );
     506            $request = wp_remote_get( $http_url, $http_args );
    497507        }
    498508
     
    508518            );
    509519        } else {
    510             $res = maybe_unserialize( wp_remote_retrieve_body( $request ) );
    511             if ( ! is_object( $res ) && ! is_array( $res ) ) {
     520            $res = json_decode( wp_remote_retrieve_body( $request ), true );
     521            if ( is_array( $res ) ) {
     522                // Object casting is required in order to match the info/1.0 format.
     523                $res = (object) $res;
     524            } elseif ( null === $res ) {
    512525                $res = new WP_Error(
    513526                    'themes_api_failed',
     
    520533                );
    521534            }
     535
     536            if ( isset( $res->error ) ) {
     537                $res = new WP_Error( 'themes_api_failed', $res->error );
     538            }
     539        }
     540
     541        // Back-compat for info/1.2 API, upgrade the theme objects in query_themes to objects.
     542        if ( 'query_themes' == $action ) {
     543            foreach ( $res->themes as $i => $theme ) {
     544                $res->themes[ $i ] = (object) $theme;
     545            }
     546        }
     547        // Back-compat for info/1.2 API, downgrade the feature_list result back to an array.
     548        if ( 'feature_list' == $action ) {
     549            $res = (array) $res;
    522550        }
    523551    }
Note: See TracChangeset for help on using the changeset viewer.