重构影片与活动日历的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
相关产品推荐
相关产品推荐

