web-dev-qa-db-ja.com

update_user_meta既存の値の上に値を追加する

私は人々がWPサイト上の好きな作家を可能にするプラグインを開発しています。

あなたはこの作者をお気に入りボタンをクリックすると、作者IDを下の機能に送り、その値をDBに保存します。

以下はFAV_AUTHORS_META_KEYテーブルのwp_usermetaに値を保存するコードです。

$user_id = fav_authors_get_user_id();
$fav_author_id = 2;
update_user_meta( $user_id, FAV_AUTHORS_META_KEY, $fav_author_id );

作成者IDが2であれば、それはDBに保存されます。ただし、異なる著者IDを送信すると、update_user_metaは新しい値を追加するのではなく、既存の値をオーバーライドします。

既存の値を維持し、その上に新しい値を追加するにはどうすればよいですか。

1
Ohsik

手動で行う必要があるメタ値を追加するための組み込み機能はありません。複数の値を追加することを計画している場合は、配列として保存することをお勧めしますが、データベースにシリアル化するため、 WP_Meta_Query onを実行するのが難しくなります。

$user_id        = fav_authors_get_user_id();
$fav_author_id  = 2;
$author_list    = get_user_meta( $user_id, FAV_AUTHORS_META_KEY, true );

if( empty( $author_list ) ) {   // There was no meta_value, set an array.
    update_user_meta( $user_id, FAV_AUTHORS_META_KEY, array( $fav_author_id ) );
} else {
    $author_arr = ( is_array( $author_list ) ) ? $author_list : array( $author_list );  // Added in case current value is not an array already.
    $author_arr[] = $fav_author_id;
    update_user_meta( $user_id, FAV_AUTHORS_META_KEY, $author_arr );
}

私はあなたが現在持っているものは配列ではないと思いますので、私はelseステートメントの中にインライン条件を追加して任意の単一の値を配列に変換します。 trueget_user_meta()に渡して、配列を非直列化するようにする必要があります。

2
Howdy_McGee