在 wp-admin 所有用户页面上显示可排序的公司列

问题描述 投票:0回答:1

我需要在 wp-admin“所有用户”页面上显示可排序的“公司”列。我正在使用 WooCommerce。我修改了下面的代码,并能够添加“公司”列并使其可排序。我可以使用以下方法用数据填充该列:

get_the_author_meta( 'user_firstname', $user ); // https://developer.wordpress.org/reference/functions/get_the_author_meta/
// I tried using company and user_company but they didn't work

get_the_author_meta 适用于许多不同的值,但我认为它不能拉取公司,因为公司是 WooCommerce 添加的默认字段。我的完整代码如下。我怎样才能展示公司?另外,如何更改这些列的顺序?我想按顺序显示用户名、姓名、公司和电子邮件。

/*
 * Create a column & remove some of the default ones
 * @param array $columns Array of all user table columns {column ID} => {column Name} 
 */
add_filter( 'manage_users_columns', 'rudr_modify_user_table' );

function rudr_modify_user_table( $columns ) {

    unset( $columns['role'] ); // Remove role column
    unset( $columns['posts'] ); // Remove posts column
    $columns['company'] = 'Company'; // Add new company column

    return $columns;

}

/*
 * Fill our new column with the company name of the users (if they have a company name in their profile)
 * @param string $row_output text/HTML output of a table cell
 * @param string $column_id_attr column ID
 * @param int $user user ID (in fact - table row ID)
 */
add_filter( 'manage_users_custom_column', 'rudr_modify_user_table_row', 10, 3 );

function rudr_modify_user_table_row( $row_output, $column_id_attr, $user ) {

    switch ( $column_id_attr ) {
        case 'company' :
            // return get_the_author_meta( 'company', $user );
            // company is not included here: https://developer.wordpress.org/reference/functions/get_the_author_meta/
            // Need to use WooCommerce to find it but below is not working:
            return get_user_meta( get_current_user_id(), 'company', true );
            break;
        default:
    }

    return $row_output;

}

/*
 * Make our "Company" column sortable
 * @param array $columns Array of all user sortable columns {column ID} => {orderby GET-param} 
 */
add_filter( 'manage_users_sortable_columns', 'rudr_make_company_column_sortable' );

function rudr_make_company_column_sortable( $columns ) {
    return wp_parse_args( array( 'company' => 'registered' ), $columns ); // This has an issue
}
php wordpress woocommerce
1个回答
0
投票
  • 请求:您可能需要将此过滤器与

    manage_users_sortable_columns
    结合使用。

    add_filter( 'request', 'company_column_orderby' );
    //Add filter to the request to make the hits sorting process numeric, not string
    function company_column_orderby( $vars ) {
        if ( isset( $vars['orderby'] ) && 'company' == $vars['orderby'] ) {
            $vars = array_merge( $vars, array(
                'meta_key' => 'company',
                'orderby' => 'meta_value_num'
            ) );
        }
        return $vars;
    }
    
    add_filter( 'manage_users_sortable_columns', 'user_sortable_columns' );
    function user_sortable_columns( $columns ) {
         $columns['company'] = 'Company';
         return $columns;
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.