WordPress.org

Ready to get started?Download WordPress

Forums

Using Meta query to find value in Custom Field array (4 posts)

  1. omatan
    Member
    Posted 2 years ago #

    I am using the Advanced Custom Field Plugin to create references from one custom object to multiple instances of another.

    The plugin stores the multiple references as an array. So for example my post refers to posts 6,17 and 345, the meta value stored is "6,17,345".

    I am trying to query for a particular post all references to it. I have seen some references to the same problem in this forum. see e.g. here.

    That would suggest :

    $posts = get_posts(array(
    		'numberposts' => -1,
    		'post_type' => 'link',
    		'meta_query' => array(
    			array(
    				'key' => 'related_to',
    				'value' => get_the_ID(),
    				'compare' => 'LIKE'
    			)
    		)
    	));

    However this is not correct as the following example demonstrates: if the id of the post was '45' it would return the reference above that contains '345', but not '45'.

    In native SQL i could write up a regular expression to do the right thing - what is the right "wordpress" way to get the results I want - just write a custom query ?

    Thanks,

    -Ofer

  2. grimmwerks
    Member
    Posted 2 years ago #

    Hey Ofer - have you found a fix for this? Running into the same thing.

  3. bcworkz
    Member
    Posted 2 years ago #

    You can use $wpdb->get_results($sqlquery) to send a native SQL query. $wpdb is a global database object, and $sqlquery would be your custom query. This is an acceptable "wordpress" way.

  4. Nate Reist
    Member
    Posted 2 years ago #

    Omatan, couple suggestions:
    Advanced Custom Fields allows for relationship field types, are you using that?

    Have you tried "compare"=>"IN" instead of "compare" => "LIKE"?

    What about "type" => "NUMERIC"?

    The reason you are running into a problem I can see are your type parameter for the meta query is set to char (that's the default). 45 is actually LIKE 345 in terms of a char based LIKE comparison, because it is part of the string 345. NUMERIC will compare the integers

    An easier way to accomplish this though might be with a tax_query and some taxonomy to achieve post association.

    Hope that helps, let me know if you have any questions.

Topic Closed

This topic has been closed to new replies.

About this Topic