【发布时间】:2012-09-22 14:28:25
【问题描述】:
这是一个自定义的 Wordpress 页面,但我认为基本的数组原则应该适用。我以前没有使用过复杂的数组,所以有点迷茫,试错还没有奏效。
我有一个帖子数据库,每个帖子都有“商店”和“过期”的元键。 'expired' 是一个日期 (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
以及我想看到的(注意 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
这是我尝试合并两者的数组代码
$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
我确信我的想法是正确的,需要创建两个数组并使用“+”而不是 array_merge() 将它们连接起来,但这就是我无法进一步了解的地方。
有人可以请教一下吗?谢谢!
【问题讨论】:
-
array_merge 有什么问题?而且我没有想出任何使用
+运算符来合并到数组?你能提供一些有关这方面的信息吗? -
我在 php.net/manual/en/function.array-merge.php 上使用示例 3 中的提示作为“+”运算符,如果我使用 array_merge(),则“args2”会覆盖“args”,因为它们共享键名。我的目标是拆分查询的结果:(1)一方发布日期>今天(活动)(2)另一方发布日期 5)。
-
你能以 var_dump 格式分享你想要的数组吗?无论如何,这些信息很有用:)
-
老实说,我不确定它在 var_dump 中的外观,我正在一起破解它,试图让它按原样工作!我只是想让查询根据“过期”元键值对帖子进行排序,将日期在“$today”之后的帖子放在顶部,然后在“$today”之前的日期放在它们之后,所以帖子仍然存在,但由于它已经“过期”,它不再需要在顶部!这是假设数组是正确的方法,我很确定它们是。