Skip to content

Function

Get the extensions feed.

tml_admin_get_extensions_feed( array $args = array() )

Parameters

$args array Default array()
Optional. An array of arguments for fetching extensions from the server.

Return

array|WP_Error The extensions array or WP_Error on failure.

Source

function tml_admin_get_extensions_feed( $args = array() ) {
    $args = wp_parse_args(
        $args,
        array(
            'number' => 12,
        )
    );

    $transient_key = 'tml_extensions_feed-' . md5( http_build_query( $args ) );

    $feed = get_site_transient( $transient_key );
    if ( false === $feed ) {
        $url = add_query_arg( $args, THEME_MY_LOGIN_EXTENSIONS_API_URL );

        $response = wp_remote_get(
            $url,
            array(
                'timeout' => 30,
            )
        );
        if ( is_wp_error( $response ) ) {
            return $response;
        }

        $code    = wp_remote_retrieve_response_code( $response );
        $message = wp_remote_retrieve_response_message( $response );

        if ( 200 !== (int) $code ) {
            return new WP_Error( 'http_error_' . $code, $message );
        }

        $response = json_decode( wp_remote_retrieve_body( $response ) );

        if ( ! is_object( $response ) || ! isset( $response->products ) || ! is_array( $response->products ) ) {
            // phpcs:ignore WordPress.WP.I18n.MissingArgDomain -- reusing WP core's translated string verbatim (see wp-includes/widgets.php), not a TML-specific string.
            return new WP_Error( 'invalid_response', __( 'An error has occurred, which probably means the feed is down. Try again later.' ) );
        }

        $feed = $response->products;

        set_site_transient( $transient_key, $feed, DAY_IN_SECONDS / 2 );
        set_site_transient( 'tml_promotion', isset( $response->promotion ) && is_object( $response->promotion ) ? (array) $response->promotion : array(), DAY_IN_SECONDS / 2 );
    }
    return $feed;
}

Uses

Used by

Changelog

VersionDescription
7.0 Introduced.