Если вы разрабатываете темы для WordPress и выкладываете их в директорию WordPress.org, вам наверняка захочется опубликовать информацию о вашей теме на своем сайте и указать количество скачиваний, рейтинг и другую информацию.
У WordPress.org есть собственный API, который позволяет получать определенную информацию о темах в директории. Этот API используется в ядре WordPress при поиске и установке тем, во время проверки на обновления и т.д. Его же мы можем использоваться для того, чтобы получить необходимые нам показатели:
include_once ABSPATH . 'wp-admin/includes/theme.php'; $api = themes_api( 'theme_information', array( 'slug' => 'twentyfourteen' ) );
Для работы с темами через API WordPress.org нам потребуется файл wp-admin/includes/theme.php. Для примера возьмем популярную тему Twenty Fourteen. По ее названию мы получаем объект $api
, который содержит в себе всю информацию о теме. Ниже представлены несколько примеров, а для получения полного списка свойств, воспользуйтесь функцией var_dump()
.
Общее количество скачиваний темы можно получить с помощью свойства downloaded
:
printf( 'Тему Twenty Fourteen скачали %d раз.', $api->downloaded );
Дата последнего обновления и версия хранятся в last_updated
и version
:
printf( 'Последняя версия Twenty Fourteen: %s.', $api->version ); printf( 'Последнее обновление: %s.', $api->last_updated );
С рейтингом немного сложнее, поскольку API выдает рейтинг в процентах, а на WordPress.org указан рейтинг по 5-ти бальной шкале:
$rating = ( $api->rating / 100 ) * 5; printf( 'Рейтинг Twenty Fourteen: %.1f', $rating ); printf( 'Всего проголосовавших: %d', $api->num_ratings );
Кэширование
Не забывайте, что каждый запрос к API WordPress.org это дорогой вызов HTTP на внешний ресурс, который замедляет работу вашего сайта, а при большом количестве посетителей может создать существенную нагрузку на ваш хостинг-аккаунт.
Для того, чтобы этого избежать, воспользуйтесь кэшированием, и в данном случае хорошо подойдет API для транзитного кэширования WordPress — это кэширование произвольных значений на определенное время.
Рассмотрим простой пример:
function get_my_theme_info( $slug ) { $cache_key = md5( 'my_theme_info_' . $slug ); $api = get_transient( $cache_key ); if ( $api ) return $api; include_once ABSPATH . 'wp-admin/includes/theme.php'; $api = themes_api( 'theme_information', array( 'slug' => $slug ) ); set_transient( $cache_key, $api, 12 * HOUR_IN_SECONDS ); return $api; }
Таким образом при первом обращении к новой функции get_my_theme_info()
, WordPress выполнит API запрос и закэширует результат на 12 часов, и при последующем обращении к этой же функции, результат будет сразу выдан из транзитного кэша.
Если у вас возникнут вопросы при работе с API WordPress.org, оставьте комментарий и мы обязательно вам ответим.