Я купил скрипт несколько лет назад на рынке 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;
}