Schneller Tipp Machen Sie Ihre benutzerdefinierte Spalte sortierbar

In einem kürzlich erschienenen Artikel von Claudio Simeone hat er gezeigt, wie Sie Ihrem Beitrag zusätzliche Spalten hinzufügen oder benutzerdefinierte Post-Typ-Verwaltungsbildschirme hinzufügen (oder vorhandene entfernen). In diesem kurzen Tipp baue ich darauf auf, wie Sie Ihre neu erstellten Spalten sortierbar machen.


Um WordPress mitzuteilen, welche Spalten Sie als sortierbar registrieren möchten, benötigen Sie diesen Filter:

 _ $ screen-> id _sortable_column verwalten

Für Beiträge und Seiten, $ screen-> id ist 'Beitrag bearbeiten' und 'Seite bearbeiten' beziehungsweise. Im Allgemeinen für einen Beitragstyp mit Namen 'mein-post-typ', es ist 'edit-mein-post-typ'.

Der Filter übergibt ein Array mit den Namen sortierbarer Spalten als Schlüssel und dem Wert, nach dem sortiert werden soll. Genauer gesagt, die Werte bestimmen, wasSortieren nach'Parameter wird wie in der Abfrage festgelegt, die die Tabelle auffüllt. Auf dieselbe Weise, wie Sie Spalten entfernen können, können Sie Spalten auch "unsortierbar" machen, indem Sie sie aus diesem Array entfernen. Sehen wir uns ein Beispiel an:


Registrieren Sie eine Spalte

Nehmen wir an, dass wir nach Claudios Artikel die Spalte "Slices" zu unserem "Cake" -Post-Typ hinzugefügt haben, was wir wie folgt tun können:

 add_filter ('manage_edit-cake_columns', 'my_extra_cake_columns'); function my_extra_cake_columns ($ columns) $ column ['slices'] = __ ('Slices', 'myplugindomain'); $ spalten zurückgeben; 

Und wir haben den Inhalt für die Spalte wie folgt hinzugefügt:

 add_action ('manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2); Funktion my_cake_column_content ($ column_name, $ post_id) if ('slices'! = $ column_name) return; // Anzahl der Slices vom Post-Meta abrufen $ slices = get_post_meta ($ post_id, 'slices', true); Echo Intval ($ Scheiben); 

Ich habe Slices als Post-Meta gespeichert, aber Ihre Spalten können mit anderen Daten gefüllt werden.


Machen Sie eine Spalte sortierbar

Jetzt registrieren wir unsere benutzerdefinierte Spalte als "sortierbar". Wie oben erwähnt verwenden wir die _ $ screen-> id _sortable_column verwalten Filter. Das $ screen-> id in diesem Fall ist 'Kuchen bearbeiten'.

 add_filter ('manage_edit-cake_sortable_columns', 'my_sortable_cake_column'); function my_sortable_cake_column ($ columns) $ columns ['slices'] = 'slice'; // Um ​​eine Spalte "nicht sortierbar" zu machen, entfernen Sie sie aus dem Array // unset ($ columns ['date']); $ spalten zurückgeben; 

Der Schlüssel des $ Spalten Array zeigt eine sortierbare Spalte an, und ihr Wert teilt WordPress mit, was eingestellt werden soll.Sortieren nach'in der Abfrage. Wenn dieser Wert einer der 'warSortieren nachist von WordPress nativ verstanden (dazu gehören 'Titel','Datum','geändert','Anzahl Kommentare'oder auch alle anderen, die unter WP_Query im WordPress-Codex aufgeführt sind), könnten wir hier aufhören. Die Ausnahme zu dieser Regel ist, wie in diesem Beispiel, das 'meta_value' und 'meta_value_num'Parameter, für die wir auch einen Metaschlüssel festlegen müssen.

Wenn Sie nach einem Meta-Wert oder auf andere Weise sortieren möchten, kann WordPress nicht automatisch verstehen, was Sie meinen, indem Sie es mit "Slice" bestellen. Wenn Sie per Post-Meta bestellen, ist der einfachste Weg, dies zu tun, indem Sie sich an das Postfach haken pre_get_posts Aktion. Dies übergibt ein Abfrageobjekt, das wir ändern können. Beachten Sie, dass diese Aktion für alle Standardabfragen (Vorder- und Rückseite) ausgelöst wird. Es ist unwahrscheinlich, dass Probleme auftreten, es sei denn, Sie möchten WordPress interpretieren Sortieren nach Wenn das Frontend ebenfalls auf "Slice" eingestellt ist, sollten Sie nur Abfragen auf der Administratorseite durchführen.

 add_action ('pre_get_posts', 'my_slice_orderby'); Funktion my_slice_orderby ($ query) if (! is_admin ()) return; $ orderby = $ query-> get ('orderby'); if ('slice' == $ orderby) $ query-> set ('meta_key', 'slices'); $ query-> set ('orderby', 'meta_value_num'); 

Dies prüft, ob unsere Abfrage nach "Slice" geordnet ist. Wenn dies der Fall ist, wird WordPress nach dem Wert des Post-Metas "Slices" numerisch geordnet. Wenn Sie den Wert alphabetisch sortieren möchten, verwenden Sie 'meta_value' eher, als 'meta_value_num'.

$ Abfrage ist ein WP_Query Objekt, also alles, was Sie mit diesem Objekt sortieren können, können Sie Ihre Spalten nach sortieren. Für alles andere, das etwas komplizierter ist, müssen Sie sich in das einhängen posts_orderby (oder post_clauses) hook, aber das ist nicht im Rahmen dieses schnellen Tipps.

Hinweis: Wenn für einen Beitrag kein Wert für diesen Metaschlüssel gespeichert ist, wird er nicht angezeigt, wenn Sie nach diesem Metaschlüssel sortieren. Dies unterscheidet sich von einem Beitrag, bei dem 0 als Metawert gespeichert ist.