[英]Combine meta values into a new key (PHP/WordPress)
用外行的話來說,這就是我要做的:
對於每個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,2015年6月4日,得分:12,小時:43“;}
但是有兩個問題:
每當我更新配置文件時,它會將另一個組合值添加到WORKSHOP_COMBINED鍵中,而不是替換該值。 即使它說的是update_meta而不是add_meta。 你知道為什么會這樣嗎?
我想將數組轉換為字符串。 因此,我沒有像“ return $ array”那樣內爆:
$ comma_separated = implode(“,”,$ array); 返回$ comma_separated;
但這不返回任何值,並且該值為空。 我做錯了什么? 謝謝!
這里是:
function combine_keys( $user_id ) {
$array = array();
$all_meta = get_user_meta( $user_id );
foreach( $all_meta as $key => $meta ) {
if( preg_match('/^FOO_/', $key) )
$array[$key] = $meta[0];
}
return $array;
}
您可以這樣創建組合鍵:
foreach (get_users() as $user) {
$combined_meta = combine_keys( $user->ID );
update_user_meta( $user->ID, 'FOO_COMBINED', $combined_meta );
}
至於何時調用它,您可以在導出CSV之前(可以使用插件提供的掛鈎)進行操作,也可以在需要時進行安排 。
或者,您可以讓單個用戶在更新個人資料時保存其個人組合密鑰:
add_action('personal_options_update', function( $user_id ){
if ( current_user_can('edit_user', $user_id) )
update_user_meta( $user_id, 'FOO_COMBINED', combine_keys( $user_id ) );
});
更新
回答新問題:
FOO_COMBINED
以FOO_
,所以將其添加到數組中(很抱歉,我的錯:)。 用/^FOO_(?!COMBINED)/
替換搜索模式將排除該鍵。 我已經更新了代碼以滿足您的新要求並對其進行了測試:
function combine_keys( $user_id ) {
$array = array();
$all_meta = get_user_meta( $user_id );
foreach( $all_meta as $key => $meta ) {
if( preg_match('/^FOO_(?!COMBINED)/', $key) )
$array[$key] = $meta[0];
}
return implode(',', $array);
}
add_action('personal_options_update', function( $user_id ){
if ( current_user_can('edit_user', $user_id) )
update_user_meta( $user_id, 'FOO_COMBINED', combine_keys( $user_id ) );
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.