我知道这个问题可能已经被问过很多次了,但我已经尝试了这么多假设的解决方案,到目前为止,似乎什么都没有奏效。
我正在使用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");
这将在正确的表中显示列,但没有可用的排序箭头。请有人帮我指出这个代码有什么问题,否则我可能会有插件冲突?
最合适的回答,由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\' );