Ich weiß, wie ich einen benutzerdefinierten Feldwert für einen bestimmten Beitrag erhalte.
get_post_meta($post_id, $key, $single);
Was ich brauche, ist, alle Werte, die mit einem bestimmten benutzerdefinierten Beitragsschlüssel verknüpft sind, über alle Beiträge hinweg abzurufen .
Kennt jemand einen effizienten Weg, dies zu tun? Ich möchte nicht alle Post-IDs in der DB durchlaufen.
Beispiel:
4 Posts mit unterschiedlichen Werten für ein benutzerdefiniertes Feld namens "Stimmung". 2 Beiträge haben den Wert 'glücklich', 1 Beitrag hat 'wütend' und 1 Beitrag hat 'traurig'
Ich möchte Folgendes ausgeben: über alle Posts, die wir haben: zwei glückliche, eine wütende und eine traurige Autor (en).
Aber für viele Beiträge.
Was ich suche, ist entweder:
- eine WP Funktion um dies zu bekommen. oder
- eine benutzerdefinierte Abfrage, um dies so effizient wie möglich zu erhalten.
custom-field
mikkelbreum
quelle
quelle
Antworten:
Ein möglicher Ansatz wäre, eine der Hilfsmethoden in der WPDB-Klasse zu verwenden, um eine verfeinerte metabasierte Abfrage durchzuführen. Die Einschränkung bei der Verwendung einiger dieser Funktionen besteht jedoch darin, dass Sie normalerweise kein einfaches Array von Daten zurückerhalten und in der Regel unnötige Verweise auf Objekteigenschaften erstellen müssen, selbst wenn Sie nur eine Spalte oder Zeile aufrufen.
Natürlich sind nicht alle Funktionen gleich, und die WPDB- Methode,
get_col
die ein einfaches, flaches Array der abgefragten Daten zurückgibt , wird absichtlich erwähnt. Ich erwähne dies ausdrücklich, weil das folgende Beispiel diese Methode aufruft .WordPress - WPDB Auswahl einer
Datenspalte $ wpdb-> get_col ()
Hier ist eine Beispielfunktion, die die Datenbank nach allen Beiträgen eines ausgewählten Beitragstyps, Beitragsstatus und mit einem bestimmten Metaschlüssel (oder benutzerdefinierten Feld für weniger technisch denkende) abfragt.
So zum Beispiel, wenn Sie welche Beiträge , um herauszufinden , wie ein Meta - Schlüssel haben Bewertung , für die Post - Art Filme und Sie möchten , dass innerhalb einer Variablen , die Informationen speichern, ein Beispiel für eine solche Aufforderung wäre ..
Wenn Sie nichts weiter tun wollten, als diese Daten auf dem Bildschirm auszudrucken, kann die Implode-Funktion von PHP dieses einfache Array schnell in Datenzeilen aufteilen.
Sie können die zurückgegebenen Daten auch verwenden, um herauszufinden, wie viele Posts über diese Metawerte verfügen, indem Sie beispielsweise eine einfache Schleife über die zurückgegebenen Daten durchführen und ein Array der Zähler erstellen.
Diese Logik könnte auf verschiedene Arten von Daten angewendet und auf eine beliebige Anzahl verschiedener Arten erweitert werden. Daher hoffe ich, dass meine Beispiele hilfreich und einfach genug waren, um zu folgen.
quelle
DISTINCT
direkt nach derSELECT
in der obigen Funktion ein. Könnte nützlich sein.Ich möchte dem obigen Code von t31os nur eine Kleinigkeit hinzufügen . Ich habe "SELECT" in "SELECT DISTINCT" geändert, um doppelte Einträge zu vermeiden, wenn ich diesen Code selbst verwendet habe.
quelle
Es ist nicht gut oder erforderlich, das globale $ wpdb zu verwenden:
quelle
Der schnellste Weg wäre eine benutzerdefinierte SQL-Abfrage und ich bin nicht sicher, aber Sie können es versuchen
Wenn überhaupt, dann ist es ein Anfang.
quelle
Zum Abrufen aller Metawerte über einen Metaschlüssel
Überprüfen Sie wp-> db wordpress codex
quelle
Es gibt keinen Grund, warum Sie t31os und Bainternets Code nicht zusammenführen können, um eine wiederverwendbare vorbereitete Anweisung (WordPress-Stil) zu erhalten, die die Anzahl und die Werte in einer effizienten Operation zurückgibt.
Es handelt sich um eine benutzerdefinierte Abfrage, die jedoch weiterhin die Abstraktionsschicht der WordPress-Datenbank verwendet. Es spielt also beispielsweise keine Rolle, wie die Tabellennamen wirklich lauten oder ob sie sich ändern, und es handelt sich um eine vorbereitete Anweisung, damit wir vor SQL-Angriffen usw .
In diesem Fall überprüfe ich nicht mehr den Beitragstyp und schließe leere Zeichenfolgen aus:
In diesem besonderen ist
Dies wird ein Array von Objekten wie folgt zurückgeben:
quelle
Verwenden Sie mit foreach Folgendes
Angenommen, der Name Ihres benutzerdefinierten Feldschlüssels lautet
quelle