Abfrage und Sortierung Kommentare nach benutzerdefinierten Kommentar Meta

Ich habe eine grundlegende “favorite / recommend” -functionalität für Posts und Kommentare zu einer WordPress-Site hinzugefügt, an der ich gerade arbeite.

Ich speichere die Gesamtzahl der Kommentare “Likes” in einem benutzerdefinierten Kommentarmeta-Feld (update_comment_meta). Jetzt möchte ich Kommentare basierend auf diesem benutzerdefinierten Metaschlüssel und den entsprechenden Werten abfragen und sortieren, um beliebte Kommentare anzuzeigen.

Idealerweise möchte ich Parameter wie “meta_key” und “order_by = meta_value_num” ähnlich wie WP_Query verwenden können, aber Kommentar-Abfragen unterstützen diese nicht.

Muss ich eine benutzerdefinierte geschriebene Abfrage für die database verwenden? Wenn ja, könnte mir jemand einen ersten Anstoß geben, wie ich das angehen könnte?

Solutions Collecting From Web of "Abfrage und Sortierung Kommentare nach benutzerdefinierten Kommentar Meta"

Leider wird es von den anwendbaren WordPress-functionen für die Abfrage von Kommentaren nicht unterstützt, was hauptsächlich daran liegt, dass (nicht genug) Leute (oder irgendjemand) noch nicht danach gefragt haben.

Ich möchte hier ein paar coredateien hervorheben, um das Problem zu verstehen.


  • Zuerst comments-template.php , die comment_template function, es ist diese function, die nach Kommentaren fragt und sie dann zum WP_Query Objekt WP_Query .

    • Siehe Zeile 882
    • Es sind keine Filter oder Aktionen vorhanden, um die Abfrage vor deren Auftreten abzufangen oder sie zu ändern.

  • Als nächstes kommen comments.php und die function get_comments , dieses Mal werden Sie keine Unterstützung für benutzerdefinierte Sortierungen finden, z. Meta-Sortierung.

    • Siehe Zeile 262
    • Das array_intersect sucht nur nach Übereinstimmungen. Wenn es nicht in diesem Array von Werten ist, die Sie dort sehen, wird es nicht als gültige Reihenfolge betrachtet.

Es gibt einen Filter in der Kommentarvorlagenfunktion, der jedoch das gesamte Kommentarfeld mit dem Namen comments_array (Sie sehen diesen Haken in der ersten Datei, mit der ich in Zeile 892 verbunden bin).

Sie könnten das Array der abgerufenen Kommentare durchlaufen und ein neues Array erstellen, das basierend auf Ihren Metadaten sortiert wird (obwohl Sie wahrscheinlich eine benutzerdefinierte Abfrage benötigen, um die Metadaten abzurufen, wenn Sie so effizient wie möglich sein möchten). .

Ich kann später ein Beispiel für das Array-Jonglieren hinzufügen, wenn Sie eines benötigen.