워드프레스 검색을 수정하여 분류학 용어와 범주 용어를 쿼리하는 방법은 무엇입니까?
검색을 수정해서 제가 "저자"라는 분류 체계를 가지고 있다고 말하고 게시물에 "이안 랭킨"이라는 용어를 추가하면 "이안 랭킨"을 검색하면 해당 게시물이 뜨기를 원합니다.지금은 제목과 내용만 검색하는 것 같습니다.검색어도 어떻게 만드나요?
필터 후크를 사용하여 검색 쿼리를 변경하여 분류법 테이블에 결합할 수 있습니다.
예를 들어 '저자' 분류법도 검색합니다.
먼저 분류법 표를 결합합니다.
function tax_search_join( $join )
{
global $wpdb;
if( is_search() )
{
$join .= "
INNER JOIN
{$wpdb->term_relationships} ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id
INNER JOIN
{$wpdb->term_taxonomy} ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id
INNER JOIN
{$wpdb->terms} ON {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id
";
}
return $join;
}
add_filter('posts_join', 'tax_search_join');
그런 다음 분류학 '저자'에서 검색어를 찾습니다.
function tax_search_where( $where )
{
global $wpdb;
if( is_search() )
{
// add the search term to the query
$where .= " OR
(
{$wpdb->term_taxonomy}.taxonomy LIKE 'author'
AND
{$wpdb->terms}.name LIKE ('%".$wpdb->escape( get_query_var('s') )."%')
) ";
}
return $where;
}
add_filter('posts_where', 'tax_search_where');
그리고 마지막으로 post id로 결과를 그룹화하여 join 때문에 중복되는 결과를 방지합니다.
function tax_search_groupby( $groupby )
{
global $wpdb;
if( is_search() )
{
$groupby = "{$wpdb->posts}.ID";
}
return $groupby;
}
add_filter('posts_groupby', 'tax_search_groupby');
또한 MySQL의 EXIST 기능을 용어와 term_relations를 결합하는 하위 쿼리와 함께 사용하여 수행할 수도 있습니다.다음 토막글을 만들어 함수에 넣었습니다.php.이것은 적어도 WordPress Version 5.3.1에 적용됩니다.
// Search titles and tags
function and_extend_search( $search, &$wp_query ) {
global $wpdb;
if ( empty( $search ))
return $search;
$terms = $wp_query->query_vars[ 's' ];
$exploded = explode( ' ', $terms );
if( $exploded === FALSE || count( $exploded ) == 0 )
$exploded = array( 0 => $terms );
$search = '';
foreach( $exploded as $tag ) {
$search .= " AND (
($wpdb->posts.post_title LIKE '%$tag%')
OR EXISTS
(
SELECT
*
FROM
$wpdb->term_relationships
LEFT JOIN
$wpdb->terms
ON
$wpdb->term_relationships.term_taxonomy_id = $wpdb->terms.term_id
WHERE
$wpdb->terms.name LIKE '%$tag%'
AND
$wpdb->term_relationships.object_id = $wpdb->posts.ID
)
)";
}
return $search;
}
add_filter('posts_search', 'and_extend_search', 500, 2);
언급URL : https://stackoverflow.com/questions/13491828/how-to-amend-wordpress-search-so-it-queries-taxonomy-terms-and-category-terms
'programing' 카테고리의 다른 글
Uncatched TypeError: null의 'clientWidth' 속성을 읽을 수 없습니다. (0) | 2023.10.16 |
---|---|
(트랙터)클릭 시 입력이 비활성화되었는지 확인하는 중? (0) | 2023.10.16 |
폴더에서 하위 모듈 리포지토리를 만들고 깃 커밋 기록을 유지합니다. (0) | 2023.10.11 |
SQL SELECT 문에서 열 이름 바꾸기 (0) | 2023.10.11 |
strcpy()/strncpy()는 유닉스에서 최적화를 설정할 때 여분의 공간이 있는 구조 부재에서 충돌합니까? (0) | 2023.10.11 |