根据元箱日期发布查询

时间:2018-02-25 作者:FRQ6692

我正在努力通过活动管理的wp_query获得一个有效的解决方案,目前按活动开始日期发布订单;时间过得很好。现在我想要一些自定义设置。

使用两个元框meta_key=> start_datetimemeta_key=> end_datetime

1- key=> end_datetime 是帖子结束的日期和时间(不再显示在结果中)

2- 另外,在帖子中打印一些文本,因为还有两个小时才能开始活动。e.g <p>LIVE</p>

How to hide post when date&time end, and add some text as remain 2 hours to start?

$today = date("Y/m/j");
$args (array(
  \'post_type\' => \'event\',
  \'posts_per_page\' => 10,
  \'meta_key\' => \'start_datetime\',
  \'orderby\' => \'meta_value\',
  \'order\' => \'ASC\',
  \'meta_query\' => array(
    array(
      \'key\' => \'start_datetime\',
      \'value\' => $today,
      \'compare\' => \'>=\',
      \'type\' => \'CHAR\'
    )
   ),
  \'tax_query\' => array(
  \'relation\' => \'AND\',
  array(
    \'key\' => \'end_datetime\',
    \'meta-value\' => $value,
    \'compare\' => \'=<\'
  )
 )
));
$query = new WP_Query( $args );
  if ( $query->have_posts() ) {
  while( $query->have_posts() ) {
    $query->the_post();
    the_title();
  }
}

1 个回复
SO网友:Beee

我检查了你的查询,发现里面有很多垃圾。您可以将元键定义为2x。一次作为meta\\u键,一次作为meta\\u查询。只保留查询,它有更多选项。

其次,税务查询完全错误。税务查询的参数与元查询的参数不同。您需要分类、字段、术语和可能的比较。根据您的信息,我看不到使用税务查询的理由,所以我在示例中删除了它。

我非常喜欢将日期/时间存储为unix时间戳。比日期字符串更容易比较和排序。通过查看您的today字符串,我假设其余的也是该格式,因此我将使用该格式作为示例。

下面的代码是我背下来写的,因为我没有可以处理的事件(使用那个元键),但我认为你会得到大部分想要的结果,如果没有,也许可以稍微调整一下。

$today = date( \'Y/m/d\' );

$args = array(
    \'post_type\'      => \'event\',
    \'posts_per_page\' => 10,
    \'order\'          => \'ASC\',
    \'meta_query\'     => array(
        // get posts which have an end_datetime which is bigger than or equal to $today (and thus hide the ones which have ended before today)
        \'end_clause\' => array(
            \'key\'     => \'end_datetime\',
            \'value\'   => $today,
            \'compare\' => \'>=\',
            \'type\'    => \'DATE\'
        )
    ),
    \'orderby\'        => array( \'end_clause\' => \'DESC\' ),
);
$query = new WP_Query( $args );
if ( $query->have_posts() ) {
    while( $query->have_posts() ) {
        $query->the_post();

        the_title();

        // check if start_datetime is not empty
        if ( ! empty( get_post_meta( get_the_ID(), \'start_datetime\', 1 ) ) ) {
            // make unix timestamp of start_datetime
            $start_datetime = strtotime( date( \'U\', get_post_meta( get_the_ID(), \'start_datetime\', 1 ) ) );
            // make unix timestamp of now
            $now            = date( \'U\', current_time( \'timestamp\' ) );
            // if (start_time - now) is smaller than 7200 seconds
            if ( ( $start_datetime - $now ) < 2 * HOUR_IN_SECONDS ) {
                echo \'<p>LIVE</p>\';
            }
        }
    }
}
如果有帮助,请告诉我。

结束

相关推荐

Metaboxes in Loop

我想在foreach循环中创建元盒。要求是,我有一个自定义帖子类型的数组,我想运行一个循环,为作为数组中键的帖子类型添加元盒。到目前为止,我已经开发了很多需求,但现在我被困在回调函数所在的部分add_meta_box() 将被调用。我用过call_user_func_array 调用回调函数并传递$key 作为参数,但它返回错误且不起作用。下面是我的代码:function rttk_create_boxes(){ $myarray = $this->rttk_get_posttype