木材树枝-如果日期/时间是过去/现在/将来,则拆分类别帖子

时间:2020-04-20 12:32:20

标签: php wordpress datetime twig timber

我正在使用ACF链接到Zoom网络研讨会。香港专业教育学院使用ACF来添加开始和结束日期/时间。 我有一个标准条件,可以检查这些字段上的过去/现在/将来

{% if w_start %}
    {% if current >= w_start and current <= w_end %}
        {#% present %#}
    {% elseif current > w_end %}
        {#% past %#}
    {% else %}
        {#% future %#}
    {% endif %}
{% endif %}

如何将存档帖子列表分为过去/现在/将来条件定义的三个单独的标题。

当前网络研讨会


即将举行的网络研讨会


过去的网络研讨会


我目前没有将其他参数传递给此页面。

$context['post'] = Timber::get_posts();
return Timber::render('webinar-archive.twig', $context, false);

-

{% for webinar in post %}
    {#% Do Something %#}
{% endfor %}

我是否创建3个单独的for循环?是否根据if条件排序?

这里的任何帮助或指导都是很棒的。

1 个答案:

答案 0 :(得分:0)

我建议您遍历PHP模板中的帖子,以使它们在上下文中分开。 array_reduce函数可以帮助:

$context['posts_by_time'] = array_reduce(Timber::get_posts(), function($byTime, $post) {
  $start = strtotime($post->w_start);
  $end   = strtotime($post->w_end);

  if (time() > $start && time() < $end) {
    $section = 'current';
  } elseif (time() > $end) {
    $section = 'past';
  } else {
    $section = 'future';
  }

  // add this post to the correct section
  $byTime[$section][] = $post;

  return $byTime;
}, [
  'past'    => [],
  'current' => [],
  'future'  => [],
]);

然后在您的视图代码中,您可以使用一系列不错的简单部分:

<h2>Current Webinars</h2>
{% for webinar in posts_by_time.current %}
  {# render each current post #}
{% endfor %}

{# and so on for future & past #}

注意::我没有测试此代码,但这是一般想法。