0

我有两种自定义帖子类型,authorsworks.

我有一个自定义字段选择菜单,works其中加载所有帖子标题authors作为数据源,因此我可以将作者与其作品相关联,然后将作者标题加载到单个作品模板和自定义管理列中。

我为帖子填充了一个自定义管理列,works其标题来自authors. 我想不通的是如何对这列标题进行排序,$query->set('orderby'因为 meta_key 和 meta_key 值来自authors自定义帖子类型,而我在works帖子类型列表中。

我尝试使用get_post_metaget_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;
    }
}
4

0 回答 0