You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重构影片与活动日历的Custom Post Type数组

票务页按影片标题分组的PHP修改方案

核心思路

用影片标题作为数组键,将同标题的所有放映场次归集到对应键下,同时在循环过程中维护日期下拉所需的数组(自动去重),既实现分组展示,又保留原有下拉菜单的数组结构。

修改步骤与代码示例

假设原代码是基于WordPress自定义文章类型的查询(适配你项目的字段名调整即可):

原代码逻辑(参考)

// 原CPT查询
$args = [
    'post_type' => ['films', 'events'],
    'posts_per_page' => -1,
    'meta_key' => 'screening_time',
    'orderby' => 'meta_value',
    'order' => 'ASC'
];
$query = new WP_Query($args);

$date_dropdown = [];
// 原按日期/时间输出
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $screening_date = get_post_meta(get_the_ID(), 'screening_date', true);
        $screening_time = get_post_meta(get_the_ID(), 'screening_time', true);
        $date_dropdown[] = $screening_date;
        
        echo '<div>'.get_the_title().' - '.$screening_date.' '.$screening_time.'</div>';
    }
    wp_reset_postdata();
}
$date_dropdown = array_unique($date_dropdown);

修改后的代码

// 保留原查询逻辑
$args = [
    'post_type' => ['films', 'events'],
    'posts_per_page' => -1,
    'meta_key' => 'screening_time',
    'orderby' => 'meta_value',
    'order' => 'ASC'
];
$query = new WP_Query($args);

// 初始化分组数组和日期下拉数组
$grouped_films = [];
$date_dropdown = [];

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $film_title = get_the_title();
        $screening_date = get_post_meta(get_the_ID(), 'screening_date', true);
        $screening_time = get_post_meta(get_the_ID(), 'screening_time', true);
        
        // 维护日期下拉数组(自动去重)
        if (!in_array($screening_date, $date_dropdown)) {
            $date_dropdown[] = $screening_date;
        }
        
        // 按标题分组归集场次
        if (!isset($grouped_films[$film_title])) {
            // 首次出现该标题,初始化分组项(可添加海报、链接等其他字段)
            $grouped_films[$film_title] = [
                'title' => $film_title,
                'screenings' => []
            ];
        }
        // 追加当前放映场次
        $grouped_films[$film_title]['screenings'][] = [
            'date' => $screening_date,
            'time' => $screening_time
        ];
    }
    wp_reset_postdata();
}

// 输出分组后的内容
foreach ($grouped_films as $film) {
    echo '<h3>'.$film['title'].'</h3>';
    echo '<ul>';
    foreach ($film['screenings'] as $screening) {
        echo '<li>'.$screening['date'].' '.$screening['time'].'</li>';
    }
    echo '</ul>';
}

// 日期下拉数组结构完全保留,可继续用于生成下拉菜单
// print_r($date_dropdown);

关键说明

  • 用标题作为数组键,天然避免重复标题,确保每个标题只出现一次
  • 分组数组中可扩展添加影片海报、详情链接等字段,只需在首次初始化分组项时存入即可
  • 日期下拉数组在循环中通过in_array判断去重,保持原有数组结构不变
  • 如果你的原代码字段名(比如screening_date)不同,直接替换成项目实际字段即可

内容的提问来源于stack exchange,提问作者Mathew Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:53:31