2016-04-22 107 views
3

我有一个名为search.php的文件,其中添加了所有搜索结果。 搜索表单位于主页上。问题是,我没有搜索结果的特殊页面,但我想添加ACF字段到此页面。我在ACF插件的下拉菜单中找到了'位置',但我找不到要添加组的search.php文件。如果我的解释有点模糊,我很抱歉,但我不知道如何正确解释。将ACF字段添加到搜索结果页面WordPress

总结,我想添加ACF字段到我的search.php搜索结果页面。

术语:ACF代表WordPress中的高级自定义字段插件。

回答

5

你也可以使用插件,但使用下面的代码来避免插件。

您需要添加该代码在你function.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/