pre_get_posts
필터를 사용하여 내장 WP 검색을 수정하여 사용자가 게시물 (다중 사용자 정의 게시물 유형 포함)을 다른 필드로 정렬 할 수 있습니다.
내가 겪고있는 문제는 WP에 메타 값으로 정렬하도록 지시 할 때 해당 메타 값이 설정되지 않은 모든 게시물을 제외한다는 것입니다. "게시물"에 "가격"이 설정되어 있지 않지만 "항목"이 있기 때문에 정렬을 "가격"에서 "날짜"로 변경하면 결과 수가 변경됩니다.
이것은 내가 원하는 것이 아니므로 모든 게시물을 포함시킬 수있는 방법이 있는지 알고 싶습니다. 내가 정렬하는 메타 값이없는 게시물조차도 마지막에 값이없는 게시물을 넣습니다.
둘 이상의 필드를 정렬하는 방법을 알고 있지만 도움이되지 않습니다.
감사
이 질문을 가진 유일한 사람은 아닌 것 같습니다 : wp_query에 대한 인수에 특정 meta_key가 있거나없는 게시물을 포함시키는 방법은 무엇입니까? 그러나 거기에는 해결책이 없습니다.
최신 정보
나는 대답을 시도했지만 올바르게 이해했는지 확실하지 않으면 다음과 같이하십시오.
<?php
function my_stuff ($qry) {
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
$qry->set('orderby', 'meta_value date'); # Sorting works with meta_value as well as meta_value_num - I've tried both
$qry->set('order', 'ASC DESC');
$qry->set('meta_key', 'item_price');
}
메타 값은 숫자입니다 (이름에서 알 수 있듯이 가격을 저장하는 데 사용됨)
업데이트 2
나는 주문 물건을 주석 처리했으며 지금 가지고있는 것은 이것입니다 :
<?php
$qry->set('meta_query', array(array(
'key' => 'item_price',
'value' => '',
'compare' => 'NOT EXISTS'
)));
이 코드를 사용하면 쿼리에 item_price
키 가없고 게시물이없는 게시물이 모두 반환되는 것 같습니다 . IE는 이제 문제가 취소되었습니다.
주문 코드를 추가하면 결과가 0이됩니다.
편집 : ... 3 년 후 ... : PI 에이 문제가 다시 발생했습니다. 나는 주어진 모든 대답을 시도했지만 아무 효과가 없습니다. 왜 어떤 사람들은 그들이 일한다고 생각하는 것 같지만 적어도 나를 위해 일하지는 않습니다.
내가 끝낸 해결책은 save_post
필터를 사용하는 것입니다. 모든 게시물에 정렬하려는 사용자 정의 필드가 있는지 확인하십시오. 내가 해야하는 것은 약간 성가신 일이지만, 일찍 시작하는 한 문제가 없을 것입니다.
이 경우 게시물에 "보기 카운터"를 구축하고 사용자가 가장 많이 읽은 게시물을 정렬 할 수 있기를 원했습니다. 다시 한 번 보지 않은 게시물 (보기는 쉽지 않지만 여전히 그렇습니다)은 조회수를 정렬 할 때 사라졌습니다. 모든 게시물의 조회수를 확인하기 위해이 코드를 추가했습니다.
add_action('save_post', function ($postId) {
add_post_meta($postId, '_sleek_view_count', 0, true);
});
meta_query
와 tax_query
있습니다 항상array( array() )
가 여러 배열을 결합한다. 두 번째-내 대답에서 언급했듯이 meta_value_num
숫자 에 사용해야 합니다. 실제로 정의해야 할 수도 있습니다 meta_value_num
( WP_Query
-Codex 페이지 항목 참조 ). 마지막으로, 그것은 이해가되지 않습니다 order
에서 ASC
와 DESC
방향. 그건 불가능하다. 공백 구분 기호는 작동 orderby
하며 첫 번째 ASC
와 두 번째를 정렬하도록 지시 할 수 없습니다 DESC
. 이것이 바로 posts_clauses
필터입니다.
meta_value_num
입력 한 내용이 실수 인지 확인하십시오 . 누군가가 숫자라고 말하지만 실제로 데이터베이스에 문자열로 저장하는 경우가 너무 많습니다.
ASC DESC
가에 정렬이 너무 meta_value
에서 ASC
와 date
에서 DESC
나는 그것이 작동 말할 수까지.