wp_query에서 복잡한 계산 또는 조건부 필드로 주문하려면 어떻게 해야 합니까?
wp_query에서 조건부 또는 계산된 필드별로 주문할 수 있도록 복잡한 쿼리를 작성할 수 있습니까?제가 하려는 것은 MySql의 다음 쿼리와 같은 것입니다.
SELECT *, field1, field2
case when field1+field2 > some_value then 1 else 2 end as my_alias
FROM my_table
ORDER BY my_alias ASC
wp_query를 사용하여 이와 같은 쿼리를 구축하고 싶은데 가능한가요?만약 그렇다면, 어떻게 그것을 달성할 수 있습니까?
네, 그렇게 해야 합니다.
https://developer.wordpress.org/reference/hooks/posts_fields/ 을 사용하여 사용자 지정 필드 추가
https://developer.wordpress.org/reference/hooks/posts_orderby/ 을 사용하여 사용자 지정 주문 추가
나는 이것을 싱글로 할 방법이 없다고 생각합니다.WP_Query
~하듯이meta_query
세 개의 고유 쿼리를 수행한 다음 병합할 수 있지만(테스트되지 않은 코드) 이러한 유연성은 허용되지 않습니다.
// Get ongoing events
$ongoing = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'date_from',
'value' => date('Y-m-d'),
'compare' => '<=',
'type' => 'DATE'
),
array(
'key' => 'date_to',
'value' => date('Y-m-d'),
'compare' => '>=',
'type' => 'DATE'
)
)
));
foreach($ongoing as $key => $ongoing_post) {
$ongoing_post->event_status = 'ongoing';
$ongoing[$key] = $ongoing_post;
}
// Get upcoming events
$upcoming = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'date_from',
'value' => date('Y-m-d'),
'compare' => '>',
'type' => 'DATE'
)
)
));
foreach($upcoming as $key => $upcoming_post) {
$upcoming_post->event_status = 'upcoming';
$upcoming[$key] = $upcoming_post;
}
// Get past events
$past = new WP_Query(array(
'post_type' => 'event',
'meta_key' => 'date_from',
'orderby' => 'meta_value',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'date_to',
'value' => date('Y-m-d'),
'compare' => '<',
'type' => 'DATE'
)
)
));
foreach($past as $key => $past_post) {
$past_post->past_status = 'past';
$past[$key] = $past_post;
}
// Merge'em all
$events = array_merge($ongoing, $upcoming, $past);
메타 값을 실제 날짜와 비교하는 데 사용합니다(저장 방법에 따라 날짜 형식을 변경할 수 있습니다).date_from
그리고.date_to
필드), 그리고 오른쪽이 있는 모든 게시 개체에 속성을 추가하려면 바로 루프를 수행합니다.event_status
게시물을 표시할 때 사용할 수 있습니다.
WP_Query 필터를 통해 이를 달성할 수 있는 영리한 방법이 있을 수 있지만 내부에서 더 심층적인 조사가 필요합니다.WP_Query
소스 코드는 코덱스 내부에 실제로 문서화되어 있지 않기 때문입니다.
당신이 사용하는 것, 그리고 이것을 시도해 보세요.
<?php
global $wpdb;
$result = $wpdb->get_results("SELECT *, field1, field2 case when field1+field2 > some_value then 1 else 2 end as my_alias FROM my_table ORDER BY my_alias ASC");
print_r($result);
?>
여기를 클릭하십시오.
언급URL : https://stackoverflow.com/questions/33209880/in-wp-query-how-can-i-order-by-a-complex-calculated-or-conditional-fields
'programing' 카테고리의 다른 글
Oracle Text는 NVARCHAR2에서 작동하지 않습니다.그 밖에 어떤 것을 사용할 수 없습니까? (0) | 2023.06.13 |
---|---|
푸시된 컨트롤러에서 루트뷰 컨트롤러를 가져오려면 어떻게 해야 합니까? (0) | 2023.06.13 |
내 Git repo가 분리된 HEAD 상태에 들어간 이유는 무엇입니까? (0) | 2023.06.13 |
정의되지 않은 함수 convert_to_screen() 호출 (0) | 2023.06.13 |
제약 조건이 있는 그룹별 시퀀스 번호 추가 (0) | 2023.06.13 |