Inhaltsverzeichnis
回复内容:
Heim Backend-Entwicklung PHP-Tutorial wordpress如何显示指定分类一周内最新文章数量

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

Jun 06, 2016 pm 08:47 PM
php wordpress

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

<code><?php $posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' );
echo count($posts);
?>
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

回复内容:

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

<code><?php $posts = get_posts( 'numberposts=-1&category=分类id1,分类id2,分类id3' );
echo count($posts);
?>
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

好久没看到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;
}
Nach dem Login kopieren

由于使用到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
Nach dem Login kopieren

如果数据比较大,建议使用上面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>
Nach dem Login kopieren

调用指定分类下指定数量的文章,分类ID编号可以在wordpress后台看到

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

指定数量的最新文章:

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

调用完成以后。你可以自己写一段代码,思路差不多是:需要设定一个制定时间,比如七天内这个分类出现的最新文章。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);
    }
}
Nach dem Login kopieren

调用

<?php echo wt_get_category_count($id);?>
Nach dem Login kopieren

变量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计数。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP arbeitet mit Datenbank CakePHP arbeitet mit Datenbank Sep 10, 2024 pm 05:25 PM

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

CakePHP-Protokollierung CakePHP-Protokollierung Sep 10, 2024 pm 05:26 PM

Die Anmeldung bei CakePHP ist eine sehr einfache Aufgabe. Sie müssen nur eine Funktion verwenden. Sie können Fehler, Ausnahmen, Benutzeraktivitäten und von Benutzern durchgeführte Aktionen für jeden Hintergrundprozess wie Cronjob protokollieren. Das Protokollieren von Daten in CakePHP ist einfach. Die Funktion log() wird bereitgestellt

See all articles