1

このクエリを使用して、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);

ご覧のとおり、メタフィールドとしてCity=Vancouverを持つ投稿を検索します。しかし、ブリティッシュコロンビア州バンクーバーとワシントン州バンクーバーを一緒にしないように、もう1つの条件を追加するにはどうすればよいですか?

のようなsmth:

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

2 に答える 2

4

上記のリンクに基づいて、このパターンを作成し、3つのmeta_valuesと1つのカスタム分類法に基づいてカスタムposts_typesを検索することができました。

だから私の構造は:

  1. 各カスタム投稿(talents)には、3つのカスタムフィールド(City、Country、Gender)があります。
  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";
于 2013-03-07T09:54:58.890 に答える
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

于 2013-03-06T10:34:46.927 に答える