首頁  >  文章  >  後端開發  >  快速技巧:啟用可排序的自訂列

快速技巧:啟用可排序的自訂列

WBOY
WBOY原創
2023-09-01 17:45:13568瀏覽

快速技巧:啟用可排序的自訂列

在 Claudio Simeone 最近發表的一篇文章中,他示範如何在貼文中新增額外的列,或自訂貼文類型、管理畫面(或刪除現有的)。在這個快速技巧中,我將在此基礎上向您展示如何使新建立的列可排序。


要告訴 WordPress 您要將哪些欄位註冊為可排序,您需要此篩選器:

manage_{$screen->id}_sortable_column

對於貼文和頁面,$screen->id 分別是「edit-post」和「edit-page」。一般來說,對於名稱為「my-post-type」的貼文類型,它是「edit-my-post-type」。

過濾器傳遞一個數組,其中可排序列的名稱作為鍵,排序依據作為值。更準確地說,這些值指示在填充表的查詢中設定「orderby」參數。與刪除列的方式相同,您也可以透過從該數組中刪除列來使列「不可排序」。讓我們來看一個例子:


註冊列

根據 Claudio 的文章,假設我們已將「切片」列新增到「蛋糕」貼文類型中,我們可以執行以下操作:

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

我們為該列新增瞭如下內容:

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);
}

我已將切片儲存為後元,但您的列可以由其他資料填入。


使列可排序

現在我們將自訂列註冊為「可排序」。如上所述,我們使用 manage_{$screen->id}_sortable_column 過濾器。本例中的 $screen->id 是「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;
}

$columns 陣列的鍵表示可排序列,其值告訴 WordPress 在查詢中將 'orderby' 設定為什麼。如果該值是WordPress 本身所理解的'orderby 之一(這些值包括'title'、'date'、'modified# '、'comment_count',或確實是下面列出的任何其他值WordPress Codex 中的WP_Query)我們可以到此為止。此規則的例外(如本例所示)是 'meta_value' 和 'meta_value_num' 參數,它們也要求我們設定元金鑰。

如果我們想按元值排序,或者透過 WordPress 無法自動理解的其他方式進行排序,您必須告訴它按「切片」排序的含義。如果您透過 post meta 訂購,最簡單的方法是掛鉤 pre_get_posts 操作。這傳遞了一個我們可以修改的查詢物件。請注意,所有預設查詢(正面和背面)都會觸發此操作。雖然它不太可能引起任何問題,但除非您希望 WordPress 在前端也將 orderby 設為“切片”,否則最好只在管理端影響查詢。

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');
	}
}

這會檢查我們的查詢是否按「切片」排序,如果是,它會告訴 WordPress 按「切片」貼文元的值進行數字排序。如果您想要按字母順序對值進行排序,請使用 'meta_value' 而不是 'meta_value_num'。

$query 是一個 WP_Query 對象,因此您可以使用該物件對任何內容進行排序,您也可以對列進行排序。對於其他更複雜的事情,您需要掛鉤 posts_orderby (或 post_clauses)掛鉤,但這超出了本快速提示的範圍。

注意:如果貼文沒有為該元鍵儲存值,那麼當您按該元鍵排序時,該貼文將不會顯示。這與將 0 儲存為元值的貼文不同。

以上是快速技巧:啟用可排序的自訂列的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn