【问题标题】:Timber Twig - Split Category Posts if Date/Time is Past/Present/FutureTimber Twig - 如果日期/时间是过去/现在/未来,则拆分类别帖子
【发布时间】:2020-04-20 12:32:20
【问题描述】:

我正在使用 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 条件进行排序?

任何帮助或指导在这里都会很棒。

【问题讨论】:

    标签: php wordpress datetime twig timber


    【解决方案1】:

    我建议您在 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 #}
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多