WordPress边栏中文本小工具获取某段时间内最热文章

WordPress 在边栏中显示最热文章,这个功能大多数主题应该都集成好了,当然我的主题是没有集成的,但是主题作者的网站是有的!!!然后我就找了一些自己来操作,让网站支持在文本小工具中显示最热文章,方便读者阅读,也可以通过用 wp-postviews 插件来实现显示指定天数的最热文章,我这里使用代码来实现

文本小工具是 WordPress 后台小工具中一个非常实用的边栏工具,可以添加一些自定义的栏目,但原生的小工具是不能运行 PHP 代码的,我们是通过在后台小工具中给边栏添加文本小工具实现的,所以首先需要让你的文本小工具支持 PHP 代码运行

将下面的代码添加到你主题的 functions.php 文件中:

add_filter('widget_text', 'php_text', 99);
function php_text($text) {
    if (strpos($text, '<' . '?') !== false) {
        ob_start();
        eval('?' . '>' . $text);
        $text = ob_get_contents();
        ob_end_clean();
    }
    return $text;
}

所谓的最热文章就是指某段时间内评论最多的文章,也就是关注最多的文章

同样把下面这些代码添加到你主题的 functions.php 文件中

function most_comm_posts($days=7, $nums=10) { //$days 参数限制时间值,单位为‘天’,默认是 7 天;$nums 是要显示文章数量
    global $wpdb;
    $today = date("Y-m-d H:i:s"); //获取今天日期时间
    $daysago = date( "Y-m-d H:i:s", strtotime($today) - ($days * 24 * 60 * 60) );  //Today - $days
    $result = $wpdb->get_results("SELECT comment_count, ID, post_title, post_date FROM $wpdb->posts WHERE post_date BETWEEN '$daysago' AND '$today' ORDER BY comment_count DESC LIMIT 0 , $nums");
    $output = '';
    if(empty($result)) {
        $output = '<li>None data.</li>';
    } else {
        foreach ($result as $topten) {
            $postid = $topten->ID;
            $title = $topten->post_title;
            $commentcount = $topten->comment_count;
            if ($commentcount != 0) {
                $output .= '<li><a href="'.get_permalink($postid).'" title="'.$title.'">'.$title.'</a> ('.$commentcount.')</li>';
            }
        }
    }
    echo $output;
}

使用$wpdb 对象来创建一个自定义的 SQL 查询,创建 3 个 PHP 变量:第一个是今天的日期,第二个是今天到 X 天之前的天数,这个我们作为形参,最后一个是今天的日期减去 X 天

然后进行调用,在后台小工具中给你的边栏添加文本小工具,命名为最热文章,把下面的代码复制进去,就 OK 了

<ul>
   <?php if(function_exists('most_comm_posts')) most_comm_posts(30, 7); ?>
</ul>

函数的参数 1 是按天计算的,30 就是 30 天,参数 2 是文章显示数量,7 就是显示 7 篇,自己根据所需设置

13 条评论

发表评论

*