1

我在 WordPress 中的 Users 表中添加了一个自定义列,名为Security Answer。我想让这个列可排序,所以我最终得到了这段代码:

function trucklesoft_my_sortable_cake_column( $columns ) {
    $columns['security_answer'] = 'Security Answer';

    return $columns;
}
add_filter( 'manage_users_sortable_columns', 'trucklesoft_my_sortable_cake_column' );

我现在可以单击列标题,它似乎进行了某种排序,但它不起作用。

这是一个基于文本的列,列中的某些项目是空的,但我希望它能够对 AZ 时尚或 ZA 时尚进行排序,但它不会。

如何实现排序逻辑?

4

1 回答 1

1

您的代码仅将该列注册为可排序的,因此管理表标题包含必要的标记。

但是排序逻辑没有实现。你需要这样的东西:

add_action( 'pre_get_users', 'trucklesoft_security_orderby' );
function trucklesoft_security_orderby( $query ) {
    if( ! is_admin() || ! current_user_can( 'edit_user' ) )
        return;

    $orderby = $query->get( 'orderby');

    if( 'security_answer' == $orderby ) {
        $query->set('meta_key','security_answer');
        $query->set('orderby','meta_value');
    }
}

自从我做 WP 以来已经有一段时间了,所以你可能需要稍微调整一下代码。而且我假设您的“security_answer”确实是一个自定义 postmeta。

于 2019-11-19T14:08:42.703 回答