@sMyles의 답변에서 또 다른 약간의 개선.
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'
),
),
편집 : 이 방법은 배열 색인과 충돌 할 위험이 있음을 깨달았습니다. 따라서 문제가 논의 된 경우 이것이 작동 하지만 더 나은 방법은 검색하려는 값을 저장하기 전에 문자열로 캐스팅하여 @sMyles '메소드를 대신 사용할 수 있도록하는 것입니다.