The checkboxs saved in db !
The db structure (wp_postmeta table) :
________________________________________________________________
| | |
| meta_key | meta_value |
|_______________|_______________________________________________|
| | |
| artist_nameaa | a:2:{i:51;s:2:"51";i:60;s:2:"60";} |
|_______________|_______________________________________________|
two checkboxs has been selected !
i want to find posts where artist_nameaa have 51 key in his array
51 is an example
Here is my try :
wp_reset_postdata();
global $post;
$args = array(
'post_type' => 'songs',
'meta_query' => array(
array(
'key' => 'artist_nameaa',
'value' => serialize(array($post->ID=>"$post->ID")),// a:1:{i:51;s:2:"51";}
'compare' => 'IN'
)
),
'no_found_rows' => true,
'update_post_meta_cache' => false,
'update_post_term_cache' => false,
'ignore_sticky_posts' => 1,
'post__not_in' => array($post->ID),
'posts_per_page' => -1
);
$query = new WP_Query($args);
return $query;
The IN() comparison operator is used to replace several where clauses (docs). It will ultimately be looking for results that are an exact match.
What you are doing is more of a search. You have no idea where in the serialized string your data set will fall. For this type of search, you should use the LIKE operator (docs). You will need to utilize the wildcard flags for this type of search.
From what I can gather about the type of data you are storing, you may want to rethink your storage mechanism. Custom Fields do support multiple values for the same meta key, which would be a quick approach. You could also take advantage of Custom Post Types or a custom table (wpdb).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With