ГлавнаяРазноеКак получить количество скачиваний темы WordPress

Как получить количество скачиваний темы WordPress

Если вы разрабатываете темы для 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, оставьте комментарий и мы обязательно вам ответим.

Константин Ковшенин

Сооснователь журнала WP Magazine и первой конференции WordCamp в России. Работал в Automattic, WordPress.com, WooCommerce. Принимает активное участие в развитии ядра WordPress. Любимый язык программирования: Python.

Подписаться на рассылку

Подписаться → Подпишитесь на бесплатную рассылку журнала WP Magazine и получайте новости, события, подборки тем и плагинов, уроки, советы и многое другое в мире WordPress!