it-swarm.com.de

Wie können zusätzliche Daten, die mit Begriffen verknüpft sind, organisiert und zwischengespeichert werden?

Ich aktualisiere ein Plugin von mir und habe Schwierigkeiten, den "besten Weg" zu finden, um ein bestimmtes Stück Funktionalität einzubauen. Mit dem Plugin können Benutzer Bilder aus ihrer Medienbibliothek einem beliebigen Begriff einer beliebigen Taxonomie zuordnen. Ich arbeite derzeit an der Erstellung von Funktionen, die Benutzer ihren Designs und Plugins hinzufügen können, um die Daten vom Plugin zu speichern. Der Code, den ich bisher habe, kann hier eingesehen werden: https://github.com/mfields/Taxonomy-Images/blob/master/public-filters.php

Mit der in dieser Datei präsentierten Funktionalität können Benutzer das Bild des aktuell abgefragten Begriffs abrufen (für Taxonomiearchivansichten). Eine weitere Funktion ist im Grunde ein Wrapper für die Kernfunktion get_terms(), der alle Begriffe einer bestimmten Taxonomie zurückgibt, während die Bild-ID hinzugefügt wird jedes Termobjekt. Ich möchte der Datei vor der Veröffentlichung eine dritte Funktion hinzufügen. Dies wäre ein Wrapper für get_the_terms() und würde alle Begriffe zurückgeben, die dem globalen Post-Objekt mit Bildern zugeordnet sind.

Ich habe darüber nachgedacht, die get_the_terms() -Funktion nach der get_terms() -Funktion zu modellieren, die das Caching für die Bilddateien integriert hat. Aber ich habe ein bisschen Angst davor, was passieren würde, wenn diese Funktion in einer beliebigen Archivvorlage in der Schleife verwendet würde.

Grundsätzlich würde der Workflow ungefähr so ​​aussehen:

  1. Holen Sie sich alle Bild/Begriff Assoziationen (0 Abfragen).
  2. Begriffe abrufen, die mit dem globalen Beitrag verknüpft sind: get_the_terms() (0 Abfragen).
  3. Abfrage aller mit den Begriffen verknüpften Bilder (3 Abfragen). Dazu wird eine Liste aller Bild-IDs erstellt und über den Parameter include an get_posts() übergeben.

IMHO ist dies in einzelnen Ansichten (single.php, page.php usw.) in Ordnung, aber was würde passieren, wenn ein Benutzer diese Funktion in der Schleife in Archivansichten verwenden würde? Sie müssen 3 Abfragen (erstellt von get_posts()) mit dem Wert der Einstellung "Beiträge pro Seite" multiplizieren (10 in einer Standard-WordPress-Installation). Wir haben jetzt also insgesamt 30 Anfragen. Es wird ziemlich schnell hässlich! Insbesondere, wenn Benutzer Bilder aus mehr als einer Taxonomie anzeigen möchten. 2 Taxonomien pro Post würden 60 zu dem hinzufügen, was WordPress tun muss!

Grundsätzlich gibt es ein paar Wege, um voranzukommen, und ich würde gerne wissen, was Sie in einer solchen Situation tun würden.

  1. Erstellen Sie die Funktionalität überhaupt nicht.

  2. Erstellen Sie die Funktion und weisen Sie die Benutzer an, dass ein Caching-Plugin installiert werden soll, wenn sie get_the_terms () in Archivansichten verwenden.

  3. Erstellen Sie die Funktion + erstellen Sie eine weitere Funktion, die alle Bilder zwischenspeichert, bevor eine Archivvorlage geladen wird. Dieser Vorgang würde etwa Folgendes beinhalten: Nachdem das $posts-Array generiert wurde (aber bevor die Vorlage geladen wurde), durchlaufen Sie alle Posts im Array, und rufen Sie für jede öffentliche Taxonomie jede Iteration get_the_terms () auf. Die Ausgabe aller Termobjekte wird in einem neuen Array gespeichert. Dann könnte ich feststellen, welche Bilder mit jedem Begriff jeder Taxonomie verknüpft sind, und die Bild-IDs in einer Aufnahme an get_posts() übergeben. Auf diese Weise können alle Bildinformationen für die Verwendung in der Vorlage in drei Abfragen anstelle von 30, 60 oder 90 zwischengespeichert werden.

IMHO 3 scheint ein logischer Weg zu sein, aber ich bin mir nicht sicher, ob es eine Anti-Optimierung wäre oder nicht.

Bitte teilen Sie mir Ihre Gedanken dazu mit!

5
mfields

Ich würde sagen, Ihre dritte Option ist der Weg zu gehen.

Warum haben Sie übrigens in taxonomy_image_plugin_get_associations() Ihren eigenen statischen Cache gerollt, anstatt die integrierte WP_Cache-API dafür zu verwenden? Gibt es einen Grund, warum wp_cache_get hier nicht funktioniert? Die Verwendung des WP -Objektcaches scheint besser zu sein, wenn die Caching-Plug-ins aktiviert sind.

1
goldenapples