对用户wp-admin中的新列进行排序

时间:2021-11-08 作者:AFM

我在用户管理选项卡中创建了一个新列,名为;列表;。每一行都是一个数字,表示用户有多少个列表。

//// ADD THE NEW COLUMN
add_filter( \'manage_users_columns\', \'add_listing_count_column\' );
function add_listing_count_column( $columns ) {
    $columns[\'Listings\'] = \'Listings\'; // 
    return $columns;}


// FILL THE NEW COLUMN
add_filter( \'manage_users_custom_column\', \'add_listing_count_column_row\', 10, 3 );
function add_listing_count_column_row( $row_output, $column_id_attr, $user_id ) {
if ( $column_id_attr == \'Listings\') {
        return count_user_posts( $user_id, \'job_listing\' );
    }
    return $row_output;}

我想对该列进行排序。。但它一直按用户名排序。。。知道会是什么吗?

// MAKE THE NEW COLUMN SORTABLE
add_filter( \'manage_users_sortable_columns\', \'add_listing_count_column_sortable\',10,3 );
function add_listing_count_column_sortable( $columns ) {
    return wp_parse_args( array( \'Listings\' => \'Listings\' ), $columns );
}

 add_action( \'pre_get_users\', \'smartwp_sort_last_login_column\' );
function smartwp_sort_last_login_column( $query ) {
    if ( ! is_admin() ) {
        return $query;
    }
     $screen = get_current_screen();
    if ( isset( $screen->id ) && $screen->id !== \'users\' ) {
        return $query;
    }
     if ( isset( $_GET[ \'orderby\' ] ) && $_GET[ \'orderby\' ] == \'Listings\' ) {
        $query->query_vars[\'orderby\'] = \'post_count\';
    }
     return $query;
}


谢谢你

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

如果orderby 等于post_count, WordPress将always work with posts from the default post type post. 您可以做的是,尝试修改that part of the query 对于此特定情况。

像这样的方法应该会奏效:

add_filter( \'query\', \'smartwp_sort_last_login_column_query\' );
function smartwp_sort_last_login_column_query( $query ) {
    if ( ! is_admin() ) {
        return $query;
    }

    $orderby = isset( $_GET[ \'orderby\' ] ) ? $_GET[ \'orderby\' ] : false;

    if ( $orderby !== \'Listings\' ) {
        return $query;
    }

    if ( stripos( $query, \'SELECT post_author, COUNT(*) as post_count\' ) !== false ) {
        $query = str_replace( \'( post_type = \\\'post\\\' AND\', \'( post_type = \\\'job_listing\\\' AND\', $query );
    }

    return $query;
}
这样做的目的是告诉WordPress从自定义帖子类型中统计帖子数量job_listing. 请注意,这只适用于您的具体情况。

确保对其进行全面测试,因为这是query 钩子,在上执行every WordPress生成的数据库查询。

相关推荐

PHP警告:试图读取bool上的属性“Term_id”

自从从PHP 7.4更新到PHP 8以来,我的error_log 现在,我使用的一个儿童主题中充满了这样的行:【2021 10月17日13:30:38 UTC】PHP警告:尝试读取属性;term\\u id;在bool-in/public\\u html/wp内容/主题/主题名子项/函数。php在线181这是抛出错误的块。它用于修改分页,以便不导航特定类型(链接)的帖子。// modify pagination to exclude post_format of \'link\' on news/blog