Skip to main content
2 of 3
added 1328 characters in body

convert custom query to wp_query

My query is as below

 $querydetails = "
   SELECT wposts.*
   FROM $wpdb->posts wposts 
   INNER JOIN $wpdb->postmeta wpostmeta ON wposts.ID = wpostmeta.post_id 
   INNER JOIN $wpdb->term_relationships yprelation ON yprelation.object_id = wposts.ID
   INNER JOIN $wpdb->term_taxonomy wptaxonomy ON wptaxonomy.term_taxonomy_id = yprelation.term_taxonomy_id
   INNER JOIN $wpdb->terms wpterms ON wpterms.term_id = wptaxonomy.term_id
   WHERE wpostmeta.meta_key = 'event_date'
   AND STR_TO_DATE(wpostmeta.meta_value, '%d-%m-%Y %H:%i:%s') >= NOW()
   AND (wposts.post_status = 'publish' || wposts.post_status = 'pending' || wposts.post_status = 'future')
   AND wposts.post_type = 'events'
   AND (wpterms.term_id = 5 OR wptaxonomy.parent = 5)
   ORDER BY STR_TO_DATE(wpostmeta.meta_value, '%d-%m-%Y %H:%i') LIMIT 0,10";

I want to convert this query into wp_query, I have tried below code

    $args = array(
    'post_type' => 'events',
    'post_status' => array('publish', 'pending', 'future'),
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => 'event_date',
            'value' => date('Y-m-d H:i:s'),
            'type' => 'date',
            'compare' => '>='
        )
    ),
    'tax_query' => array(
        'relation' => 'and',
        array(
            'taxonomy' => 'ad_cat',
            'field' => 'slug',
            'terms' => 'event-2'
        )
    )
);

$query = new WP_Query($args);
echo "Last SQL-Query: {$query->request}";

retuns below result

SELECT SQL_CALC_FOUND_ROWS yp_posts.ID 
FROM yp_posts 
INNER JOIN yp_term_relationships ON (yp_posts.ID = yp_term_relationships.object_id) 
INNER JOIN yp_postmeta ON (yp_posts.ID = yp_postmeta.post_id) 
WHERE 1=1 
AND ( yp_term_relationships.term_taxonomy_id IN (581,541,547,544,545,546,548,550,572,585,599,607,616,619) ) 
AND yp_posts.post_type = 'events' 
AND ((yp_posts.post_status = 'publish' OR yp_posts.post_status = 'future' OR yp_posts.post_status = 'pending')) 
AND ( (yp_postmeta.meta_key = 'event_date' 
    AND CAST(yp_postmeta.meta_value AS DATE) >= '2014-12-24 04:30:01') ) 
GROUP BY yp_posts.ID ORDER BY yp_posts.post_date ASC LIMIT 0, 10 

but did not get expected results

only issue is it return AND CAST(yp_postmeta.meta_value AS DATE) >= '2014-12-24 04:30:01') )
instead of
AND STR_TO_DATE(wpostmeta.meta_value, '%d-%m-%Y %H:%i:%s') >= NOW()

please help