2013-03-06 35 views
0

我试图通过wp_post &搜索wp_postmeta同时使用此查询:WordPress的JOIN wp_post和wp_postmeta

$querystr = " 
    SELECT $wpdb->posts.* 
    FROM $wpdb->posts, $wpdb->postmeta 
    WHERE $wpdb->posts.ID = $wpdb->postmeta.post_id 
    AND $wpdb->postmeta.meta_key = 'City' 
    AND $wpdb->postmeta.meta_value = 'Vancouver' 
    AND $wpdb->posts.post_status = 'publish' 
    AND $wpdb->posts.post_type = 'talents' 
    ORDER BY $wpdb->posts.post_date DESC 
"; 

$pageposts = $wpdb->get_results($querystr, OBJECT); 

正如你可以看到我搜索具有城市温哥华=作为其元外地职位。但是,如何增加一个条件,我不会让温哥华,卑诗省和温哥华在一起?

水木清华这样的:

AND ($wpdb->postmeta.meta_key = 'Country' 
    AND $wpdb->postmeta.meta_value = 'Canada') 
    AND ($wpdb->postmeta.meta_key = 'City' 
    AND $wpdb->postmeta.meta_value = 'Vancouver') 

回答

2

基于上面提到的链接,我能够创建这个模式来基于3个元值和1个自定义分类来搜索自定义posts_types。

所以我的结构是:

  1. 每个自定义后(人才)有3个自定义字段(市,国家,性别)。
  2. 每个自定义职位属于自定义分类“语言”与某些类别,如英语,西班牙语,俄语等

所以查询波纹管正在寻找在加拿大,多伦多一名女谁也不会讲法语。

$querystr= "SELECT * FROM wp_posts 
LEFT JOIN wp_postmeta v1 ON (wp_posts.ID = v1.post_id) 
LEFT JOIN wp_postmeta v2 ON (wp_posts.ID = v2.post_id) 
LEFT JOIN wp_postmeta v3 ON (wp_posts.ID = v3.post_id) 
LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 
LEFT JOIN wp_terms ON (wp_term_taxonomy.term_id = wp_terms.term_id) 
WHERE 
wp_terms.name = 'French' AND wp_term_taxonomy.taxonomy = 'Languages' AND wp_posts.post_status = 'publish' AND wp_posts.post_type = 'talents' 
AND v1.meta_value = 'Toronto' 
AND v2.meta_value = 'Canada' 
AND v3.meta_value = 'female' 
ORDER BY wp_posts.post_date DESC"; 
0

我想下面的代码可以帮助你。如果你有任何疑问让我知道。

$args = array(
'post_type' => 'talents', 
'posts_per_page' => 10, 
'meta_query' => array(
    array(
     'key' => 'City', 
     'value' => 'Vancouver', 
     'compare' => '=', 
     'type' => 'CHAR' 
     ) 

), 
    'paged' => $paged 

); 
$temp = $wp_query; 
$wp_query = null; 


       $wp_query = new WP_Query($args); 
     <?php while (have_posts()) : the_post(); 
      global $post; 
/* Your Post content Here    */ 

endwhile; 

wp_reset_query(); 
/* Pagination Code */ 
<?php 
    global $wp_query; 

    $big = 999999999; // need an unlikely integer 

echo paginate_links(array(
    'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))), 
    'format' => '?paged=%#%', 
    'current' => max(1, get_query_var('paged')), 
    'total' => $wp_query->max_num_pages, 
    'prev_text' => __('Previous'), 
    'next_text' => __('Next'), 
    'add_fragment' => __($search_page_link) 
)); 
?> 

您还可以在元值上添加多个条件。 Url: - https://codex.wordpress.org/Class_Reference/WP_Query