Heim  >  Artikel  >  Backend-Entwicklung  >  Kurztipp: Aktivieren Sie sortierbare benutzerdefinierte Spalten

Kurztipp: Aktivieren Sie sortierbare benutzerdefinierte Spalten

WBOY
WBOYOriginal
2023-09-01 17:45:13569Durchsuche

Kurztipp: Aktivieren Sie sortierbare benutzerdefinierte Spalten

In einem aktuellen Beitrag von Claudio Simeone zeigte er, wie man einem Beitrag zusätzliche Spalten hinzufügt oder den Beitragstyp und den Admin-Bildschirm anpasst (oder einen vorhandenen löscht). In diesem kurzen Tipp baue ich darauf auf und zeige Ihnen, wie Sie eine neu erstellte Spalte sortierbar machen.


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

manage_{$screen->id}_sortable_column

Für Beiträge und Seiten sind $screen->idedit-post“ bzw. „edit-page“. Im Allgemeinen ist es für einen Beitragstyp mit dem Namen „mein-Beitragstyp“ „meinen-Beitragstyp-bearbeiten“.

Dem Filter wird ein Array mit den Namen der sortierbaren Spalten als Schlüssel und der Sortierung nach als Werten übergeben. Genauer gesagt zeigen diese Werte an, dass der Parameter „orderby“ in der Abfrage festgelegt ist, die die Tabelle füllt. Genauso wie das Entfernen einer Spalte können Sie eine Spalte auch „unsortierbar“ machen, indem Sie sie aus diesem Array entfernen. Sehen wir uns ein Beispiel an:


Registrierungsspalte

Laut Claudios Artikel können wir Folgendes tun, vorausgesetzt, wir haben die Spalte „Slice“ zum Beitragstyp „Cake“ hinzugefügt:

add_filter('manage_edit-cake_columns', 'my_extra_cake_columns');
function my_extra_cake_columns($columns) {
	$columns['slices'] =__('Slices','myplugindomain');
	return $columns;
}

Wir haben der Spalte Folgendes hinzugefügt:

add_action( 'manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2 );
function my_cake_column_content( $column_name, $post_id ) {
	if ( 'slices' != $column_name )
		return;
	//Get number of slices from post meta
	$slices = get_post_meta($post_id, 'slices', true);
	echo intval($slices);
}

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


Spalten sortierbar machen

Jetzt registrieren wir die benutzerdefinierte Spalte als „sortierbar“. Wie oben erwähnt, verwenden wir den Filter manage_{$screen->id}_sortable_column. Das manage_{$screen->id}_sortable_column 过滤器。本例中的 $screen->id ist in diesem Fall „edit-cake“.

add_filter( 'manage_edit-cake_sortable_columns', 'my_sortable_cake_column' );
function my_sortable_cake_column( $columns ) {
	$columns['slices'] = 'slice';

	//To make a column 'un-sortable' remove it from the array
	//unset($columns['date']);

	return $columns;
}
Die Schlüssel des

$columns-Arrays stellen sortierbare Spalten dar und ihre Werte teilen WordPress mit, worauf „$columns 数组的键表示可排序列,其值告诉 WordPress 在查询中将 'orderby' 设置为什么。如果该值是 WordPress 本身理解的 'orderby 之一(这些值包括 'title'、'date'、'modified'、'comment_count',或者确实是下面列出的任何其他值WordPress Codex 中的 WP_Query)我们可以到此为止。此规则的例外情况(如本例所示)是 'meta_value' 和 'meta_value_num“ in Abfragen gesetzt werden soll. Wenn der Wert einer von „

“ ist, den WordPress selbst versteht (diese Werte umfassen „title“, „date“, „modified ', ' comment_count' oder tatsächlich jeder andere unten aufgeführte Wert für WP_Query im WordPress-Codex) Wir können hier aufhören. Die Ausnahmen von dieser Regel (wie in diesem Beispiel gezeigt) sind die Parameter „meta_value“ und „meta_value_num“, für die wir ebenfalls einen Metaschlüssel festlegen müssen.

pre_get_posts 操作。这传递了一个我们可以修改的查询对象。请注意,所有默认查询(正面和背面)都会触发此操作。虽然它不太可能引起任何问题,但除非您希望 WordPress 在前端也将 orderbyWenn wir nach Metawert oder auf andere Weise sortieren möchten, die WordPress nicht automatisch versteht, müssen Sie ihm mitteilen, was die Sortierung nach „Slice“ bedeutet. Wenn Sie über Post-Meta bestellen, ist es am einfachsten, sich in die Aktion pre_get_posts einzubinden. Dadurch wird ein Abfrageobjekt übergeben, das wir ändern können. Beachten Sie, dass alle Standardabfragen (vorne und hinten) diese Aktion auslösen. Obwohl es unwahrscheinlich ist, dass es zu Problemen kommt, es sei denn, Sie möchten, dass WordPress

auch im Frontend auf „Slices“ setzt, ist es am besten, nur Abfragen auf der Admin-Seite zu beeinflussen.

add_action( 'pre_get_posts', 'my_slice_orderby' );
function 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');
	}
}
meta_value' 而不是 'meta_value_numHiermit wird überprüft, ob unsere Abfrage nach „Slice“ sortiert ist, und wenn ja, weist es WordPress an, numerisch nach dem Wert des „Slice“-Post-Meta zu sortieren. Wenn Sie die Werte alphabetisch sortieren möchten, verwenden Sie „

“.

$query 是一个 WP_Query 对象,因此您可以使用该对象对任何内容进行排序,您也可以对列进行排序。对于其他更复杂的事情,您需要挂钩 posts_orderby (或 post_clauses

) Haken, aber das würde den Rahmen dieses kurzen Tipps sprengen.

Hinweis:

Wenn ein Beitrag keinen Wert für diesen Metaschlüssel speichert, wird der Beitrag nicht angezeigt, wenn Sie nach diesem Metaschlüssel sortieren. Dies unterscheidet sich von Beiträgen, die 0 als Metawert speichern. 🎜

Das obige ist der detaillierte Inhalt vonKurztipp: Aktivieren Sie sortierbare benutzerdefinierte Spalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn