0

I have created custom .php file that should show list of all posts that correspond to user's choice. I have 3 custom fields and 1 category condition. I've tried all the queries i could possibly find in wordpress codex database but nothing seems to work.

I've created 3 custom fields: a_field,a_fieldd,a_fielddd (and ofcourse i have posts with those fields already posted for the test) now I just want to show all of the posts with custom fields with specified values (user's choice) and only if those posts are inside the chosen category

EDIT

I have a query (with just 1 value for test), which seems to be working, but sometimes takes 0,00002s someties up to 4 seconds. any suggestions? I know it would be better if I use wp_query but I found this way to be easier to modify. in this example i am trying to get the post with meta_key a_field with value "5"

SELECT wp_posts.ID FROM wp_posts 
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
WHERE 1=1 AND wp_posts.post_type = 'post' 
AND wp_posts.post_status = 'publish'
AND ( (wp_postmeta.meta_key = 'a_field' 
AND  find_in_set('5',wp_postmeta.meta_value)) ) 
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 10  

any suggestions?

3
  • Are you using WP_Query for this?
    – Milo
    Jan 6, 2015 at 14:25
  • this is just a simple query to give an example, i am not using any method, just tried few of them and nothing seemed to work
    – Wordprez
    Jan 6, 2015 at 15:05
  • 1
    Posting the methods you have tried would help us to help you better.
    – cybmeta
    Jan 6, 2015 at 15:42

1 Answer 1

0

For multiple category handling you need either category__in or a tax_query, for multiple custom fields you use meta_query. The various options for both of these are covered in the WP_Query codex page.

$args = array(
    'posts_per_page' => 10,
    'category__in' => array( 163, 165 ),
    'meta_query' => array(
        array(
            'key' => 'a_field',
            'value' => array( 1, 2 ),
            'compare' => 'IN'
        ),
        array(
            'key' => 'a_fieldd',
            'value' => 3,
            'compare' => '='
        ),
        array(
            'key' => 'a_fielddd',
            'value' => array( 1, 3, 5 ),
            'compare' => 'IN'
        )
    )
);
$results = new WP_Query( $args );

if( $results->have_posts() ){
    while( $results->have_posts() ){
        $results->the_post();
        the_title();
    }
}
6
  • Well I get error "Warning: trim() expects parameter 1 to be string, array given in ....meta.php"
    – Wordprez
    Jan 6, 2015 at 19:38
  • sorry, the 2nd meta value should be a string not an array since you're doing an equality test.
    – Milo
    Jan 6, 2015 at 20:10
  • well now i get blank page (meaning no results maby?) and I am not always sure wether I am going to do just single = or an array, since that depends on the users, if their are going to chose 1,2,3 or just 1 or maby even no comparsion for that particular custom_field
    – Wordprez
    Jan 6, 2015 at 20:14
  • you have to loop over $results to output them, see edit above.
    – Milo
    Jan 6, 2015 at 20:25
  • Well nothing shows, there are no results found, I've tried with var_dump and it shows really long query which seems to return 0 rows. I will try to edit the fields(if I am missing any value) and will be back with the results.
    – Wordprez
    Jan 7, 2015 at 5:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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