我有一个wordpress查询,可以从自定义帖子类型中获取帖子。这些帖子有一个自定义元日期字段。我想把以后有一个dat的帖子放在一个叫做“正在进行”的表中(这部分是完整的,看起来效果很好)。我想把过去日期的帖子放在一个名为“已发布”的表中。这是我遇到问题的地方,因为if语句似乎显示帖子,即使他们有未来的日期。现在,如果完成日期等于或大于时间的开始,我正在使用。正在进行的职位。我正在使用相反的发布帖子。看起来它是相同但倒置的,我不明白为什么查询会从未来的日期中提取帖子。
我做错了什么?
非常感谢提前
ONGOING - 工作
<?php $wp_query_ongoing = new WP_Query( array( 'post_type' => 'research', 'posts_per_page' => 5, 'order' => 'asc' ) ); ?>
<?php while ( $wp_query_ongoing->have_posts() ) : $wp_query_ongoing->the_post(); //start of the loop ?>
<?php
$post_id = get_the_ID();
$completion_date = get_post_meta( $post_id, "duration_end", true );
$publication_date = get_post_meta( $post_id, "publication_date", true );
?>
<?php if (strtotime($publication_date) >= strtotime("now") || strtotime($completion_date) >= strtotime("now")) { ?>
<tr>
<td><?php echo do_shortcode('[wpuf-meta name="_hidden_type"]' ); ?></td>
<td><?php the_title(); ?></td>
...
<td>
<?php echo do_shortcode('[wpuf-meta name="duration_end"]'); ?>
<?php echo do_shortcode('[wpuf-meta name="publication_date"]'); ?>
</td>
</tr>
<?php } ?>
<?php endwhile; //end of the loop ?>
已发布 - 无法正常工作
<?php $wp_query_published = new WP_Query( array( 'post_type' => 'research', 'posts_per_page' => 5, 'order' => 'asc' ) ); ?>
<?php while ( $wp_query_published->have_posts() ) : $wp_query_published->the_post(); //start of the loop ?>
<?php
$post_id = get_the_ID();
$completion_date = get_post_meta( $post_id, "duration_end", true );
$publication_date = get_post_meta( $post_id, "publication_date", true );
?>
<?php if ( strtotime($publication_date) <= strtotime("now") || strtotime($completion_date) <= strtotime("now")){ ?>
<td>
<?php echo do_shortcode('[wpuf-meta name="duration_end"]'); ?>
<?php echo do_shortcode('[wpuf-meta name="publication_date"]'); ?>
</td>
<?php } ?>
<?php endwhile; //end of the loop ?>
答案 0 :(得分:1)
仔细考虑你的条件。你为PUBLISHED展示的那个与你对ONGOING的完全相反。
试试这个:
if(strtotime($publication_date) < strtotime("now") && strtotime($completion_date) < strtotime("now"))
请注意,条件的每个部分与ONGOING条件中的相反(我删除了=
)。另请注意,在这种情况下,您需要使用AND来连接这些条件,因为如果您说任一条件必须为true才能使项目进入ONGOING类别,那么必须满足两个条件才能进入PUBLISHED类别。< / p>
根据您的评论,您可能希望为此进行比较:
$comparison_date = get_post_meta( $post_id, "duration_end", true );
if (empty($comparison_date )) {
$comparison_date = get_post_meta( $post_id, "publication_date", true );
}
$comparison_date = strtotime($comparison_date);
// use this for ONGOING
if ($comparison_date >= time()) {
...
}
// use this for PUBLISHED
if ($comparison_date < time()) {
...
}
您还应该强烈考虑将其重构为可以处理过滤案例的单个脚本。没理由复制所有这些代码。