API Call не отображает элементы - PullRequest
0 голосов
/ 22 февраля 2019

Я купил скрипт несколько лет назад на рынке envato.
Он вызывает API для отображения информации определенного элемента.
Они изменили свой API, поэтому я пытаюсь заставить его работать сновый API.
Мне удалось наконец получить код 200 из вызова API с моим носителем токена.

Но почему-то это не отражается при вызове изtheme.php.
Я думаю, что проблема заключается в части декодирования json, но я не совсем уверен.
Два дня подряд чесал голову, пытаясь заставить это работать.

Первый код взят из Theme.php, который я включил в shortcode.php (второй код)

<div class="eip-shortcode-wrapper">

<?php /* Title */ if( in_array( 'title', $this->preferences['preferences_components'] ) ): ?>

    <span class="eip-title" style="color: <?php echo $this->preferences['preferences_text_color'] ?>"><?php echo $item->name; ?></span><!-- /title -->

<?php endif; ?>

Я сделал некоторые изменения в этой части кода, чтобы сделать вызов API:

        // Get item info
    $item = $this->get_item( $id );

    if( $item === false ) 
        return $this->msg( '<p class="envatomsg">Oops something went wrong... The info for this item couldnt be retrieved.<br>It could have been removed by the Envato DEV or just refresh the page to try again.</p>' );

    ob_start();

    include 'theme.php';


    return ob_get_clean();
}

protected function get_item( $id ) 
{
    $cache_expiration = 3600; // the cache expires in 3 hour

    $transient_id = "eip_envato_item_" . $id;

    $cached_data = get_transient( $transient_id );

    if( !$cached_data || ( $cached_data->id != $id ) ) {

        // Fetch data
        $response = wp_remote_get('https://api.envato.com/v3/market/catalog/item?id='. $id .'.json', array('headers' => array(
        'Authorization' => "Bearer AH6qreWAIBjXXXXXMYTOKEN"
        )
            )
                );

        // Check for errors 
        if( is_wp_error( $response ) or ( wp_remote_retrieve_response_code( $response ) != 200 ) ){
           return false;
        }

        // Parse json to object
        $result = json_decode( wp_remote_retrieve_body( $response ) );

        // Check for incorrect data
        if( !is_object( $result ) or !isset( $result->item ) or empty( $result->item )){
            return false;
        }

        // Prepare data for caching
        $data = new stdClass();
        $data->id = $id;
        $data->item = $result->item;

        // Set the transient
        set_transient( $transient_id, $data, $cache_expiration );

        // Return item
        return $data->item;
    }

    return $cached_data->item;
    }

    return $cached_data->item;
}

1 Ответ

0 голосов
/ 24 февраля 2019

Проблема решена благодаря старому однокласснику.
<?php echo $item->name; ?> должно быть <?php echo $item['name']; ?>

потому что это не был объект явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...