メタデータ "data_de_lancamento"(開始日)が今日より<=小さいカスタム投稿タイプ "jogos"をクエリしています。そのフィールドはフォーマットdd/mm/yyを使います。
そのクエリから返された投稿は、カスタムフィールド "views"の降順に並べ替える必要があります。
私の現在のコードは:
date_default_timezone_set('Europe/Lisbon');
$data = date("d/m/y");
global $wpdb;
$sql = "SELECT wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2
WHERE wposts.ID = wpostmeta.post_id
AND wposts.ID = wpostmeta2.post_id
AND wpostmeta.meta_key = 'views'
AND wpostmeta2.meta_key = 'data_de_lancamento'
AND wpostmeta2.meta_value < $data
AND wposts.post_type = 'jogos'
AND wposts.post_status = 'publish'
ORDER BY wpostmeta.meta_value ASC";
$resultado = $wpdb->get_results($sql, OBJECT);
クエリを実行するときは、WP_Classのmeta_query
パラメータを使用する必要があります。このような何かがあなたを正しい方向に向けるはずです。
$data = date("Y-m-d");
$args = array(
'post_type' => 'jogos',
'meta_query' => array(
array(
'key' => 'data_de_lancamento',
'value' => $data,
'compare' => '<='
)
),
'meta_key' => 'views',
'orderby' => 'meta_value',
'order' => 'DESC'
);
$query = new WP_Query( $args );
これに対するキャッチは 'dd/mm/yy'の形で日付を比較することはほとんど不可能であるということです。そのため、このコードはうまくいきません。あなたは最初にあなたの日付フォーマットを 'yyyy-mm-dd'に変更する必要があります。これは日付比較を実行するためのはるかに便利な方法です。また、あなたはそれが正しく機能していることを確認するためにオペレータといくつかのテストを行う必要があるかもしれません。
WP 3.1の新機能であるmeta_query
を使用するように指定したことに注意してください。 meta_key
とmeta_value
はWP 3.1以降では非推奨です。しかし、meta_value
で並べるには、実際にはmeta_key
を順序付けしたい値として指定する必要があります。混乱し、よく文書化されていません。
参考文献:
http://codex.wordpress.org/Function_Reference/WP_Query#Custom_Field_Parameters
http://codex.wordpress.org/Function_Reference/WP_Query#Order_.26_Orderby_Parameters