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?

  • Are you using WP_Query for this? – Milo Jan 6 '15 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 '15 at 15:05
  • 1
    Posting the methods you have tried would help us to help you better. – cybmeta Jan 6 '15 at 15:42
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();
    }
}
  • Well I get error "Warning: trim() expects parameter 1 to be string, array given in ....meta.php" – Wordprez Jan 6 '15 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 '15 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 '15 at 20:14
  • you have to loop over $results to output them, see edit above. – Milo Jan 6 '15 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 '15 at 5:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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