it-swarm.com.de

Abfragen und Sortieren von Kommentaren nach benutzerdefiniertem Kommentar-Meta

Ich habe einer WordPress-Site, an der ich arbeite, eine grundlegende "Favoriten/Empfehlen" -Funktion für Posts und Kommentare hinzugefügt.

Ich speichere die Gesamtzahl der "Gefällt mir" -Kommentare in einem benutzerdefinierten Kommentar-Metafeld (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 anscheinend unterstützen Kommentarabfragen diese nicht.

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

3
ximi

Leider wird es von den anwendbaren WordPress-Funktionen zum Abfragen von Kommentaren nicht unterstützt, was hauptsächlich darauf zurückzuführen ist, dass (meiner Meinung nach) noch nicht genügend Leute (oder sonst jemand) danach fragen.

Ich möchte hier einige Kerndateien hervorheben, um das Problem besser zu verstehen.


  • Nach comments-template.php , der Funktion comment_template, fragt diese Funktion nach Kommentaren und fügt sie dann zum Objekt WP_Query hinzu.

    • Siehe Zeile 882
    • Es gibt dort keine Filter oder Aktionen, um die Abfrage abzufangen, bevor sie ausgeführt oder geändert wird.

  • Weiter oben comments.php und die Funktion get_comments, diesmal gibt es keine Unterstützung für benutzerdefinierte Sortierungen, z. Meta-Sortierung.

    • Siehe Zeile 262
    • Der array_intersect sucht nur nach Übereinstimmungen. Wenn er sich nicht in dem dort angezeigten Wertearray befindet, wird er nicht als gültige Reihenfolge angesehen.

Es gibt jedoch einen Filter in der Kommentarvorlagenfunktion, der das gesamte Array von Kommentaren mit dem Namen comments_array weiterleitet (Sie werden diesen Haken in der ersten Datei sehen, mit der ich in Zeile 892 verlinkt habe).

Sie können das Array mit den abgerufenen Kommentaren durchlaufen und ein neues Array erstellen, das basierend auf Ihren Metadaten sortiert ist (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 Array-Jonglieren hinzufügen, wenn Sie eines benötigen.

1
t31os