1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-08-20

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

まとめ

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

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?