Какие изменения необходимы для того, чтобы топ-посты 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/

Другие вопросы по тегам