分類用語food-and-beverage
に関連付けられている投稿のみのデータを返すように選択クエリを作成したい
SELECT wp_postmeta . * , wp_posts.post_name
FROM wp_posts, wp_postmeta, wp_terms, wp_term_relationships
WHERE wp_posts.post_type = 'projects'
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = wp_terms.term_id
AND wp_terms.slug = 'food-and-beverage'
ORDER BY wp_posts.ID DESC
私には未知の理由で、これはfood-and-beverage
が選択されていない投稿を返しています
以下の答えで証明されているように、これは理想的なアプローチではありませんが、コードのリファクタリング(これはSQLの生成であり、それ以上のものがあります)は永遠にかかると私は確約しました。
編集
私のやり方は間違っているということは誰もが(私も含めて)合意しているように思われるので、しぶしぶリファクタリングを試みるつもりです。
しかし、誰かが私のために手っ取り早い解決策をまとめることができる場合に備えて、当分の間質問を未解決のままにするつもりです(私は喜んであなたにいくつかの賞金ポイントを落とします)。
大胆/狂気のために、ここにソースの大きな塊を持つ要旨があります。 https://Gist.github.com/2950395
私はajaxにそれをPOST変数として "フィルタ"するいくつか渡します。
(私はあなたがこれから傾いていることを理解しています、しかしあなたがそれを動かすことができるなら多分それは価値があります。WP_Queryのための3.4の最近の性能改善でこれは価値があるかもしれません。
これが二次ループである場合、WP_Query
が正しい判断です。そうでなければ、 pre_get_posts
のようになるでしょう。
WP_Query
を使うときは、次のことを確認してください。
$wp_query
として保存することで問題を引き起こし、その後既存のクエリオブジェクトを上書きします。$my_custom_query->have_posts();
tag
やtax
var(非推奨)を使用するのではなく、tax_queryを使用します。あなたの例を見て、これは提案されたループです:
$food_query_args = array(
'post_type' => 'projects',
'tax_query' => array(
array(
'taxonomy' => 'post_tag', // or the name of your custom taxonomy
'field' => 'slug',
'terms' => 'food-and-beverage' // FYI, it's more stable imho to use the ID if you can. If you do, that switch 'slug' in the preceding line to 'id'
)
)
);
$food_query = new WP_Query( $food_query_args );
if( $food_query->have_posts() ) : while( $food_query->have_posts() ) : $food_query->the_post();
// STUFF
endwhile; endif; wp_reset_postdata();
これらのSQLクエリを書く必要はありません。あなたはWP_Query APIを利用することができます。
以下は、タグに「飲食物」という用語が含まれている投稿を表示します。
$query = new WP_Query( array( 'tag' => 'food-and-beverage' ) );
別の分類法を使用している場合は、tag
の代わりにそれを使用してください。
他のオプションを使用して投稿をフィルタリングする必要がある場合は、WP_QueryのAPIドキュメント全体をここで確認できます。 http://codex.wordpress.org/Class_Reference/WP_Query
それはあなたがSQLを書くことからあなたを救うでしょう。