按值对自定义管理列进行排序

时间:2016-09-11 作者:Alexander Dolgopolskiy

我得到了一个自定义帖子类型,并将自定义帖子(杂志的问题)链接到与ACF有关系的主要帖子(文章)。我注册了一个自定义管理列,以显示链接到文章列表中文章的问题。我回显自定义(发布)帖子中使用的两个ACF的值-发布编号和发布年份,以指定自定义帖子,如“2016-04”:

function add_linked_issue_posts_admin_column($column) {
    $column[\'linked_issue_post\'] = \'Issue number\';

    return $column;
}

add_filter(\'manage_posts_columns\', \'add_linked_issue_posts_admin_column\');

function add_linked_issue_post_admin_column_show_value($column_name, $post_ID) {
    if ($column_name == \'linked_issue_post\') {
        $posts = get_field( \'article_issue_n\', $post_ID );
        if( $posts ):
            foreach( $posts as $post): 
                setup_postdata($post);
                $issue_n = get_field(\'issue_number_cf\', $post->ID);
                $issue_y = get_field(\'issue_year\', $post->ID);
                echo \'\'.$issue_y.\'-\'.$issue_n.\'\';
            endforeach;
            wp_reset_postdata();
        endif;
    }
}

add_action(\'manage_posts_custom_column\', \'add_linked_issue_post_admin_column_show_value\', 10, 2);

function linked_issue_post_columng_make_sortable($columns)
{
    $columns[\'linked_issue_post\'] = \'linked_issue_post\';

    return $columns;
}

add_filter("manage_edit-post_sortable_columns", "linked_issue_post_columng_make_sortable" );
而且效果很好。但该列未按回显值排序。我的意思是,我希望该列按字母/数字顺序按ASC或DESC排序,以便2016-04期的发行号在2016-03期之后。尝试了许多筛选器,但仍然没有结果。非常感谢!

1 个回复
最合适的回答,由SO网友:Alexander Dolgopolskiy 整理而成

啊,补救办法很简单:

function issue_column_orderby( $vars ) {
    if ( isset( $vars[\'orderby\'] ) && \'linked_issue_post\' == $vars[\'orderby\'] ) {       
        $vars = array_merge( $vars, array(
            \'meta_key\' => \'article_issue_n\',
            \'orderby\' => \'meta_value\'
        ) );
    }

    return $vars;
}
add_filter( \'request\', \'issue_column_orderby\' );
我以前可能遗漏了什么。。。

相关推荐