Как правильно вызывать настраиваемые даты полей в фильтр posts_where с использованием операторов SQL

В настоящее время у меня есть список записей в цикле между двумя датами, используя фильтр posts_where :

  function filter_where( $where = '' ) { $where .= " AND post_date >= '2000-01-01' AND post_date <= 2004-12-31' "; return where; } add_filter('posts_where', 'filter_where'); query_posts($query_string); while (have_posts()) : the_post(); the_content(); endwhile; 

В meta_key именем original_date я сохранил другую дату для каждого сообщения, которое я хочу использовать вместо post_date . Как правильно вызвать эту meta_key в запрос $where для выполнения той же цели, что и post_date ?

 $where .= " AND [meta_key=original_date] >= '2000-01-01' AND [meta_key=original_date] <= '2004-12-31' "; 

Например, следующий SQL-запрос, похоже, не работает, хотя правильные значения ( 2001-10-29 , 2004-11-03 и т. Д.) Присутствуют в original_date meta_key сообщений:

 global $wpdb; $where .= " AND (SELECT meta_value FROM $wpdb->postmeta WHERE meta_key='original_date' ) >= '2000-01-01' AND (SELECT meta_value FROM $wpdb->postmeta WHERE meta_key='original_date' ) <= '2004-12-31' "; 

в то время как следующее работает отлично на тех же постах, используя их post_date качестве ссылки:

 $where .= " AND post_date >= '2000-01-01' AND post_date <= 2004-12-31' "; 

Возможно, массив meta_value нужно лишить какого-либо постороннего материала, чтобы отформатировать результаты в той же форме, что и post_date ? Как мы можем подойти к этому?

Спасибо AmbitiousAmoeba за ответ. Следующий улучшенный код решает проблему:

 function filter_where( $where = '' ) { global $wpdb; $where .= " AND (($wpdb->postmeta.meta_key = 'original_date' AND $wpdb->postmeta.meta_value >= '2000-01-01') AND ($wpdb->postmeta.meta_key = 'original_date' AND $wpdb->postmeta.meta_value <= '2004-12-31')) "; return where; } add_filter('posts_where', 'filter_where'); query_posts($query_string); while (have_posts()) : the_post(); the_content(); endwhile; 

Если у вас есть Неизвестный столбец wp_postmeta.meta_key в разделе where

Вероятно, вы захотите присоединиться к $wpdb->postmeta таблице в этот запрос:

 function custom_posts_join($join){ global $wpdb; $join .= " LEFT JOIN $wpdb->postmeta ON $wpdb->posts.ID = $wpdb->postmeta.post_id "; return $join; } add_filter( 'posts_join' , 'custom_posts_join');