web-dev-qa-db-ja.com

カテゴリとカスタムフィールドで投稿を検索してから、別のカスタムフィールドを注文する - ヘルプ!

OK私は以下の基準を使って投稿を問い合わせる必要があります:

category_name = office、meta_key = featured_post、meta_value =はい

数値を持つ2番目のカスタムフィールドを使用してこれらの結果を並べ替える

meta_key = prop_order

次のクエリで正しい投稿を取得していますが、2番目のカスタムフィールドで並べ替えていません。

<?php $recent = new WP_Query("category_name=office&meta_key=featured_post&meta_value=Yes&posts_per_page=3&orderby=date&order=ASC"); while($recent->have_posts()) : $recent->the_post(); ?>

しかし、私はすでにクエリでカスタムフィールドを使用しているので、orderby = meta_valueを使用することはできません。

フォーラムで次のようなSQLクエリを見つけましたが、うまくいきません。

    <?php
 global $wpdb;
 global $post;
 $querystr = "
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta AS proporder ON(
$wpdb->posts.ID = proporder.post_id
AND proporder.meta_key = 'prop_order'
)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id = 3
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->posts.post_status = 'publish'
AND $wpdb->wpostmeta.meta_key = 'featured_post' 
AND $wpdb->wpostmeta.meta_value = 'Yes' 
ORDER BY proporder.meta_value ASC
 ";

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

?>

任意の助けは大歓迎です!

ありがとう

デイブ

1
daveaspinall

ご協力ありがとうございます私はこれに戻って投稿されることは決してないだろうと実感しました! Ethanと他のいくつかの会社のおかげで実用的なコードが生まれました。

<?php
 global $wpdb;
 global $post;
 $querystr = "
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta AS proporder ON(
$wpdb->posts.ID = proporder.post_id
AND proporder.meta_key = 'prop_order'
)
LEFT JOIN $wpdb->postmeta AS propfeatured ON(
$wpdb->posts.ID = propfeatured.post_id
AND propfeatured.meta_key = 'featured_post'
)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.term_id = 4
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->posts.post_status = 'publish'
AND propfeatured.meta_value='Yes'
ORDER BY proporder.meta_value ASC
 ";

 $pageposts = $wpdb->get_results($querystr, OBJECT);
 //print_r($querystr);
?>
<?php foreach ($pageposts as $post): ?>
<?php setup_postdata($post); ?>

<!-- some post stuff here -->

<?php endforeach; ?>

'prop_order'と 'featured_post'はカスタムフィールドで、featured_post = 'Yes'と一致する投稿が返され、ASC順に 'prop_order'の順に並べられます。

お役に立てれば!

1
daveaspinall

私はあなたの質問を私のローカルワークステーションで走らせた。タイプミスがあるようです。

$ wpdb-> wpostmeta.meta_valueではなく、$ wpdb-> postmeta.meta_valueが必要です(2回使用)。

1
Ethan Seifert