📅  最后修改于: 2023-12-03 15:06:43.946000             🧑  作者: Mango
在 WordPress 中,我们经常需要在文章或页面列表中显示自定义列。例如,我们可能需要显示文章或页面的某些元数据,如作者、日期和标签。
使用 posts_custom_column
钩子,我们可以很容易地添加自定义列。然而,默认情况下,这些自定义列是不可排序的,这给用户带来了一些不便。
幸运的是,我们可以使用 manage_{$post_type}_posts_columns
和 manage_{$post_type}_sortable_columns
这两个钩子来使这些自定义列可排序。
// 添加自定义列
add_filter( 'manage_post_posts_columns', 'my_custom_columns' );
function my_custom_columns( $columns ) {
$columns['my_column'] = 'My Column';
return $columns;
}
// 显示自定义列内容
add_action( 'manage_posts_custom_column', 'my_custom_column_content', 10, 2 );
function my_custom_column_content( $column, $post_id ) {
if ( 'my_column' === $column ) {
echo get_post_meta( $post_id, 'my_meta_key', true );
}
}
// 使自定义列可排序
add_filter( 'manage_edit-post_sortable_columns', 'my_sortable_columns' );
function my_sortable_columns( $sortable_columns ) {
$sortable_columns['my_column'] = 'my_column';
return $sortable_columns;
}
// 处理排序
add_action( 'pre_get_posts', 'my_column_orderby' );
function my_column_orderby( $query ) {
if ( ! is_admin() || ! $query->is_main_query() ) {
return;
}
$orderby = $query->get( 'orderby' );
if ( 'my_column' === $orderby ) {
$query->set( 'meta_key', 'my_meta_key' );
$query->set( 'orderby', 'meta_value' );
}
}
在上面的代码中,我们首先使用 manage_post_posts_columns
钩子添加了一个名为 my_column
的自定义列。接下来,我们使用 manage_posts_custom_column
钩子显示自定义列的内容。
然后,我们使用 manage_edit-post_sortable_columns
钩子使自定义列可排序。最后,我们使用 pre_get_posts
钩子处理排序。在这个钩子中,我们首先判断是否在后台管理界面中,然后判断是否是主查询。接下来,我们检查是否按照 my_column
列进行排序。如果是,我们设置 meta_key
参数为我们要排序的 meta 键,将 orderby
参数设置为 meta_value
,这样就可以按照元数据值进行排序了。
以上就是让 posts_custom_column
可排序的全部过程,现在用户可以在后台管理界面中按照自定义列进行排序了!