wordpress如何显示指定分类一周内最新文章数量
如题,想写一个导航栏,导航栏的每个分类拥有一个气泡显示一周内更新的文章数量。
已知获取一个分类的全部文章数量是
<code><?php $posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' ); echo count($posts); ?> </code>
请问如何实现显示一周内发布文章的数量?谢谢..
大致效果类似于b站这样
回复内容:
如题,想写一个导航栏,导航栏的每个分类拥有一个气泡显示一周内更新的文章数量。
已知获取一个分类的全部文章数量是
<code><?php $posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' ); echo count($posts); ?> </code>
请问如何实现显示一周内发布文章的数量?谢谢..
大致效果类似于b站这样
好久没看到worpdress的问题了.
本人正好非常熟悉wordpress开发.
这是我写的函数.
<br>function get_this_week_post_count_by_category($id){ $date_query = array( array( 'after'=>'1 week ago' ) ); $tax_query = array( array( 'taxonomy' => 'category', 'field' => 'id', 'terms' => $id ) ); $args = array( 'post_type' => 'post', 'post_status'=>'publish', 'tax_query' => $tax_query, 'date_query' => $date_query, 'no_found_rows' => true, 'suppress_filters' => true, 'fields'=>'ids', 'posts_per_page'=>-1 ); $query = new WP_Query( $args ); return $query->post_count; }
由于使用到date_query
, 所以这个只适用3.7+
--
Update:
给wp_query
添加一些参数进行优化.
生成的sql,大概是这样的
SELECT wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( ( post_date > '2014-02-04 10:47:10' ) ) AND ( wp_term_relationships.term_taxonomy_id IN (247) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC
如果数据比较大,建议使用上面sql,搭配$wpdb->get_var($sql).
记住要使用count(wp_posts.ID), 毕竟聚合函数开销小点
另外给你一个思路。
放到 functions.php 中
<code>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; } </code>
调用指定分类下指定数量的文章,分类ID编号可以在wordpress后台看到
<code>newArticle($num,$cat); // $num 要显示的数量; $cat 制定分类的ID </code>
指定数量的最新文章:
<code>newArticle($num,null); // $num 要显示的数量; 注意:null 一定要填写,否则出现PHP报错 </code>
调用完成以后。你可以自己写一段代码,思路差不多是:需要设定一个制定时间,比如七天内这个分类出现的最新文章。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计数。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Bab ini membincangkan maklumat tentang proses pengesahan yang terdapat dalam CakePHP.
