我想向我的网站添加一个小部件,以显示历史上浏览次数最多的帖子。到目前为止,我尝试过的每个插件似乎都使用自己的数据库,该数据库在安装时初始化,而不是使用内部统计信息。 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个帖子时,只会显示前6个帖子。如果我将$days
设置为99999之类的大数字,那么它将报告没有帖子显示$count
为4或更少,如果$count
为10则仅显示两个帖子。
我还要补充一点,按照书面规定,您实际上不能设置$days=-1
并使其起作用,因为$post_view_posts
使用绝对值。当然,摆脱absint
很容易,但这不能解决返回错误数目的帖子的怪异问题……
那么...有人知道正确的编辑方法吗?
答案 0 :(得分:0)
您可以使用过滤器,而不必尝试修改只会在更新时被替换的小部件。请注意,-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/