Help us understand the problem. What is going on with this article?

WP-Members プラグインの Select フィールドの値を強引に取得する

WP-Members Membership プラグインで会員制サイトを作っていて
フィールドに会員レベルを作ってみたものの、値っていうところからホントに値しか
取れないのでかなり悩んだ件。

取れない左側のオプション名

下図の通り、管理者|administrator の場合
オプション名「管理者」が欲しいわけです。値は内部的なものであって、フロントに出すべきではないのです。
Screenshot_20200820[1].png

右側は普通に取れます

下のコードはユーザー一覧にカラムを追加します。
functions.php に追加するコードであることはもうご存知かと思いますが、
get_user_meta に $user_id を投げ入れて 'member_level' が欲しいと言えばくれます。
でも・・・

function add_users_columns( $columns ) {
    $columns[ 'member_level' ] = '会員レベル';
    return $columns;
}

function add_users_columns_row( $dummy, $column, $user_id ) {
    if ( $column == 'member_level' ) {
        $member_level = get_user_meta( $user_id, 'member_level', true );
        return $member_level;
    }
}

add_filter( 'manage_users_columns', 'add_users_columns' );
add_filter( 'manage_users_custom_column', 'add_users_columns_row', 10, 3 );

コレジャナイ。
会員レベルは日本語(オプション名)で表示して欲しい。
Screenshot_20200820[2].png

3時間くらいネットを彷徨った結果

公式にものすごい分かりにくいドキュメントが落ちてました。
https://rocketgeek.com/plugins/wp-members/docs/api-functions/wpmem_fields/

ふむふむ。
フィールドの設定とか配列で取得できると。これじゃん。
var_dump してみたら欲しいの見つかりました。

$fields = wpmem_fields();
var_dump($fields);

そして出来上がったのがこちらです

var_dump して配列の構造がわかってしまえば、どの要素を拾えばいいかもすぐ分かります。
|(垂直バー)で区切られているので分割して、値と get_user_meta が一致した行のオプション名を取得すれば・・・

function add_users_columns( $columns ) {
    $columns[ 'member_level' ] = '会員レベル';
    return $columns;
}

function add_users_columns_row( $dummy, $column, $user_id ) {
    if ( $column == 'member_level' ) {
        $member_level = get_user_meta( $user_id, 'member_level', true );
        foreach ( wpmem_fields()[ 'member_level' ][ 7 ] as $value ) {
            $values = explode( '|', $value );
            if ( $values[1] == $member_level )
                return $values[0];
        }
        return '';
    }
}

add_filter( 'manage_users_columns', 'add_users_columns' );
add_filter( 'manage_users_custom_column', 'add_users_columns_row', 10, 3 );

来ました!
努力の割に合わない画面が、今ここに表示されました!
Screenshot_20200820[3].png

まとめ

応用すればカラムだけでなく、いろんな場所で使えますね。
同じ悩みを抱えている方、どうぞ私を踏石にしていってくださいませ。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした