如题,想写一个导航栏,导航栏的每个分类拥有一个气泡显示一周内更新的文章数量。
已知获取一个分类的全部文章数量是
<?php
$posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' );
echo count($posts);
?>
请问如何实现显示一周内发布文章的数量?谢谢..
大致效果类似于b站这样
如题,想写一个导航栏,导航栏的每个分类拥有一个气泡显示一周内更新的文章数量。
已知获取一个分类的全部文章数量是
<?php
$posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' );
echo count($posts);
?>
请问如何实现显示一周内发布文章的数量?谢谢..
大致效果类似于b站这样
另外给你一个思路。
放到 functions.php 中
function newArticle($num,$cat){
$args=array(
'posts_per_page' => $num,
'cat' => $cat,
'order' => 'desc'
);
$posts = query_posts($args);
if( have_posts() ) :
$html = '<div class="newArticle">';
$html .= '<ul>';
foreach($posts as $post) :
$html .= '<li>';
$html .= '<a href="'.get_permalink($post->ID).'" rel="bookmark" title="'.$post->post_title.'">'.$post->post_title.'</a>';
$html .= '</li>';
endforeach;
$html .= '</ul>';
$html .= '</div>';
endif;
echo $html;
}
调用指定分类下指定数量的文章,分类ID编号可以在wordpress后台看到
newArticle($num,$cat); // $num 要显示的数量; $cat 制定分类的ID
指定数量的最新文章:
newArticle($num,null); // $num 要显示的数量; 注意:null 一定要填写,否则出现PHP报错
调用完成以后。你可以自己写一段代码,思路差不多是:需要设定一个制定时间,比如七天内这个分类出现的最新文章。wordpress默认应该是没有这个功能的。你可以在数据库查询,有多少内容,然后缓存到一个SQL表单,wordpress前台读取这个表单的数值。
或者说,给每个分类的提示数量设置一个基数(比如0)。然后读取,这个分类下面更新过多少文章(前提做好时间范围控制)然后在这个基数上面添加这个数值。
给你个参考,
function wt_get_category_count($input = '') {
global $wpdb;
if($input == '') {
$category = get_the_category();
return $category[0]->category_count;
}
elseif(is_numeric($input)) {
$SQL = "SELECT {$wpdb->term_taxonomy}.count FROM {$wpdb->terms}, {$wpdb->term_taxonomy} WHERE {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id AND {$wpdb->term_taxonomy}.term_id = {$input}";
return $wpdb->get_var($SQL);
}
else {
$SQL = "SELECT {$wpdb->term_taxonomy}.count FROM {$wpdb->terms}, {$wpdb->term_taxonomy} WHERE {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id AND {$wpdb->terms}.slug='{$input}'";
return $wpdb->get_var($SQL);
}
}
调用
<?php echo wt_get_category_count($id);?>
变量ID为分类的ID
一个残酷的事实就是:分类(category, 数据表中被归类为term的一种)是没有meta辅助数据的。
所以你不能像记录Post Meta一样,简单的把这个数目用一个函数记录在分类里,再用另一个函数调出来。这个做不到的。
可行的办法是:先用后台的计划任务,自己用$wpdb
数据库操作类,构造SQL语句查询出这个个数。然后用wp_options
表缓存,每次前台展示时直接调用。
需要的API包含:WordPress Cron, WordPress Options, Class/wpdb。
注:抱歉,其实是没时间写这个SQL(逃) 主要的思路是:查询posts + term_relationships两个表(JOIN关系需要考虑一下),筛选某个特定分类(term)下所有的post记录,按post类型(post)、发布状态(publish)和日期(>=特定日期)筛选,最后SELECT COUNT计数。
1 回答4.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答1.4k 阅读
1 回答579 阅读✓ 已解决
好久没看到worpdress的问题了.
本人正好非常熟悉wordpress开发.
这是我写的函数.
由于使用到
date_query
, 所以这个只适用3.7+--
Update:
给
wp_query
添加一些参数进行优化.生成的sql,大概是这样的
如果数据比较大,建议使用上面sql,搭配$wpdb->get_var($sql).
记住要使用count(wp_posts.ID), 毕竟聚合函数开销小点