在 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中文網其他相關文章!