Como chamar corretamente datas de campo personalizadas em um filtro de posts_where usando instruções SQL

Atualmente, eu tenho as postagens de listview de loop entre duas datas usando o filtro de 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; 

Em uma meta_key chamada original_date eu armazenei uma data diferente para cada publicação que eu gostaria de usar em vez do post_date . Como faço para chamar essa meta_key para a consulta $where para cumprir o mesmo propósito que o post_date ?

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

Por exemplo, a seguinte consulta SQL não parece funcionar, mesmo que os valores corretos ( 2001-10-29 , 2004-11-03 , etc.) estejam presentes na meta_key original_date das postagens:

 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' "; 

enquanto o seguinte funciona bem nas mesmas postagens usando seu post_date como referência:

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

Talvez a matriz meta_value precisa ser despojada de algum material estranho para formatar os resultados na mesma forma que post_date ? Como podemos abordar isso?

Solutions Collecting From Web of "Como chamar corretamente datas de campo personalizadas em um filtro de posts_where usando instruções SQL"

Obrigado a AmbitiousAmoeba pela resposta. O seguinte código melhorado resolve o problema:

 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; 

Se você tiver coluna Desconhecida wp_postmeta.meta_key em where cláusula

Você provavelmente deseja juntar a $wpdb->postmeta nesta consulta:

 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');