素人の言葉で、私がしなければならないことは次のとおりです。
各 wordpress ユーザーについて、「FOO_」で始まるすべてのメタ キーを見つけ、すべてのメタ値を「FOO_COMBINED」という名前の新しいキーに結合します。
私の質問は WordPress に関するものですが、一般的には PHP や SQL にも当てはまると思います。これが適切なフォーラムであることを願っています。
私が見つけた関連する回答から、私は次のようなことをする必要があることを一般的に理解しています:
function combine_keys() {
$array = // the array of (all?) user meta
foreach ($array as $key => $value) {
if (substr($key, 0, 4) == "FOO_") {
// grab the $value and append it to another key??
}
}
}
しかし、これを WordPress 関数に変換する方法がわかりません。私get_users()
はすべてのユーザーを取得することを知っています。またget_user_meta($user_id)
、特定のユーザー ID のすべてのユーザー メタを取得します。しかし、それらを上記の関数に実装する方法がわかりません。利用者が多いので、効率的に行う必要があります。
私の他の質問は、いつ関数を呼び出すかです。これの目的は、CSV をエクスポートすることです。ユーザー エクスポート プラグインを使用していますが、値が改行で区切られたすべての FOO_ キーを 1 つのキーにマージする必要があるため、100 万の FOO_ 列をエクスポートする必要はありません。
** アップデート **
以下の回答を実装しようとしている私の更新されたコードを次に示します。これを functions.php に入れました。
function combine_keys( $user_id ) {
$array = array();
$all_meta = get_user_meta( $user_id );
foreach( $all_meta as $key => $meta ) {
if( preg_match('/^WORKSHOP_/', $key) )
$array[$key] = $meta[0];
}
return $array;
}
add_action('personal_options_update', function( $user_id ){
if ( current_user_can('edit_user', $user_id) )
update_user_meta( $user_id, 'WORKSHOP_COMBINED', combine_keys( $user_id ) );
});
これは、新しいキー (WORKSHOP_COMBINED と呼ばれる) を作成するために機能し、次のように値を正常に配列に結合します。
a:2:{s:10:"WORKSHOP_5";s:43:"テスト、2015 年 5 月 15 日、スコア: 80、時間: 30 ";s:11:"WORKSHOP_30";s:68:"Middle School Civics & Economics、2015 年 6 月 4 日、スコア: 12、時間: 43";}
しかし、次の 2 つの問題があります。
プロファイルを更新するたびに、値を置き換えるのではなく、別の結合された値を WORKSHOP_COMBINED キーに追加します。add_meta ではなく update_meta と表示されていますが。なぜこれが起こっているのか知っていますか?
配列を文字列に変換したいと思います。したがって、「return $array」の代わりに、次のように内破しようとしました。
$comma_separated = implode(",", $array); $comma_separated を返します。
しかし、それは何も返さず、値は空です。私は何を間違えましたか?ありがとうございました!