どのように並べ替え'query_posts"機能によりカスタム項目を関連付けを制限による別のカスタムフィールド
質問
私タシリーズのポスWP、以下の機能:
<?php
$thirtydays = date('Y/m/d', strtotime('+30 days'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts( array(
'post_type' => array('post', 'real-estate'),
'meta_key' => 'Time Available',
'meta_compare' => '<=',
'meta_value' => $thirtydays,
'paged' => $paged ));
?>
この部分です。では基本的に引き全ての不動産投稿が返す結果として利用可能時間の30ますようお願い致します。
このものだから順に、高精度のデータから別のカスタムフィールド,'。'
またの追加を標準 'orderby' => 'meta_value', 'meta_key' => 'Price'
な結果は以内に30日間とします。
ができますこれらを組み合わせ。とすることはできるボタンを再度のクエリではありながらも、ベッドルームなどが有ります。こちらは日本もに特異的なWP?
解決
うまいます。このクラスと呼ばれ PostsOrderedByMetaQuery
広がる WP_Query
とを受け入れ新たな引数 'orderby_meta_key'
と"orderby_order'
:
class PostsOrderedByMetaQuery extends WP_Query {
var $posts_ordered_by_meta = true;
var $orderby_order = 'ASC';
var $orderby_meta_key;
function __construct($args=array()) {
add_filter('posts_join',array(&$this,'posts_join'),10,2);
add_filter('posts_orderby',array(&$this,'posts_orderby'),10,2);
$this->posts_ordered_by_meta = true;
$this->orderby_meta_key = $args['orderby_meta_key'];
unset($args['orderby_meta_key']);
if (!empty($args['orderby_order'])) {
$this->orderby_order = $args['orderby_order'];
unset($args['orderby_order']);
}
parent::query($args);
}
function posts_join($join,$query) {
if (isset($query->posts_ordered_by_meta)) {
global $wpdb;
$join .=<<<SQL
INNER JOIN {$wpdb->postmeta} postmeta_price ON postmeta_price.post_id={$wpdb->posts}.ID
AND postmeta_price.meta_key='{$this->orderby_meta_key}'
SQL;
}
return $join;
}
function posts_orderby($orderby,$query) {
if (isset($query->posts_ordered_by_meta)) {
global $wpdb;
$orderby = "postmeta_price.meta_value {$this->orderby_order}";
}
return $orderby;
}
}
呼び出すとよいでしょうかこのように:
$thirtydays = date('Y/m/d', strtotime('+30 days'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$query = new PostsOrderedByMetaQuery(array(
'post_type' => array('post', 'real-estate'),
'meta_key' => 'Time Available',
'meta_compare' => '<=',
'meta_value' => $thirtydays,
'paged' => $paged,
'orderby_meta_key' => 'Price',
'orderby_order' => 'DESC',
));
foreach($query->posts as $post) {
echo " {$post->post_title}\n";
}
でコピーすることができ PostsOrderedByMetaQuery
クラスへのプレゼンテーションの functions.php
ファイル、または使用できる内 .php
ファイルのプラグインできます。
したい場合は試験られなかったのでうれしいですん セバーコード る要旨をダウンロードでき、コピーをwebサーバのルートとして test.php
, 変更のご利用の場合、その請求からブラウザを使用URLのように http://example.com/test.php
.
武器agiは、dexで下がらないboxerぐ.
-マイク
P.S.この答えは 非常に類似した応答った上でWordPressの回答, は、姉妹サイトのStackOverflowは多数のWordPressの愛好家ような疑問に答えます。するために この答えにも では足りな説明とか見たい WordPressの回答.んかを検討することになるだろう投稿"WordPressの問題 あり ものですか。
他のヒント
なぜなら 'orderby' => 'meta_value'
必要 meta_key
, 、 そしてあなたの meta_key
比較にはすでに使用されていますが、これができるとは思いません。 meta_key
一連のオプションではなく、単一の値のみを受け入れます。これは間違いなく制限であり、解決策が見つからない場合はリクエストを開くことをお勧めします。
クエリを再実行するボタンに関しては、ページをリロードしてクエリ変数を渡してソートを変更するだけです。残念ながら、あなたはまだあなたの質問の最初の部分を解決する必要があります。
アップデート
PHPを使用して、返された配列をいつでも並べ替えることができます。
また、利用可能な時間でチェックしているものがわかりませんが、クエリをもう少しカスタマイズするのに役立つフィルターを登録できます。 add_filter('posts_where', ...);
http://codex.wordpress.org/function_reference/query_posts