用外行的话来说,这是我需要做的:
对于每个 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_ 键(其值由换行符分隔)合并到一个键中,这样我们就不必导出一百万个 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:"中学公民& Economics, Jun 04, 2015, Score: 12, Hours: 43";}
但是有两个问题:
每次我更新配置文件时,它都会向 WORKSHOP_COMBINED 键添加另一个组合值,而不是替换该值。即使它说的是 update_meta 而不是 add_meta。你知道为什么会这样吗?
我想把数组变成一个字符串。因此,我尝试像这样内爆它,而不是“return $array”:
$comma_separated = implode(",", $array); 返回 $comma_separated;
但这不返回任何内容,并且该值为空。我做错了什么?谢谢!