1

WP 쿼리에 표시 할 페이지를 필터링하는 데 문제가 발생했습니다.wordpress WP 쿼리 및 사용자 정의 필드 필터링

Codex WP query reference for custom fields은 ACF (고급 사용자 정의 필드 플러그인 - 문제가되지 않지만 WP 사용자 정의 필드와 동일하게 작동합니다) 매개 변수를 사용하여 페이지를 필터링합니다.

"다중 사용자 정의 필드 처리"단락에서 Codex는 2 가지 조건을 가진 예제를 얻었다. 우리는 OR 또는 AND 관계를 사용할 수 있습니다. 당신이 3 번째 조건 (배열)을 가질 때까지 나는 둘 다 위해 일합니다. 그것은 단지 두 배열을 가지고

'relation' => 'OR', 
     array(
     'key' => 'color', 
     'value' => 'blue', 
     'compare' => 'NOT LIKE' 
    ), 
     array(
     'key' => 'price', 
     'value' => array(20, 100), 
     'type' => 'numeric', 
     'compare' => 'BETWEEN' 
    ) 

:

그들은 예를 사용합니다. 내가 3 위를했을 때, 아무 것도 보여주지 않습니다. 디버그 모드에서 나는 오류를 볼 수 있습니다 :

WordPress database error: [Lost connection to MySQL server during query] 

내가 사용할 때 그것은 작동하지만 OR을 사용해야합니다. 불행히도 MySQL 연결이 끊어집니다. 나는 WP와 동일한 쿼리를 phpMySQL에 요청했다. 그것 문제가 - phpMyAdmin는 동일을 말한다 :

Lost connection 

어떤 아이디어? 아마도 필터링을 위해 다른 aproach를 시도해야합니까? (어쩌면 내가 분류를 사용해야합니까?)

여기

코드입니다 제가 사용 :

$query_array = array('relation' => 'OR'); 
    array_push($query_array, 
    array(
    'key' => 'filter1', 
    'value' => 'value1', 
    'compare' => 'LIKE' 
), 
    array(
    'key' => 'filter1', 
    'value' => 'value2', 
    'compare' => 'LIKE' 
), 
    array(
    'key' => 'filter1', 
    'value' => 'value3', 
    'compare' => 'LIKE' 
) 
); 

$args = array(
    'order' => $order_array, 
    'meta_key' => $meta_key, 
    'orderby' => $orderby, 
    'post_type' => 'page', 
    'paged' => $paged, 
    'post__in' => $postIDs, 
    'posts_per_page' => 12, 
    'paged' => get_query_var('paged'), 
    'meta_query' => $query_array 
); 

query_posts($args); 
?> 

(변수를 $에 대한 인수는 물론 설정) 내가 사용할 수없는 이유는

을 모르는 내가 사용 할 수없는 이유

하지만 아마는 다음과 같습니다

$query_array = array('relation' => 'OR'); 
    array_push($query_array, 
    array(
    'key' => 'filter1', 
    'value' => array('value1', 'value2', 'value3'), 
    'compare' => 'IN' 
) 
); 
+1

고급 사용자 정의 필드에 대해 everythink입니다! a : 3 : {i : 0; s : 10 : "값 1"; i : 1; s : 11 : "값 2"; i : 2; s : 15 : "값 3";} 그래서 지금은 IN을 LIKE로 만들 필요가 있지만 Array는 필요합니다. 이제 IN은 '='와 같은 배열로 작동합니다. – matliks

답변

0

당신의 의견이 나를 도왔다 고 말하고 싶습니다. 나는 잠시 동안 매우 비슷한 문제에 대항해서 머리를 짚고있었습니다. 나는 ACF도 사용하고 있는데, 하나의 포스트 타입의 아이템을 다른 커스텀 포스트 타입에 첨부하는 것은 쉽다. 예를 들어, Person_1과 Person_3을 "Project_A"에 붙이는 것.

이렇게하면 특정 프로젝트에 연결된 사용자를 쉽게 찾을 수 있습니다. 그러나 어떤 프로젝트가 어떤 사용자에게 연결되어 있었는지를 보여주기 위해 역순으로 동일한 작업을 수행하게되면 엄청난 두통이되었습니다.

나는 마지막으로 귀하의 코멘트에 부분 덕분에 그것을 알아 냈어 - 다른 같은 문제와 함께 온다 나는 경우 누군가 여기에 내 솔루션을 게시합니다 : 한마디로

$args = array(
    'numberposts' => -1, 
    'post_type'  => 'project', 
    'meta_query' => array(
    'relation'  => 'IN', 
     array(
      'key'  => 'people', 
      'value'  => ';s:1:"' . $person->ID . '";', 
      'compare' => 'LIKE' 
     ) 
    ) 
); 

: ACF를 값에 있기 때문에 리피터 필드 등이 직렬화된다면, compare 키워드는 "LIKE"이어야하고, 잘못된 리턴 값을 제거하기 위해 값에 몇 가지 컨텍스트를 추가한다. "1"과 같은 ID를 검색하면 많은 (잘못된) 그러나 "; s1;" 부분은 주어진 값이 색인 1에 있는지 확인합니다.이 경우에는 올바른 색인입니다.

사례별로 수정해야합니다. var_dumping "get_post_meta ($ post-> ID, 'people')"과 일치시키려는 것을 검사하면 값을 올바르게 얻는 데 도움이됩니다.

관련 문제