I have taxonomy color which is associated with a custom post type. I am listing all the post meta and the taxonomy in a table. I have a option in the table to search the posts matching the search value.
when search key is entered it will do a ajax call to get the the posts.
this is the query to get all the posts matching the search string.
function get_query_posts_custom($post_id,$start,$length) {
//get_posts arguments
$args = array(
'post_type' => 'custom_post',
'post_status' => array('publish'),
'numberposts' => $length,
'offset' => $start,
'orderby' => 'menu_order',
'order' => 'asc',
'post_parent' => $_product->id
);
//get custom post taxonomy
$taxonomies = (array) maybe_unserialize(get_post_meta( $post_id, 'post_taxonomy', true));
if(empty($attributes)) {
$taxonomies = array();
}
$meta_keys = array('type','code','key');
if(!empty($search)) {
foreach($meta_keys as $meta_key) {
$meta_query[] = array(
'key' => $meta_key,
'value' => $search,
'compare' => 'LIKE';
);
}
$args['meta_query'] = $meta_query;
$tax_query = array();
foreach($taxonomies as $taxonomy) {
$tax_query = array(
'taxonomy' => $taxonomy;
'field' => 'slug';
'terms' => $search;
'operator' => 'LIKE';
);
}
if(count($tax_query)) {
$args['tax_query'] = $tax_query;
}
}
$results = get_posts($args);
return $results;
}
How to get the posts that matches the search string of a taxonomy?
I searched the wordpress function reference it says only operator allowed to tax_query are ‘IN,NOT IN, OR and AND’)
can I use the LIKE operator?
The only option you have is to write your own SQL into the
posts_clauses
filter, where you get an array of theJOIN
,WHERE
,ORDER
, etc. clauses that you can alter, add to, remove, etc.One MAJOR MAJOR note on this, is ALWAYS use the global
$wpdb
‘sprepare
function, which will sanitize all your lovely datas. You don’t want to be allowing any type of injection through your search term custom queries. 🙂As stated in other answers you cannot simply do a
LIKE
-wise search usingtax_query
.What you can do is either altering the
SQL
statement using filters as suggested by @Eric Holmes which is an advanced technique. You need to know what you are doing.Or you could just make a separate query loading the taxonomy terms first (using
LIKE
) and then loading the actual posts.Here is a simple sample for loading posts that are in relation to any terms matching a
LIKE
compare against the$search
variable.WP_Tax_Query respectively the Taxonomy Parameter of
WP_Query
orget_posts()
does only take the following for theoperator
argument:So you can not use
LIKE
asoperator
.Actually you don’t need to use compare arguments/operators in taxonomy queries (but in meta queries, yes.)
so, this modified part should behave as using ‘LIKE’ by default: