meta_query 'compare'=> 'IN'이 작동하지 않습니다


14

우선, 나는 그것이 중복이라는 것을 알고 있지만 이전 답변 중 도움이되지 않았습니다.

에서 게시물을 검색하고 post_meta있습니다. 내 코드는 현재 아무것도 반환하지 않습니다.

$args   =   array(
    'numberposts'   => -1,
    'post_type'     => 'post',
    'meta_query'    => array(
        array(
            'key'       => 'system_power_supply',
            'value'     => array('single', 'redundant'),
            'compare'   => 'IN',
        )
    )

);

$query = new WP_Query($args);
echo $query->found_posts;

내가 제거 meta_query하면 작동합니다. 나는 이것들을 확신한다.

  • key또는에 철자 오류가 없습니다 value.
  • 게시물 유형은 post
  • 있다 'system_power_supply'에서 '하나'값과 게시물은. 그러나 게시물 필드는 고급 사용자 정의 필드에 의해 생성됩니다 .

되어 system_power_supply직렬화?
Howdy_McGee

그렇습니다. postmeta 테이블의 값은 다음과 같습니다 a:1:{i:0;s:6:"single";}
Rizwan

2
메타 쿼리는 직렬화 된 데이터에서 작동하지 않습니다. 직렬화 된 데이터를 쿼리하기 위해이 사이트를 검색하면 일부 답변을 찾을 수 있지만 이상적인 방법은 없습니다.
Milo

답변:


13

메타 쿼리에서 직렬화 된 값을 쉽게 검색 할 수있는 방법은 없습니다. 값 목록이 오래 걸리지 않으면 여러 메타 쿼리를 설정할 수 있습니다.

'meta_query'    => array(
    'relation' => 'OR',
    array(
        'key'       => 'system_power_supply',
        'value'     => 'single',
        'compare'   => 'LIKE',
    ),
    array(
        'key'       => 'system_power_supply',
        'value'     => 'redundant',
        'compare'   => 'LIKE',
    )
)

또는 멋진 모습을 원한다면 동적으로 설정할 수 있습니다.

$values_to_search = array('single', 'redundant');
$meta_query = array('relation' => 'OR');
foreach ($values_to_search as $value) {
    $meta_query[] = array(
        'key'       => 'system_power_supply',
        'value'     => $value,
        'compare'   => 'LIKE',
    );
}

정말 고마워요 네가 얼마나 큰 두통을 해결했는지 말할 수 없어.
Rizwan

btw, 왜 meta_query를 통해 쿼리 할 수없는 경우 직렬화 된 데이터를 포함하는 meta_value? 이 워드 프레스의 버그입니까?
Rizwan

1
나는 "bro"가 아니라 문제가없는 여자입니다. meta_value에는 고급 사용자 정의 필드가 데이터를 저장하는 방식으로 인해 직렬화 된 데이터가 포함됩니다. 이상적이지는 않습니다.
Jen

1
하하, 나는 나의 숙녀를 사과한다. 두 번째와 세 번째는 잘 작동했지만 첫 번째 시도는하지 않았습니다.
Rizwan

2
첫 번째 것을 제거해도 작동하지 않습니다
Toskan

4

오랜 시간이 걸렸지 만 누군가 같은 문제가있는 경우를 대비하여. 글쎄, 나는 문제를 발견하기 전에 몇 시간 동안 머리를 잡아 당겼다. 대신 ','로 먼저 가입해야합니다.

따라서 귀하의 경우 다음과 같이 작동해야합니다.

$args   =   array(
'posts_per_page'   => -1,
'post_type'     => 'post',
'meta_query'    => array(
    array(
        'key'       => 'system_power_supply',
        'value'     => join(', ', array('single', 'redundant')),
        'compare'   => 'IN',
    )
)
);
$query = new WP_Query($args);
echo $query->found_posts;

WP 5에서는 배열을 값 키로 직접 전달할 수 있습니다. 문자열을 문자열로 내포하면 wp가 문자열을 IN()파트의 세그먼트로 나누는 방법과 관련하여 예기치 않은 결과가 발생할 수 있습니다 . 예를 들면, 'this that', 'and', 'that'이된다 'this','that','and','that'- 그래서 그냥 그것을 배열을 제공하는 더 나은 것 같다.
Bananaapple
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.