确保更改MY_POST_TYPE
, MY_CUSTOM_COLUMN
和MY_META_KEY
实际值。
首先,添加自定义列。取消设置日期并再次设置以将其保留在最后一列中。您可以跳过此步骤。
<?php
function my_manage_MY_POST_TYPE_columns( $columns )
{
// save date to the variable
$date = $columns[\'date\'];
// unset the \'date\' column
unset( $columns[\'date\'] );
// unset any column when necessary
// unset( $columns[\'comments\'] );
// add your column as new array element and give it table header text
$columns[\'MY_CUSTOM_COLUMN\'] = __(\'Custom Column Header Text\');
$columns[\'date\'] = $date; // set the \'date\' column again, after the custom column
return $columns;
}
?>
其次,使用
manage_edit-{$post_type}_sortable_columns
过滤器(尚未记录)。
<?php
function my_set_sortable_columns( $columns )
{
$columns[\'MY_CUSTOM_COLUMN\'] = \'MY_CUSTOM_COLUMN\';
return $columns;
}
?>
第三,填充列单元格。
<?php
function my_populate_custom_columns( $column, $post_id )
{
switch ( $column ) {
case \'MY_CUSTOM_COLUMN\':
echo get_post_meta($post_id, \'MY_META_KEY\', true);
break;
case \'MAYBE_ANOTHER_CUSTOM_COLUMN\':
// additional code
break;
}
}
?>
现在可以对该列进行实际排序了。
注意:如果不检查meta_query
对于空(不存在)值,您的列将仅显示具有(非空)元值的帖子,直到默认情况下按另一列或另一列排序为止
<?php
function my_sort_custom_column_query( $query )
{
$orderby = $query->get( \'orderby\' );
if ( \'MY_CUSTOM_COLUMN\' == $orderby ) {
$meta_query = array(
\'relation\' => \'OR\',
array(
\'key\' => \'MY_META_KEY\',
\'compare\' => \'NOT EXISTS\', // see note above
),
array(
\'key\' => \'MY_META_KEY\',
),
);
$query->set( \'meta_query\', $meta_query );
$query->set( \'orderby\', \'meta_value\' );
}
}
?>
现在让我们应用过滤器和操作。检查您是否位于右侧页面的前端,并选择了正确的帖子类型:
<?php
global $pagenow;
if ( is_admin() && \'edit.php\' == $pagenow && \'MY_POST_TYPE\' == $_GET[\'post_type\'] ) {
// manage colunms
add_filter( \'manage_MY_POST_TYPE_posts_columns\', \'my_manage_MY_POST_TYPE_columns\' );
// make columns sortable
add_filter( \'manage_edit-MY_POST_TYPE_sortable_columns\', \'my_set_sortable_columns\' );
// populate column cells
add_action( \'manage_MY_POST_TYPE_posts_custom_column\', \'my_populate_custom_columns\', 10, 2 );
// set query to sort
add_action( \'pre_get_posts\', \'my_sort_custom_column_query\' );
}
?>