Какие изменения необходимы для того, чтобы топ-посты Jetpack отображали топ-сообщения всех времен, а не только последние 2 дня?
Я хочу добавить виджет на свой сайт, который показывает самые просматриваемые посты всех времен. Кажется, что каждый плагин, который я пробовал до сих пор, использует свою собственную базу данных, которая инициализируется при установке, а не использует внутреннюю статистику. Jetpack, похоже, хранит эту статистику, но его виджет топ-постов обеспечивает только последние 1-2 дня и не имеет встроенной опции для более длительных периодов времени.
Я пытался взломать top-posts.php
виджет но с ограниченным успехом. Вот соответствующий раздел из моего файла:
/**
* Filter the number of days used to calculate Top Posts for the Top Posts widget.
* We do not recommend accessing more than 10 days of results at one.
* When more than 10 days of results are accessed at once, results should be cached via the WordPress transients API.
* Querying for -1 days will give results for an infinite number of days.
*
* @module widgets
*
* @since 3.9.3
*
* @param int 2 Number of days. Default is 2.
* @param array $args The widget arguments.
*/
$days = (int) apply_filters( 'jetpack_top_posts_days', 999999, $args );
/** Handling situations where the number of days makes no sense - allows for unlimited days where $days = -1 */
if ( 0 == $days || false == $days ) {
$days = 2;
}
$post_view_posts = stats_get_from_restapi( array(), 'top-posts?max=11&summarize=1&num=' . absint( $days ) );
Если я изменю значение по умолчанию $days
до 10, то статистика рассчитывается правильно за 10 дней. Но количество сообщений, которые на самом деле появляются, отличается от того, что запрашивается. С $days
=10, только 10 лучших сообщений отображаются, когда вы запрашиваете 10 из них. Если я установлю $days
на огромное число, например 99999, то он сообщает, что нет сообщений, чтобы показать, если $count
4 или менее, и только два сообщения отображаются, если $count
это 10.
Я должен также добавить, что, как написано, вы не можете установить $days=-1
и это работает, потому что $post_view_posts
использует абсолютное значение. Конечно, от этого легко избавиться absint
но это не решает эту причудливую проблему возврата неправильного количества сообщений...
Итак... кто-нибудь знает правильные изменения, чтобы осуществить это?
1 ответ
Вместо того, чтобы пытаться взломать виджет, который будет заменен только при обновлении, вы можете просто использовать фильтр. Обратите внимание, что -1
это то, что вы хотите вернуть неограниченное количество дней.
function jetpackme_top_posts_timeframe() {
return '-1';
}
add_filter( 'jetpack_top_posts_days', 'jetpackme_top_posts_timeframe' );
Поместите это в functions.php вашей дочерней темы.
Ссылка: https://jetpack.com/2016/01/12/hooks-customize-top-posts-pages-widget/