Add ACF fields to search results page WordPress

I have a file named search.php, where all the search results are added.
The search form is located on the homepage. The problem is, I have no special page for the search results, but I want to add ACF fields to this page. I have searched in the dropdown menu ‘location’ in the ACF plugin, but I can’t find the search.php file to add groups to. I am sorry if my explaination is a bit vague, but I don’t know how to explain this exactly.

Summary, I want to add ACF fields to my search.php search results page.

Read More

Terminology: ACF stand for the Advanced Custom Fields plugin in WordPress.

Related posts

2 comments

  1. You can also do it using plugin but use below code to avoide plugin.

    You need to add this code in you function.php file

    <?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 );
    

    for reference – https://gist.github.com/charleslouis/5924863

    Try This solution if first is not working.

    https://support.advancedcustomfields.com/forums/topic/making-customfields-searchable/

  2. it works for me

    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');
    

Comments are closed.