WP-Members Membership プラグインで会員制サイトを作っていて
フィールドに会員レベルを作ってみたものの、値っていうところからホントに値しか
取れないのでかなり悩んだ件。
取れない左側のオプション名
下図の通り、管理者|administrator の場合
オプション名「管理者」が欲しいわけです。値は内部的なものであって、フロントに出すべきではないのです。
右側は普通に取れます
下のコードはユーザー一覧にカラムを追加します。
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 );
コレジャナイ。
会員レベルは日本語(オプション名)で表示して欲しい。
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 );
来ました!
努力の割に合わない画面が、今ここに表示されました!
まとめ
応用すればカラムだけでなく、いろんな場所で使えますね。
同じ悩みを抱えている方、どうぞ私を踏石にしていってくださいませ。