반응형
워드프레스, pre_get_posts에 여러 meta_key가 있습니다.
두 개를 더하는 것이 가능한가요?meta_key's
에pre_get_posts
?
나의 현재 의문점
$query->set('s', '' );
$query->set( 'meta_key', 'cat_adresse_stadtteil' );
$query->set( 'meta_value', array('charlottenburg', 'wilmersdorf', 'schmargendorf') );
이것을 추가하다
$query->set('orderby','meta_value_num');
$query->set('meta_key', 'rank');
$query->set('order', 'ASC');
편집
네, 이 솔루션을 찾았습니다(링크 #예 2).
$args = array(
'numberposts' => -1,
'post_type' => 'event',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'location',
'value' => 'Melbourne',
'compare' => '='
),
array(
'key' => 'attendees',
'value' => 100,
'type' => 'NUMERIC',
'compare' => '>'
)
)
);
효과가 없어요 뭐가 문제인지 아세요?
$query->set('meta_query',array(
array( 'key' => 'cat_adresse_stadtteil',
'value' => array('charlottenburg', 'wilmersdorf', 'schmargendorf'), ),
array( 'key' => 'rank'
'orderby' => 'meta_value_num',
'order' => 'ASC' ) ) );
두 부분을 결합하려면 다음을 시도할 수 있습니다.
add_action( 'pre_get_posts', function( $q ) {
// Only modify the main query on the front-end:
if( ! is_admin() && $q->is_main_query() )
{
$meta_query = array(
array(
'key' => 'cat_adresse_stadtteil',
'value' => array('charlottenburg', 'wilmersdorf', 'schmargendorf'),
'compare' => 'IN',
),
);
$q->set( 'meta_query', $meta_query );
$q->set( 'meta_key', 'rank' );
$q->set( 'orderby', 'meta_value_num' );
$q->set( 'order', 'ASC' );
$q->set( 's', '' );
}
});
당신이 놓친 것 같군요.compare
파라미터 및 사용order
그리고.orderby
잘못된 위치에 매개 변수가 있습니다.검색 파라미터를 리셋하는 이유를 잘 모르겠습니다.
생성된 SQL 쿼리는 다음과 같습니다.
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta
ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1
ON (wp_posts.ID = mt1.post_id)
WHERE 1=1
AND wp_posts.post_type
IN ('post', 'page', 'attachment' )
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_author = 1
AND wp_posts.post_status = 'private')
AND (wp_postmeta.meta_key = 'rank'
AND (mt1.meta_key = 'cat_adresse_stadtteil'
AND CAST(mt1.meta_value AS CHAR)
IN ('charlottenburg','wilmersdorf','schmargendorf')) )
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value+0 ASC
LIMIT 0, 10
이 쿼리를 pre_pget_posts로 변환할 수 있습니다.
$meta_query_args = array(
'relation' => 'AND', // "OR"
array(
'key' => '_my_custom_key',
'value' => 'Value I am looking for',
'compare' => '='
),
array(
'key' => '_your_min_model_key',
'value' => 1453,
'compare' => '>'
),
array(
'key' => '_your_max_model_key',
'value' => 1923,
'compare' => '<'
)
);
$meta_query = new WP_Meta_Query( $meta_query_args );
파라미터 상세 비교:
compare (string) - Operator to test. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (only in WP >= 3.5), and 'NOT EXISTS' (also only in WP >= 3.5). Values 'REGEXP', 'NOT REGEXP' and 'RLIKE' were added in WordPress 3.7. Default value is '='.
언급URL : https://stackoverflow.com/questions/26394593/wordpress-multiple-meta-key-in-pre-get-posts
반응형
'programing' 카테고리의 다른 글
CRUDRespository에서 업데이트 또는 저장 업데이트, 사용 가능한 옵션이 있습니까? (0) | 2023.02.26 |
---|---|
JPA 과도 주석 및 JSON (0) | 2023.02.26 |
React에서 증분 연산자를 사용하는 방법 (0) | 2023.02.26 |
React-Router - Uncaught TypeError: 정의되지 않은 속성 'getCurrentLocation'을 읽을 수 없습니다. (0) | 2023.02.26 |
PHP로 WordPress 플러그인에서 텍스트 파일로 쓰기 (0) | 2023.02.26 |