반응형
검색 결과에 ACF 필드 추가 페이지 WordPress
검색 결과가 모두 추가되는 search.php라는 파일이 있습니다.검색 양식은 홈페이지에 있습니다.문제는 제가 검색 결과에 대한 특별한 페이지가 없는데, 이 페이지에 ACF 필드를 추가하고 있습니다.ACF 플러그인에서 드롭다운 메뉴 'location'을 검색했지만 그룹을 추가할 search.php 파일을 찾을 수 없습니다.제 설명이 좀 애매하다면 죄송하지만, 정확히 어떻게 설명해야 할지 모르겠습니다.
요약, search.php search results 페이지에 ACF 필드를 추가합니다.
용어: ACF는 워드프레스의 Advanced Custom Fields 플러그인을 의미합니다.
플러그인을 사용해서 할 수도 있지만 아래 코드를 사용해서 플러그인을 피할 수 있습니다.
당신의 기능에 이 코드를 추가해야 합니다.php 파일
<?php
/**
* [list_searcheable_acf list all the custom fields we want to include in our search query]
* @return [array] [list of custom fields]
*/
function list_searcheable_acf(){
$list_searcheable_acf = array("title", "sub_title", "excerpt_short", "excerpt_long", "xyz", "myACF");
return $list_searcheable_acf;
}
/**
* [advanced_custom_search search that encompasses ACF/advanced custom fields and taxonomies and split expression before request]
* @param [query-part/string] $where [the initial "where" part of the search query]
* @param [object] $wp_query []
* @return [query-part/string] $where [the "where" part of the search query as we customized]
* see https://vzurczak.wordpress.com/2013/06/15/extend-the-default-wordpress-search/
* credits to Vincent Zurczak for the base query structure/spliting tags section
*/
function advanced_custom_search( $where, &$wp_query ) {
global $wpdb;
if ( empty( $where ))
return $where;
// get search expression
$terms = $wp_query->query_vars[ 's' ];
// explode search expression to get search terms
$exploded = explode( ' ', $terms );
if( $exploded === FALSE || count( $exploded ) == 0 )
$exploded = array( 0 => $terms );
// reset search in order to rebuilt it as we whish
$where = '';
// get searcheable_acf, a list of advanced custom fields you want to search content in
$list_searcheable_acf = list_searcheable_acf();
foreach( $exploded as $tag ) :
$where .= "
AND (
(wp_posts.post_title LIKE '%$tag%')
OR (wp_posts.post_content LIKE '%$tag%')
OR EXISTS (
SELECT * FROM wp_postmeta
WHERE post_id = wp_posts.ID
AND (";
foreach ($list_searcheable_acf as $searcheable_acf) :
if ($searcheable_acf == $list_searcheable_acf[0]):
$where .= " (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') ";
else :
$where .= " OR (meta_key LIKE '%" . $searcheable_acf . "%' AND meta_value LIKE '%$tag%') ";
endif;
endforeach;
$where .= ")
)
OR EXISTS (
SELECT * FROM wp_comments
WHERE comment_post_ID = wp_posts.ID
AND comment_content LIKE '%$tag%'
)
OR EXISTS (
SELECT * FROM wp_terms
INNER JOIN wp_term_taxonomy
ON wp_term_taxonomy.term_id = wp_terms.term_id
INNER JOIN wp_term_relationships
ON wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
WHERE (
taxonomy = 'post_tag'
OR taxonomy = 'category'
OR taxonomy = 'myCustomTax'
)
AND object_id = wp_posts.ID
AND wp_terms.name LIKE '%$tag%'
)
)";
endforeach;
return $where;
}
add_filter( 'posts_search', 'advanced_custom_search', 500, 2 );
참고용 - https://gist.github.com/charleslouis/5924863
처음에 작동하지 않을 경우 이 솔루션을 사용해 보십시오.
https://support.advancedcustomfields.com/forums/topic/making-customfields-searchable/
그것은 나에게 통합니다.
function custom_search_query( $query ) {
if ( !is_admin() && $query->is_search ) {
$result = $query->query_vars['s'];
$query->query_vars['s'] = '';
$query->set('meta_query', array('relation' => 'OR',
array(
'key' => 'acf_name', // ACF FIELD NAME OR POST META
'value' => $result,
'compare' => 'LIKE',
)
));
$query->set('post_type', 'post'); // optional POST TYPE
}
}
add_filter( 'pre_get_posts', 'custom_search_query');
언급URL : https://stackoverflow.com/questions/36787391/add-acf-fields-to-search-results-page-wordpress
반응형
'programing' 카테고리의 다른 글
워드프레스 플러그인 기능을 자체 플러그인으로 대체 (0) | 2023.09.25 |
---|---|
안드로이드.fragment getActivity()가 null을 반환하는 경우가 있습니다. (0) | 2023.09.25 |
Oracle PL/SQL Developer로 덤프를 만드는 방법은? (0) | 2023.09.25 |
알 수 없는 초기 문자 집합 인덱스 '255'가 서버에서 수신됨 (0) | 2023.09.25 |
유형 열거형의 IBInspectable을 작성하는 방법 (0) | 2023.09.25 |