目錄
回复内容:
首頁 後端開發 php教程 wordpress如何显示指定分类一周内最新文章数量

wordpress如何显示指定分类一周内最新文章数量

Jun 06, 2016 pm 08:47 PM
php wordpress

如题,想写一个导航栏,导航栏的每个分类拥有一个气泡显示一周内更新的文章数量。
已知获取一个分类的全部文章数量是

1

2

3

4

<code><?php $posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' );

echo count($posts);

?>

</code>

登入後複製
登入後複製

请问如何实现显示一周内发布文章的数量?谢谢..
大致效果类似于b站这样
wordpress如何显示指定分类一周内最新文章数量

回复内容:

如题,想写一个导航栏,导航栏的每个分类拥有一个气泡显示一周内更新的文章数量。
已知获取一个分类的全部文章数量是

1

2

3

4

<code><?php $posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' );

echo count($posts);

?>

</code>

登入後複製
登入後複製

请问如何实现显示一周内发布文章的数量?谢谢..
大致效果类似于b站这样
wordpress如何显示指定分类一周内最新文章数量

好久没看到worpdress的问题了.

本人正好非常熟悉wordpress开发.

这是我写的函数.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

<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,大概是这样的

1

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 中

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<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后台看到

1

2

<code>newArticle($num,$cat); // $num 要显示的数量;  $cat 制定分类的ID

</code>

登入後複製

指定数量的最新文章:

1

2

<code>newArticle($num,null); // $num 要显示的数量;  注意:null 一定要填写,否则出现PHP报错

</code>

登入後複製

调用完成以后。你可以自己写一段代码,思路差不多是:需要设定一个制定时间,比如七天内这个分类出现的最新文章。wordpress默认应该是没有这个功能的。你可以在数据库查询,有多少内容,然后缓存到一个SQL表单,wordpress前台读取这个表单的数值。

或者说,给每个分类的提示数量设置一个基数(比如0)。然后读取,这个分类下面更新过多少文章(前提做好时间范围控制)然后在这个基数上面添加这个数值。

给你个参考,

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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);

    }

}

登入後複製

调用

1

<?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计数。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

See all articles