[wp-hackers] Modify Search Functionality
Bill Smith
ml_wordpress at copperleaf.org
Tue Jun 21 19:26:45 GMT 2005
Nikolay Bachiyski wrote:
> ml_wordpress at copperleaf.org wrote:
> > I want to be able to add some columns in a table I've added with a
> > plugin to the standard search. How would I go about doing this? Is
> there
> > any kind of filter that I can use to modify the query string?
> >
> > Bill
>
> Let us talk in code first:
>
> function modify_search_string($query) {
> $query->set('s', 'baba');
> }
>
> add_action('parse_query', 'modify_search_string');
>
> $query is a reference to the WP_Query object whose parse_query is
> called. For details about what can you do with $query see the WP_Query
> code in classes.php (nope, I didn't find WP_Query docs in the codex).
Let me go into some more detail here. I have an additional table that
has the post id as one of the columns and and another column that is a
text column.
The query I want to generate would be something like
SELECT DISTINCT wp_post.* FROM wp_post
LEFT JOIN mytable ON wp_post.ID = mytable.ID
WHERE ((wp_post.post_title LIKE '%word%')
OR (wp_post.post_content LIKE '%word%')
OR (mytable.description LIKE '%word%'))
AND (post_status = "publish")
GROUP BY p.ID
ORDER BY post_date DESC LIMIT 0, 10
Where it gets nasty for me is I need to 1) add the left join. That
doesn't seem too bad since there is the posts_join filter. However
adding the additional or piece for mytable seems to be a challenge. Here
is the "where" string that I get passed in the posts_where filter. With
multiple words in the search list, it seems to get even nastier. I would
need to insert my piece in there inside the parens.
AND 0=1 AND (((post_title LIKE '%word%') OR (post_content LIKE
'%word%')) OR (post_title LIKE '%word%') OR (post_content LIKE
'%word%')) AND post_date_gmt <= '2005-06-21 19:12:59' AND (post_status =
"publish")
Is there a cleaner way than this?
TIA,
Bill
More information about the wp-hackers
mailing list