これはカスタムWordpressページ用ですが、基本的な配列の原則を適用する必要があると思います。私はこれまで複雑なアレイを扱ったことがないので、少し迷っています。試行錯誤はまだうまくいきません。
投稿のデータベースがあり、各投稿には「shop」と「expired」のmeta_keyがあります。「期限切れ」は、投稿のコンテンツがいつ期限切れになるかを訪問者に通知するために使用される日付(YYYY-MM-DD)であり、このキーは私が使用しようとしているものです。
投稿の「有効期限」の日付が今日より前の場合は、「有効期限が切れたオファー」と表示されます
「有効期限」の日付が将来の場合は、「オファーはX日で有効期限が切れます」と表示されます(このスクリプトは以下に表示されていません。必須ではありません)。
投稿は、「有効期限」の日付、ASCの順にリストされます。問題は、投稿の有効期限が切れたときに、その投稿を一番上に表示するのではなく、最後に表示したいということです。
私が現在見ているものの例:
Post 1 | Expired 3 days ago
Post 2 | Expired 1 day ago
Post 3 | Expires in 2 days
Post 4 | Expires in 6 days
そして私が見たいもの(Post Xの注文に注意してください):
Post 3 | Expires in 2 days
Post 4 | Expires in 6 days
Post 2 | Expired 1 day ago
Post 1 | Expired 3 days ago
これは、2つをマージしようとした私の配列コードです
$postid = get_the_ID();
$meta1 = get_post_meta($postid, 'shop', true);
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$today = date('Y-m-d', time());
$args = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'shop',
'value' => $meta1
)
),
'paged' => $paged,
'posts_per_page' => '5',
'meta_key' => 'expired',
'meta_value' => $today,
'meta_compare' => '>',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$args2 = array(
'post_type' => 'post',
'meta_query' => array(
array(
'key' => 'shop',
'value' => $meta1
)
),
'meta_key' => 'expired',
'meta_value' => $today,
'meta_compare' => '<',
'orderby' => 'meta_value',
'order' => 'DESC'
);
$final = $args + $args2;
$query = new WP_Query( $final );
while ( $query->have_posts() ) : $query->the_post(); ?>
HTML FOR DISPLAYING POST
endwhile;
現時点では、「$ args2」に注意を払っていないようで、$argsのみが表示されます。
私の考えは正しい方向にあると確信しています。2つの配列を作成し、array_merge()ではなく「+」でそれらを結合する必要がありますが、それ以上は得られません。
誰かが親切に光を当ててもらえますか?ありがとう!