Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I want to create a search that does:

  1. Search within my custom taxonomy - custom-tags
  2. search the post title
  3. search select meta field ?? dont know
  4. search with custom post type - easy part

I looked wordpress API but couldn't find any useful built in functions, i created a custom query below: there is bug here since it returns duplicate results sometime, maybe left join might be needed here.

this query searches for term and title only at moment, but i also want a meta field called cterm searched.

SELECT   wp_posts.*
    FROM wp_posts, wp_term_relationships, wp_term_taxonomy, wp_terms
    WHERE (wp_terms.name LIKE '%car%'
        OR wp_posts.post_title LIKE '%car%')
            AND wp_posts.post_status = 'publish'
            AND wp_posts.post_type = 'posts_vch'
        AND wp_posts.ID = wp_term_relationships.object_id
        AND wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
        AND wp_term_taxonomy.term_id = wp_terms.term_id  GROUP BY  wp_posts.ID  LIMIT  1 ,50

UPDATE:

above updated query, manage to remove duplicate result using group by BUT another bug is that it does NIT bring POSTs with term "car". Basically it only show posts that have the word "car" in the title but not in term/tag.

share|improve this question
add comment

1 Answer 1

You can do everything you need using the search parameters allowed in WP_Query -- except searching in the post title only. In order to do that, see this answer.

Make sure to look at the taxonomy and meta subqueries allowed in the args passed to WP_Query.

EDIT: Since you need to select using OR, you have 2 options -- you could run 2 queries and merge the 2 post arrays afterwards, or if you are more concerned about performance, you can use a custom query and just execute the SQL you wrote above. Use the global $wpdb object and the function $wpdb->get_results(). In order to make your query not return duplicate results, you should be able to use SELECT DISTINCT.

share|improve this answer
    
thanks for the reply, i had a look at wp_query. but there is a issues lets say i want to use the standard query which searches title and content, and add meta query. the sql would be search in title or content and meta query, that not right it should be search in title or content OR meta not AND –  TheDeveloper Sep 16 '12 at 10:54
    
Ah, I missed that part. I have updated my answer. –  jessica Sep 16 '12 at 14:23
    
thanks for the reply, hmm tested using distinct and also group by by duplicate results still appear... –  TheDeveloper Sep 16 '12 at 17:41
    
Can you update your question with the result of echo $wpdb->last_query and an example set of results? –  jessica Sep 16 '12 at 20:53
    
hi there updated the question, see the the query and the comment below it... thanks :) –  TheDeveloper Sep 18 '12 at 19:35
show 2 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.