我有两种自定义帖子类型,authors
和works
.
我有一个自定义字段选择菜单,works
其中加载所有帖子标题authors
作为数据源,因此我可以将作者与其作品相关联,然后将作者标题加载到单个作品模板和自定义管理列中。
我为帖子填充了一个自定义管理列,works
其标题来自authors
. 我想不通的是如何对这列标题进行排序,$query->set('orderby'
因为 meta_key 和 meta_key 值来自authors
自定义帖子类型,而我在works
帖子类型列表中。
我尝试使用get_post_meta
,get_post_field
但我认为在对列进行排序的阶段,它不知道哪个 meta_key 与author
已加载到列中的标题相关联。
经过几个小时的修补,在这一点上被难住了。任何意见,将不胜感激。
获取作者头衔
function works_parent_author($post_id) {
$author_id = $post_id ? get_post_field('wrks_author', $post_id) : '';
$author = get_the_title($author_id);
return $author;
}
将作者标题添加到 Works 管理列
function works_populate_custom_columns( $column, $post_id ) {
if ($column == 'authors') {
$works_parent_author = works_parent_author($post_id);
$author_id = $post_id ? get_post_field('wrks_author', $post_id) : '';
$author_link = get_edit_post_link($author_id);
echo $works_parent_author . ' <a class="admin-works-author" href="' . $author_link .'"> edit </a>';
}
排序功能(不能让它为作者列工作)
add_filter( 'pre_get_posts', 'works_sort_columns_by');
function works_sort_columns_by( $query ) {
if( ! is_admin() ) {
return;
}
$orderby = $query->get( 'orderby');
switch ( $orderby )
{
case 'authors':
$query->set( 'meta_key', 'doss_sort' ); // <- this is the meta key in the authors post type I need to sort by
$query->set( 'orderby', 'meta_value' );
break;
case 'type':
$query->set( 'meta_key', 'wrks_format' );
$query->set( 'orderby', 'meta_value' );
break;
}
}