반응형
사용자 정의 Word에서 결과를 제외하는 방법분류 용어별 MySQL 쿼리 누름
저는 'product-brand' 분류법에 'brand-slug'라는 용어가 없는 게시물만 보여드리고 싶습니다.
현재 쿼리가 필터를 적용하지 않습니다.
SELECT DISTINCT * FROM $wpdb->posts AS p
LEFT JOIN $wpdb->postmeta AS meta ON p.ID = meta.post_id
LEFT JOIN $wpdb->term_relationships AS rel ON rel.object_id = p.ID
LEFT JOIN $wpdb->term_taxonomy AS tax ON tax.term_taxonomy_id = rel.term_taxonomy_id
LEFT JOIN $wpdb->terms AS term ON tax.term_id = term.term_id
WHERE 1=1
AND p.post_type = 'product'
AND p.post_status = 'publish'
AND p.post_title LIKE '%$trimmed%' OR (meta.meta_key = 'product_model' AND meta.meta_value LIKE '%$trimmed%')
AND (tax.taxonomy = 'product-brand' AND term.slug NOT IN ('$protected'))
위의 질문에서는 분류법이나 슬러그 조건식이 모두 작동하지 않는 것 같습니다.
어떤 도움이라도 감사합니다!
주의:
사용하지 않는 것 같습니다.$wpdb->prepare()
SQL 주입의 위험이 있습니다.
또한 관련 OR 부품 주위에 괄호가 없기 때문에 초안이 표시되지 않습니다.
다른 방법:
하드코드된 SQL 쿼리를 작성하는 대신WP_Query
클래스, 후크/케이블을 통한 약간의 수정이 있습니다.
예를 다음에 나타냅니다(PHP 5.4+).
$args = [
'_meta_or_like_title' => $trimmed, // Our new custom argument!
'post_type' => 'product',
'post_status' => 'publish',
'meta_query' => [
[
'key' => 'product_model',
'value' => $trimmed, // Your meta value
'compare' => 'LIKE'
]
],
'tax_query' => [
[
'taxonomy' => 'product-brand',
'field' => 'slug',
'terms' => $protected, // Your terms array
'operator' => 'NOT IN'
]
]
];
관습이 있는 곳_meta_or_like_title
인수는 여기서 다른 질문을 위해 작성한 약간 수정된 플러그인에서 지원됩니다.
플러그인:
<?php
/**
* Plugin Name: Meta OR LIKE Title query in WP_Query
* Description: Activated through the '_meta_or_like_title' argument of WP_Query
* Plugin URI: http://stackoverflow.com/a/31241416/2078474
* Plugin Author: Birgir Erlendsson (birgire)
* Version: 0.0.1
*/
add_action( 'pre_get_posts', function( $q )
{
if( $title = $q->get( '_meta_or_like_title' ) )
{
add_filter( 'get_meta_sql', function( $sql ) use ( $title )
{
global $wpdb;
// Only run once:
static $nr = 0;
if( 0 != $nr++ ) return $sql;
// Modify WHERE part:
$sql['where'] = sprintf(
" AND ( %s OR %s ) ",
$wpdb->prepare(
"{$wpdb->posts}.post_title LIKE '%%%s%%'",
$wpdb->esc_like( $title )
),
mb_substr( $sql['where'], 5, mb_strlen( $sql['where'] ) )
);
return $sql;
});
}
}, PHP_INT_MAX );
언급URL : https://stackoverflow.com/questions/31037739/how-to-exclude-results-from-custom-wordpress-mysql-query-by-taxonomy-term
반응형
'programing' 카테고리의 다른 글
최소화 없이 React의 실제 버전을 구축하는 방법은 무엇입니까? (0) | 2023.03.22 |
---|---|
초기 상태를 redux로 설정하는 방법 (0) | 2023.03.22 |
Tymeleaf + CSS + Spring Boot (0) | 2023.03.22 |
확장성과 테스트성을 고려하면서 도메인 엔티티를 DTO로 적절하게 변환하는 방법 (0) | 2023.03.22 |
json.dump가 "TypeError: {...}은(는) 유효한 개체에 대해 JSON을 직렬화할 수 없습니다"라고 던지는 경우 (0) | 2023.03.22 |