if语句基于日期参数

时间:2015-05-14 15:05:29

标签: php wordpress date if-statement

我有一个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 ?>

1 个答案:

答案 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()) {
   ...
}

您还应该强烈考虑将其重构为可以处理过滤案例的单个脚本。没理由复制所有这些代码。