✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Benutzerdefinierte Archivvorlagen: Eine kurze Anleitung

22

Immer wenn Sie mit Archivvorlagen in WordPress arbeiten, werden Beiträge normalerweise nach Datum in absteigender Reihenfolge aufgelistet. Das heißt, die neusten Beiträge werden oben aufgelistet, und dann geht es von dort aus weiter.

In letzter Zeit habe ich an einigen Projekten gearbeitet, die sich in APIs von Drittanbietern integrieren lassen. Diese APIs geben Daten – manchmal zwei Daten, ein Startdatum und ein Enddatum – für ein bestimmtes Ereignis zurück, und Kunden möchten diese Informationen verwenden, um Posts aufzulisten, anstatt das Datum des Posts. Das heißt, sie wollen benutzerdefinierte Archivvorlagen.

Es ist nicht allzu schwer, dies zu tun, aber bevor Sie dies tun, denke ich, dass es wichtig ist, einige Hintergrundinformationen darüber zu geben, wie das Projekt aufgebaut ist, damit es ein bisschen mehr Kontext gibt, warum, sagen wir, eine benutzerdefinierte Abfrage benötigt wird und warum Sie können oder dürfen müssen nicht in pre_get_posts schauen .

Ich fange aber zuerst mit einem TL;DR an. Auf diese Weise können Sie sich ein Bild machen, bevor Sie das Ganze lesen.

Benutzerdefinierte Archivvorlagen

Das TL;DR hinter dem Ganzen ist also folgendes:

  • Die Datumsinformationen, die von der Drittanbieter-API bereitgestellt werden, werden in der Post-Metadatentabelle gespeichert.
  • Der Schlüssel ist das Startdatum und der Wert ist das tatsächliche Datum.
  • Ich ordne den Inhalt in absteigender Reihenfolge und nach dem Metawert.

Die Paginierung kann ein kleines Problem sein, und wenn Sie einen benutzerdefinierten Beitragstyp verwenden, benötigen Sie einige zusätzliche Parameter, aber es gibt die allgemeine Idee.

Jetzt für die gesamte Einrichtung.

Benutzerdefinierte Beitragstypen

Wenn es um die Verbindung mit APIs von Drittanbietern geht, bin ich ein großer Fan von benutzerdefinierten Post-Typen, weil ich sie eher als eine Mischung aus Modellen und Ansichten betrachte.

  • Die Modellkomponente enthält alles, was tangential verwandt ist und in die Datenbank geschrieben werden kann. Dies bedeutet alle Taxonomieinformationen oder Post-Metadaten.
  • Die Ansichtskomponente ist im Allgemeinen alles, was in die Vorlage einfließt, das alle bereits vorhandenen Vorlagen-Tags nutzen kann, alles, was möglicherweise erstellt werden muss und das auch Informationen aus der Datenbank liest.

Für diesen Beitrag verwende ich acme-event als benutzerdefinierten Beitragstyp.

Metadaten posten

Ich lege die Daten in den Post-Metadaten und nicht im Post selbst fest, denn wenn in der Zukunft etwas passieren wird und die Daten im Post-Datensatz selbst festgelegt sind, behandelt WordPress es als einen geplanten Post, der nicht veröffentlicht wird .

Stattdessen lasse ich den Beitrag lieber veröffentlichen und ändere dann die Art und Weise, wie Metadaten in der Vorlage angezeigt werden.

Seitennummerierung

WordPress macht einen subtilen Unterschied mit der Paginierung in seiner Codebasis. Das heißt, die Abfragevariable für Sites ohne statische Homepage verwendet paged und der umgekehrte Fall verwendet page.

Benutzerdefinierte Archivvorlagen: Eine kurze Anleitung

Dies ist wichtig, wenn Sie die Argumente für die Abfrage konstruieren, auf die ich gleich zurückkommen werde.

Nur Seiten archivieren

Denken Sie daran, dass Sie bei der Einführung der Paginierung die Abfrage nur dann ändern möchten, wenn Sie sich auf der eigentlichen Archivseite befinden.

