Wenn ich einen meiner benutzerdefinierten Beitragstypen bearbeite, möchte ich in der Lage sein, alle Einträge nach einem benutzerdefinierten Feld anstelle des Veröffentlichungsdatums aufzulisten (was für einen benutzerdefinierten Beitragstyp wahrscheinlich nicht relevant ist). Die Kommentare eines Blogposts zu benutzerdefinierten Post-Typen haben mir einen Hinweis gegeben, und der Autor sagte, dass dies möglich sei und dass er es sogar erstellt habe, damit Sie auf die Spaltennamen klicken können, um eine benutzerdefinierte Sortierung vorzunehmen. Er erwähnte die posts_orderby
Funktion, die ich in meinen eigenen Kommentaren vermerkte, aber jetzt kann ich den Blog-Beitrag nicht mehr finden. Irgendwelche Vorschläge? Ich sah eine Lösung, die verwendet wurde
add_action('wp', 'check_page');
Und die check_page
Funktion add_filter
zum Ändern der Abfrage, aber ich bin mir ziemlich sicher, dass sie nur in den Designdateien funktioniert, nicht im Administrationsbereich.
quelle
Antworten:
Wie Sie sich aufgrund der fehlenden Antworten wahrscheinlich vorstellen können, ist die Lösung nicht gerade trivial. Was ich getan habe, ist ein etwas eigenständiges Beispiel zu erstellen, das einen benutzerdefinierten Beitragstyp "
movie
" und einen benutzerdefinierten Feldschlüssel " Genre " voraussetzt .Haftungsausschluss : Dies funktioniert mit WP3.0, aber ich kann nicht sicher sein, ob es mit früheren Versionen funktioniert.
Grundsätzlich müssen Sie zwei (2) Haken einhaken, damit es funktioniert, und zwei (2) weitere, um es offensichtlich und nützlich zu machen.
Der erste Haken ist "
restrict_manage_posts
", mit dem Sie einen HTML-Code<select>
im Bereich über der Liste der Beiträge ausgeben können, in denen die Filter " Massenaktionen " und " Datumsangaben anzeigen " verwendet werden. Der bereitgestellte Code generiert die Funktion " Sortieren nach: ", wie in diesem Bildschirmausschnitt dargestellt:(Quelle: mikeschinkel.com )
Der Code verwendet direktes SQL, da es keine WordPress-API-Funktion gibt, mit der die Liste aller meta_keys für einen Beitragstyp bereitgestellt werden kann (das klingt für mich wie ein zukünftiges Trac- Ticket ...). Beachten Sie, dass der Post-Typ
$_GET
abgerufen und validiert wird, um sicherzustellen, dass er sowohl ein gültiger Post-Typpost_type_exists()
als auch einmovie
Post-Typ ist. Code den Beitragstyp.) Zuletzt verwende ich densortby
URL-Parameter, da er mit nichts anderem in WordPress in Konflikt steht:Der zweite erforderliche Schritt ist die Verwendung des
parse_query
Hooks, der aufgerufen wird, nachdem WordPress entschieden hat, welche Abfrage ausgeführt werden soll, bevor die Abfrage ausgeführt wird. Hier setzen wir Werte vonorderby
undmeta_key
imquery_var
Array der Abfrage, die im Codex imorderby
Parameter für dokumentiert sindquery_posts()
. Wir testen, um sicherzustellen, dass:is_admin()
),$pagenow=='edit.php'
) auflistet ,post_type
URL-Parameter aufgerufen, der gleichmovie
und istsortby
URL-Parameter aufgerufen und es wurde kein Wert von ' None ' übergeben.Wenn all diese Tests erfolgreich sind, setzen wir das
query_vars
(wie hier dokumentiert ) aufmeta_value
und unserensortby
Wert für ' Genre ':Und das ist alles, was Sie tun müssen. Keine "
posts_order
" oder "wp
" Haken erforderlich! Natürlich müssen Sie tatsächlich mehr tun. Sie müssen einige Spalten auf Ihrer Seite hinzufügen, in denen die Beiträge aufgelistet sind, damit Sie tatsächlich die Werte sehen können, nach denen sortiert wird. Andernfalls werden die Benutzer sehr verwirrt. Fügen Siemanage_{$post_type}_posts_columns
in diesem Fall einen Haken hinzumanage_movie_posts_columns
. Diesem Hook wird das Standard-Array von Spalten übergeben. Der Einfachheit halber habe ich es durch zwei Standardspalten ersetzt. ein Kontrollkästchen (cb
) und einen Beitragsnamen (title
). (Sie könnenposts_columns
mit einem prüfenprint_r()
, was standardmäßig noch verfügbar ist.)Ich habe beschlossen, ein " Sortiert nach: " hinzuzufügen, wenn ein
sortby
URL-Parameter vorhanden ist und wenn dies nicht der Fall istNone
:Schließlich verwenden wir den
manage_pages_custom_column
Haken, um den Wert tatsächlich anzuzeigen, wenn es einen Beitrag des entsprechenden Beitragstyps gibt und mit dem wahrscheinlich redundanten Test füris_admin()
und$pagenow=='edit.php'
. Wenn es einensortby
URL-Parameter gibt, extrahieren wir den benutzerdefinierten Feldwert, der sortiert wird, indem er in unserer Liste angezeigt wird. Hier ist, wie es aussieht (denken Sie daran, dies sind Testdaten, also keine Kommentare aus der Erdnussgalerie zu den Filmklassifizierungen! :):(Quelle: mikeschinkel.com )
Und hier ist der Code:
Beachten Sie, dass dies nur das erste " Genre " für a
movie
aufnimmt, dh den ersten meta_value bei mehreren Werten für einen bestimmten Schlüssel. Aber andererseits bin ich mir nicht sicher, wie es sonst funktionieren würde!Und für diejenigen, die nicht wissen, wo dieser Code abgelegt werden soll, können Sie ihn in ein Plugin einfügen oder eher für den Neuling in der
functions.php
Datei Ihres aktuellen Themas.Wie das hilft.
quelle
'months_dropdown_results'
und sind'restrict_manage_posts'
. PS Upvotes sind immer willkommen. :)Ab WordPress 3.1 (ich benutze die Beta) können Spalten nun über ihre Titel sortiert werden.
Im folgenden Beitrag erfahren Sie, wie Sie diese implementieren.
http://scribu.net/wordpress/custom-sortable-columns.html
quelle
Hier ist eine einfache Lösung:
Ersetzen Sie einfach IHREN POST-TYP und "your_custom_field"
quelle