1

私の投稿には多数のカスタム フィールドがあり、現在「長すぎる」順に並べられています。

「over-lengthin」という別のカスタム フィールドがあります。

引き続き投稿を長すぎる順序で並べたいのですが、2 つの投稿がこのフィールドに同じ値を持っている場合は、それらも長すぎる順序で並べたいと思います。

クエリを変更したり、これを実行する関数を追加したりするにはどうすればよいでしょうか?

これが現在のクエリによるものです

$loop = new WP_Query( array ( 'post_type' => 'new', 'orderby' => 'meta_value_num', 'meta_key' => 'over-length', 'meta_query' => array( array( 'key' => 'over-make', 'value' => 'Doral', 'compare' => 'LIKE') ) ) );

わかりましたので、$wpdb->get_results を使用するようにクエリで書き直しましたが、2 つの異なるカスタム フィールドで注文する方法についてはまだ少し混乱しています。

ここに私の新しいクエリがあります:

$wpdb->get_results("SELECT * FROM $wpdb->posts, wp_postmeta  WHERE wp_posts.ID = wp_postmeta.post_id AND wp_posts.post_status = 'publish' AND wp_posts.post_type = 'new' AND wp_postmeta.meta_value = 'Doral' ORDER BY");

ここで、カスタム フィールドの「over-length」と「over-lengthin」で注文する必要があります

これが機能しているようです。これが私の最後のクエリです。

$wpdb->get_results("SELECT * FROM $wpdb->posts 
LEFT JOIN $wpdb->postmeta AS overlength ON(
$wpdb->posts.ID = overlength.post_id
AND overlength.meta_key = 'over-length'  
)
LEFT JOIN $wpdb->postmeta AS overlengthin ON(
$wpdb->posts.ID = overlengthin.post_id
AND overlengthin.meta_key = 'over-lengthin'  
)
LEFT JOIN $wpdb->postmeta AS overmake ON(
$wpdb->posts.ID = overmake.post_id
AND overmake.meta_key = 'over-make'  
)
WHERE wp_posts.post_status = 'publish' AND wp_posts.post_type = 'new' AND overmake.meta_value = 'Doral' ORDER BY 0+overlength.meta_value DESC, 0+overlengthin.meta_value  DESC");
4

1 に答える 1

1

正直なところ、複数のカスタム フィールドに関しては、最も簡単な解決策は$wpdb->get_resultsWP_Query の代わりに使用することです。

現在実行されているクエリを取得できます

echo $GLOBALS['wp_query']->request;

次に、SQL を更新し、手順に従って、ここから改訂されたループを作成します。

于 2011-03-28T16:58:55.010 に答える