@sMylesの回答からのもう1つのわずかな改善。
IDが文字列(フォーム入力から取得される場合など)と整数(例:)の両方として格納されている場合がありupdate_post_meta($post_id, authorized_users', array(get_current_user_id()));
ます。これは、wp_set_object_terms()
用語IDを使用して用語を設定できるというよく知られた問題のようなものですが、最初にそれらを整数としてキャストしないと、それらの名前を名前として新しい用語を作成する可能性が約50%あります代わりに。
これにより、テストサイトのデータベースからのそのようなケースの抜粋からわかるように、シリアル化された配列にそれらがまったく異なる方法で格納される可能性があります。
a:1:{i:0;s:1:"1";} // 's' for 'string', also note the double quotes
a:1:{i:0;i:1;} // 'i' for 'integer', no quotes
上記の両方は、フィードスルーされるprint_r()
と次のようにレンダリングされます。
Array
(
[0] => 1
)
これを修正するために、値を文字列ではなく整数としてキャストするクエリの別のバージョンをmeta_query
追加することで、少し微調整しましたrelation
。
最終結果は次のとおりです。
'meta_query' => array(
'relation' => 'OR', // Lets it know that either of the following is acceptable
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(strval(get_current_user_id())), // Saved as string
'compare' => 'LIKE'
),
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(intval(get_current_user_id())), // Saved as integer
'compare' => 'LIKE'
),
),
編集:この方法は、配列インデックスとの衝突のリスクを引き起こす可能性があることに気付きました。これにより、誰かが配列にない場合でも、ユーザーIDがインデックスとして表示される場合、誰かがマテリアルに不正アクセスすることができます。したがって、問題が議論されている場合はこれが機能しますが、@ sMyles 'メソッドを代わりに使用できるように、検索する値を保存する前に文字列としてキャストすることを確認することをお勧めします。