posts_search의 커스텀
이 쿼리를 사용자 지정 검색 쿼리로 사용하려면 어떻게 해야 합니까?
add_filter('posts_search', 'my_search_is_perfect', 20, 2);
function my_search_is_perfect($search, $wp_query)
{
$sWord = 'Zukunft haus';
return "
SELECT *,
MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score
FROM `wp_posts`
INNER JOIN wp_term_relationships ON wp_term_relationships.object_id = ID
AND wp_term_relationships.term_taxonomy_id = 1
WHERE MATCH( post_title) AGAINST ('$sWord' IN BOOLEAN MODE)
AND `post_status` = 'publish'
AND `post_type` = 'post'
ORDER BY score DESC
";
}
쿼리는 올바르지만(저는 phpMyAdmin에서 이것을 확인했습니다), WordPress에서 메시지가 표시되지만 결과는 없습니다.
기능 중.php 파일:
add_filter('posts_search', 'my_search_is_perfect', 20, 2);
function my_search_is_perfect()
{
global $post;
global $wpdb;
$sWord = 'Zukunft haus';
$sel_query = "SELECT *,
MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score
FROM ".$wpdb->prefix."posts
INNER JOIN ".$wpdb->prefix."term_relationships ON ".$wpdb->prefix."term_relationships.object_id = ID
AND ".$wpdb->prefix."term_relationships.term_taxonomy_id = 1
WHERE MATCH( post_title) AGAINST ('$sWord' IN BOOLEAN MODE)
AND post_status = 'publish'
AND post_type = 'post'
ORDER BY score DESC";
$totaldata = $wpdb->get_results($sel_query);
return $totaldata;
}
@Gustavo Straube의 제안대로 $wpdb를 사용하는 것이 좋습니다.이 경우 다음과 같이 구현해야 합니다.
add_filter('posts_search', 'my_search_is_perfect', 20, 2);
function my_search_is_perfect()
{
global $wpdb;
$sWord = 'Zukunft haus';
$query = "SELECT *,
MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score
FROM `".$wpdb->prefix."_posts`
INNER JOIN ".$wpdb->prefix."_term_relationships ON ".$wpdb->prefix."_term_relationships.object_id = ID
AND ".$wpdb->prefix."_term_relationships.term_taxonomy_id = 1
WHERE MATCH( post_title) AGAINST ('$sWord' IN BOOLEAN MODE)
AND `post_status` = 'publish'
AND `post_type` = 'post'
ORDER BY score DESC";
$myrows = $wpdb->get_results( $query );
return $myrows;
}
상세한 것에 대하여는, https://codex.wordpress.org/Class_Reference/wpdb 를 참조해 주세요.
워드프레스의 커스텀 쿼리는 $wpdb를 통해 실행됩니다.wordpress에서 단순히 mysql 쿼리 필터를 사용하면 SQL 주입을 피하기 위해 쿼리를 실행하지 않을 수 있습니다.따라서 $wpdb를 사용하여 커스텀 쿼리를 만듭니다.
WordPress의 쿼리를 완전히 무시하고 사용자 지정 쿼리를 사용하여 게시물을 가져오는 것이 당신의 의도인 것 같습니다.이 경우posts_search잘못된 필터입니다.의 목적posts_search추가 검색 구문을 에 삽입하기 위한 것입니다.$search파라미터: https://developer.wordpress.org/reference/hooks/posts_search/
커스터마이즈된 투고 페치를 실행하는 올바른 필터는 다음과 같습니다.posts_pre_queryhttps://developer.wordpress.org/reference/hooks/posts_pre_query/ 에서 투고를 취득하여 반환할 수 있습니다.그 좋은 예로는 posts_pre_query - Wordpress의 결과 페이지 지정이 있습니다.
그리고 여기posts_pre_query는 투고 취득을 완전히 차단하기 위해 사용됩니다.https://wordpress.stackexchange.com/a/354103/657
@Juancho Ramone의 답변은 완벽합니다. 다만 사용 중인 필터는posts_pre_query:
function my_search_is_perfect($posts, &$query)
{
global $wpdb;
$sWord = 'Zukunft haus';
$query = "SELECT *,
MATCH(post_title) AGAINST('$sWord' IN BOOLEAN MODE) AS Score
FROM `".$wpdb->prefix."_posts`
INNER JOIN ".$wpdb->prefix."_term_relationships ON ".$wpdb->prefix."_term_relationships.object_id = ID
AND ".$wpdb->prefix."_term_relationships.term_taxonomy_id = 1
WHERE MATCH( post_title) AGAINST ('$sWord' IN BOOLEAN MODE)
AND `post_status` = 'publish'
AND `post_type` = 'post'
ORDER BY score DESC";
$myrows = $wpdb->get_results( $query );
return $myrows;
}
add_filter('posts_pre_query', 'my_search_is_perfect', 20, 2);
언급URL : https://stackoverflow.com/questions/32031307/custom-query-in-posts-search
'programing' 카테고리의 다른 글
| MVC 5 액션 방식 파라미터로서 JSON을 수신하는 방법 (0) | 2023.03.20 |
|---|---|
| 연락처 폼7을 사용하여 POST 데이터를 캡처하는 방법 (0) | 2023.03.20 |
| 사용자가 이미 Memberpress 제품을 구독한 경우 어떻게 탐지할 수 있습니까? (0) | 2023.03.20 |
| AngularJS: 서버측 검증과의 통합 (0) | 2023.03.20 |
| 응답으로 버튼을 클릭할 때 새 탭에서 페이지를 여는 방법나도 그 페이지로 데이터를 보내고 싶다. (0) | 2023.03.20 |