Какие изменения необходимы для того, чтобы топ-посты Jetpack отображали топ-сообщения всех времен, а не только последние 2 дня? - PullRequest
0 голосов
/ 31 января 2019

Я хочу добавить виджет на свой сайт, который показывает самые просматриваемые посты всех времен.Кажется, что каждый плагин, который я пробовал до сих пор, использует свою собственную базу данных, которая инициализируется при установке, а не использует внутреннюю статистику.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 отображаются только первые 6 сообщений, когда вы просите 10 из них.Если я установлю $days на огромное число, например 99999, то оно сообщит, что нет записей, которые можно отобразить, если $count равно 4 или меньше, и только два сообщения отображаются, если $count равно 10.

Я должен также добавить, что, как написано, вы не можете установить $days=-1 и заставить его работать, потому что $post_view_posts использует абсолютное значение.Конечно, от этого absint легко избавиться, но это не решает эту причудливую проблему с возвратом неправильного числа сообщений ...

Итак ... кто-нибудь знает правильные правки, которые нужно потянутьэто выключено?

1 Ответ

0 голосов
/ 31 января 2019

Вместо того, чтобы пытаться взломать виджет, который будет заменен только при обновлении, вы можете просто использовать фильтр.Обратите внимание, что -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/

...