WordPress管理帖子表中自定义列的排序

时间:2015-11-11 作者:soup-bowl

我知道这个问题可能已经被问过很多次了,但我已经尝试了这么多假设的解决方案,到目前为止,似乎什么都没有奏效。

我正在使用Advanced Custom Fields 创建自定义下拉字段的插件,名为statuses 自定义帖子类型st_kb. 创建了该字段后,我成功地获得了一个列,该列显示在仪表板的admin post部分,其中包含该字段。然而,我希望这是可排序的,到目前为止,我一直无法让它工作。

这是我当前的代码:

function add_column($cols) {
    $cols[\'bkb_status\'] = \'Status\';
    return $cols;
}

function add_sort_register_sortable($cols) {
    $cols[\'bkb_status\'] = \'statuses\';
    return $cols;
}

function my_custom_columns($column) {
    global $post;

    if ($column == \'bkb_status\') {
        if (get_field(\'statuses\') != false) {
            echo get_field(\'statuses\');
        } else {
            echo \'Not set\';
        }   
    }
}

add_action("manage_st_kb_posts_custom_column", "my_custom_columns");
add_filter("manage_st_kb_posts_columns", "add_column");
add_filter("manage_st_kb_posts_sortable_columns", "add_sort_register_sortable");
这将在正确的表中显示列,但没有可用的排序箭头。请有人帮我指出这个代码有什么问题,否则我可能会有插件冲突?

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

过滤器名称有点不可用manage_edit-st_kb_sortable_columns. 至于实际排序不起作用,您需要自己实现逻辑:

function wpse_208315_sort_by_status( $query ) {
   if ( $query->is_main_query() && $query->get( \'orderby\' ) === \'statuses\' ) {
        $query->set( \'meta_key\', \'status\' /* Post meta field name of status */ );
        $query->set( \'orderby\', \'meta_value\' );
   }
}

add_action( \'pre_get_posts\', \'wpse_208315_sort_by_status\' );

相关推荐

Sorting Posts by custom field

我正在尝试按自定义字段对帖子进行排序artwork_title. 当我使用下面的代码时,我只会得到一个特定类别的帖子,无论我在哪个类别的存档中。此外,分页显示正确的页数,但转到下一页时始终显示相同的帖子集。有人知道我做错了什么吗?<?php $query = new WP_Query( array( \'posts_per_page\' => 20, \'orderby\' => \'meta_value\',