我在媒体条目的元数据中包含了 2 个自定义列,称为“摄影师”和“版权”。我已经在媒体库的管理视图中包含了这两个列,并使它们可排序。但是当我按其中一个排序时,结果会排除该列中具有 NULL 值的条目
将自定义字段添加到管理面板媒体视图
//Custom columns in Media Admin view
add_filter('manage_media_columns', 'media_additional_columns', 1);
function media_additional_columns($defaults){
$defaults['photographer'] = __('Photographer');
$defaults['copyright'] = __('Copyright');
return $defaults;
}
//Fill Custom Media Admin Columns with content
add_action('manage_media_custom_column', 'media_custom_columns_attachment_id', 1, 2);
function media_custom_columns_attachment_id($column_name, $post_id){
switch ( $column_name ) {
case 'photographer':
echo get_post_meta( $post_id, 'photographer', true );
break;
case 'copyright':
echo get_post_meta( $post_id, 'copyright', true );
break;
}
}
使管理面板媒体视图中的自定义列可排序
//make custom columns sortable
//add custom columns to array sortable columns
add_filter('manage_upload_sortable_columns', 'as_add_custom_column_sortable');
function as_add_custom_column_sortable($columns) {
$columns['photographer'] = 'photographer';
$columns['copyright'] = 'copyright';
return $columns;
}
//alter the post query in case stuff gets sorted by custom columns
add_action( 'pre_get_posts', 'as_custom_column_orderby' );
function as_custom_column_orderby( $query ) {
if( ! is_admin() || ! $query->is_main_query() ) {
return;
}
switch ($query->get( 'orderby')) {
case 'photographer':
$query->set( 'orderby', 'meta_value' );
$query->set( 'meta_key', 'photographer' );
break;
case 'copyright':
$query->set( 'orderby', 'meta_value' );
$query->set( 'meta_key', 'copyright' );
break;
}
}
我想在排序表中包含具有 NULL 值的条目,在具有非 NULL 值的条目之后。
我发现这篇文章为帖子和用户回答了同样的问题。我认为适用于帖子的答案也适用于媒体,因为媒体基本上是附件类型的帖子,但事实并非如此,我的媒体库完全是空的。
我刚开始使用php,非常感谢帮助!