Ordnen Sie die WordPress-Autoren nach der Anzahl der veröffentlichten benutzerdefinierten Beiträge
Lesezeit: 7 Minuten
der König
In meinem WordPress v5.8.1 habe ich eine Liste von Autoren, die in benutzerdefinierten Beiträgen posten song und poem. Mit dem folgenden Code erhalte ich die Liste der Autoren, die in beiden oder in einem benutzerdefinierten Beitrag gepostet haben.
Mit 'orderby' => 'post_count' In den Argumenten habe ich erwartet, dass die Autorenliste mit der höchsten kombinierten Anzahl benutzerdefinierter Posts zuerst angezeigt wird, sie wird jedoch zufällig ohne Reihenfolge angezeigt, weder nach noch nach post_counts Noch ID.
Wie kann ich die Autoren mit den meisten kombinierten Gesamtbeiträgen bestellen?
Nur zur Bestätigung – sagen Sie vor Ihrer for-Schleife, dass diese Abfrage nicht nach post_counts sortiert? Wenn Sie diese Abfrage direkt in Ihrer DB ausführen, ist das Ergebnis anders?
– Pat
21. Oktober 2021 um 8:55 Uhr
Nicht direkt in DB getestet.
– der König
21. Oktober 2021 um 12:26 Uhr
Ich habe gerade die gleiche Anfrage mit versucht get_users() und diese Parameter mit WordPress 5.8.1 und es hat perfekt funktioniert. Ich habe überprüft, wie die Abfrage im Quellcode vorbereitet ist: Es ist ein riesiges Durcheinander, aber die von Ihnen übergebenen Optionen werden korrekt berücksichtigt.
Zuerst die Sortieren nach Argument der Funktion get_users() arbeitet mit post_count zählt aber alle Beitragstypen (hier zählt es Gedicht, Lied und die anderen Typen mögen Post oder Seite).
Wenn Sie Ihre Ergebnisse nach bestimmten benutzerdefinierten Beitragstypen sortieren möchten, würde ich empfehlen, die zu verwenden wpdb Klasse, um Ihre eigene Anfrage zu entwerfen. Auf diese Weise können Sie mit einer einzigen Anfrage genau die gewünschten Ergebnisse erzielen, ohne dass Sie eine verwenden müssen für jeden um Ihre Ergebnisse danach zu sortieren.
Ich habe es auf diese Weise versucht und es hat funktioniert:
$authors = $wpdb->get_results(
"SELECT
$wpdb->users.ID AS author_id,
$wpdb->users.display_name AS author_name,
COUNT($wpdb->posts.ID) AS published_songs_and_poems,
COUNT(CASE WHEN $wpdb->posts.post_type="song" THEN $wpdb->posts.ID ELSE NULL END) as published_songs,
COUNT(CASE WHEN $wpdb->posts.post_type="poem" THEN $wpdb->posts.ID ELSE NULL END) as published_poems
FROM $wpdb->users
JOIN $wpdb->posts
ON $wpdb->posts.post_author = $wpdb->users.ID
AND $wpdb->posts.post_type IN('song', 'poem') AND $wpdb->posts.post_status="publish"
GROUP BY author_id
ORDER BY published_songs_and_poems DESC"
);
Diese Anfrage gibt ein Objekt mit Ergebnissen zurück, gruppiert nach Autor und sortiert nach der Gesamtzahl der veröffentlichten Lieder und Gedichte.
Sie können dieses Objekt verwenden, wie Sie es bereits getan haben. Etwas wie das :
array_walk($authors, function($author) {
echo $author->author_name." has published ".$author->published_songs." song(s) and ".$author->published_poems." poem(s).<br/>";
});
Ich habe diese Antwort bearbeitet, da sich die erste Version darauf konzentrierte, wie die Ergebnisse in der Reihenfolge der Gesamtsumme zurückgegeben werden post_count. Dies wurde geklärt, als @theKing kommentierte.
Es gibt andere benutzerdefinierte Beitragstypen als Lieder und Gedichte in meinem WP; aber hier möchte ich nur Autoren aus kombinierten Liedern & Gedichten zählen.
– der König
25. Oktober 2021 um 14:56 Uhr
Würde dies nicht eine Abfrage durchführen, um alle Autoren zu erhalten, und dann eine weitere Abfrage für jeden Autor in der Liste?
– Healyhatman
28. Oktober 2021 um 1:26 Uhr
Danke für die Klarstellung, @theKing. Ich habe gerade meine Antwort bearbeitet. Wie Healyhatman erwähnte, besteht das Risiko mehrerer DB-Anfragen. Aus diesem Grund scheint mir eine individuelle Anfrage der beste Ansatz zu sein.
– Lagart
28. Oktober 2021 um 13:18 Uhr
Technoh
Sie haben einen Fehler in Ihrem foreach blockieren, könnte dies die Ursache des Problems sein. Verwenden Sie stattdessen Folgendes:
Kurz gesagt, ersetzen Sie die $post_type = "songs" mit einfach "songs". Siehe die Dokumentation für Details zu akzeptierten Parametern.
BEARBEITEN: Ich habe die Frage falsch verstanden. Wenn ich mir Ihre Frage ansehe, ist alles so, wie es sein sollte, also würde ich woanders nach der Ursache des Problems suchen. Haben Sie Plugins oder Filter, die die Abfrage ändern könnten? Kannst du deine Abfrage direkt in der Datenbank reproduzieren und funktioniert sie dort? (um Tabellen- oder Indexkorruption auszuschließen)
Es hat nicht geholfen. Mein Problem besteht darin, die Autoren nach ihrer Post-Zählung in der DESC-Reihenfolge zu ordnen. Mit dem aktuellen Code erhalte ich die Anzahl der Beiträge jedes einzelnen Autors.
– der König
5. November 2020 um 14:42 Uhr
Du hast Recht, ich habe den Punkt deiner Frage völlig verfehlt. Ist die Beitragszählung korrekt? Können Sie dieselbe Abfrage direkt in der Datenbank durchführen und korrekte Ergebnisse erhalten?
Wie andere vorgeschlagen haben, gibt es einige Gründe, warum dies möglicherweise nicht so funktioniert, wie Sie es erwarten. Einer ist, dass Ihre Abfrage von einem anderen Plugin geändert wird. Ein weiterer Grund ist, dass die Abfrage in Ordnung ist, aber der post_count nicht Ihren Erwartungen entspricht. Um den Dingen auf den Grund zu gehen, müssen Sie genau sehen, was mit Ihrer Abfrage los ist.
Installieren und aktivieren Sie das Query Monitor-Plugin. Laden Sie die Seite, auf der Ihre Abfrage ausgeführt wird, und öffnen Sie dann die Ausgabe des Abfragemonitors. Schauen Sie unter Abfragen nach und scrollen Sie nach unten, um Ihre zu finden. Das zeigt Ihnen die Abfrage, die WordPress ausführt. Überprüfen Sie es und stellen Sie sicher, dass es Ihren Erwartungen entspricht.
Wenn die Abfrage geändert wurde, beginnen Sie mit der Deaktivierung von Plugins, bis Sie den Übeltäter gefunden haben.
Wenn die Abfrage korrekt ist, kopieren Sie sie, gehen Sie zu Ihrer Datenbank (phpmyadmin oder was auch immer Sie verwenden) und führen Sie sie selbst aus. Sie sehen die Ergebnisse direkt aus der Datenbank und es sollte offensichtlich sein, warum die Reihenfolge der Datensätze nicht Ihren Erwartungen entspricht.
13704200cookie-checkOrdnen Sie die WordPress-Autoren nach der Anzahl der veröffentlichten benutzerdefinierten Beiträgeyes
Nur zur Bestätigung – sagen Sie vor Ihrer for-Schleife, dass diese Abfrage nicht nach post_counts sortiert? Wenn Sie diese Abfrage direkt in Ihrer DB ausführen, ist das Ergebnis anders?
– Pat
21. Oktober 2021 um 8:55 Uhr
Nicht direkt in DB getestet.
– der König
21. Oktober 2021 um 12:26 Uhr
Ich habe gerade die gleiche Anfrage mit versucht get_users() und diese Parameter mit WordPress 5.8.1 und es hat perfekt funktioniert. Ich habe überprüft, wie die Abfrage im Quellcode vorbereitet ist: Es ist ein riesiges Durcheinander, aber die von Ihnen übergebenen Optionen werden korrekt berücksichtigt.
– Lagart
24. Oktober 2021 um 19:06 Uhr