Das bedeutet, dass Sie sich nicht um Fälle kümmern, in denen Sie sich im Verwaltungsbereich von WordPress befinden und die Abfrage für nicht benutzerdefinierte Post-Typ-Archive nicht ändern möchten. Zu diesem Zweck sollten Sie sicherstellen, dass Sie die Abfragevariable im pre_get_posts-Callback richtig setzen.

Beachten Sie, dass ich eine Funktion dafür zeigen kann, aber aufgrund der Art und Weise, wie wir Code in WordPress schreiben – das heißt, einige schreiben prozeduralen Code, andere schreiben objektorientierten Code – zeige ich es einfach in prozeduralem Code.

Alles zusammenbringen

Zuerst erstelle ich die Abfrage:

<?php

$eventQuery = new WP_Query([
    'post_type' => 'acme-events',
    'post_status' => 'publish',
    'orderby' => 'meta_value',
    'order' => 'desc',
    'meta_key' => 'acme-event-start-date-time',
    'posts_per_archive_page' => 5,
    'paged' => get_query_var('paged')? get_query_var('paged'): 1
]);

Beachten Sie, dass es im obigen Code ein Argument für paged gibt. Ich werde gleich über den Code dafür sprechen.

Dann enthält die Vorlage alle Informationen, die Sie anzeigen möchten. Ich entscheide mich dafür, den Code für meine Vorlage in diesem Beitrag nicht zu teilen, da er für die übergeordnete Idee irrelevant ist.

Außerdem haben Sie alles, was Sie zum Anzeigen der Inhalte benötigen.

Als Nächstes lege ich die Paginierung fest. Zuerst muss ich dies mit dem pre_get_posts-Hook tun, um sicherzustellen, dass die richtige Abfragevariable gesetzt ist :

<?php

add_action('pre_get_posts', 'setCustomQueryVariable');
public function setCustomQueryVariable($query)
{
    if (is_admin() || !is_archive()) {
        return;
    }

    if ($query->is_archive('acme-events')) {
        set_query_var('posts_per_page', 5);
    }
}

Dann implementiere ich die Paginierung mit der benutzerdefinierten Abfrage:

<?php

<a class="next page-numbers" href="<?php echo esc_attr(get_next_posts_page_link($eventQuery->max_num_pages)); ?>">
    Next Page
</a>

<a class="prev page-numbers" href="<?php echo esc_attr(get_previous_posts_page_link()); ?>">
    Previous Page
</a>

Und danach setze ich die globale $post-Variable mit wp_reset_postdata() zurück, nur für den Fall, dass irgendetwas aus dem ursprünglichen Post verwendet werden muss.

<?php wp_reset_postdata(); ?>

Dies wird im Allgemeinen als gute Haushaltsführung angesehen, wenn Sie eine benutzerdefinierte Abfrage verwenden.

Nützliche Links

Nachfolgend finden Sie eine Liste von Funktionen, Seiten und Referenzen, die Sie möglicherweise nützlich finden, da sie sich auf den obigen Code oder Ihre zukünftige Arbeit beziehen.

Wenn Sie schon lange mit WordPress arbeiten, scheinen einige davon überflüssig zu sein. In anderen Fällen mag es neu erscheinen oder Bereiche der WordPress-APIs beleuchten, von denen Sie nicht wussten, dass sie existieren (zumindest war das bei mir der Fall).

Warum sich mit all dem herumschlagen?

Dies mag ein langer Beitrag für eine scheinbar einfache Aufgabe sein, aber die Informationen sind im Internet etwas verstreut, wenn es darum geht, so etwas zu tun.

Also wollte ich versuchen, alles mit Erklärungen, Beispielcode und Links zu Seiten zusammenzubringen, die je nach Implementierung von Interesse sein könnten.

Schließlich verwenden viele von uns WordPress zu diesem Zeitpunkt über das grundlegende Content-Management hinaus, aber das bedeutet nicht, dass wir die integrierten Funktionen und APIs nicht nutzen sollten, wenn dies möglich ist.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen