PHP如何获取WordPress自定义文章类型的标题并按套餐分类展示
问题原因
你当前代码的核心问题是在Basic套餐板块内直接遍历了所有套餐列表,所以会把所有套餐关联的播客全部输出在Basic板块下,另外两个Starter、Exclusive板块完全没有写播客输出逻辑,自然无法展示对应内容。
修复方案
你可以先统一预处理所有套餐数据,按套餐名称匹配对应板块再输出内容,修改后的完整代码如下:
<div class="container-intro-head"> <div class="row"> <?php // 预处理套餐数据,按名称存储对应播客 $package_podcasts = []; if ($get_packages_list) { foreach ($get_packages_list as $get_package) { $package_name = get_the_title($get_package->ID); // 统一转大写避免大小写匹配问题 $package_key = strtoupper(trim($package_name)); $package_podcasts[$package_key] = get_field('podcasts', $get_package->ID) ?: []; } } ?> <div class="col-md-4"> <h3 class="package-head-intro">BASIC BUNDLE - $9.99</h3> <?php if (!empty($package_podcasts['BASIC BUNDLE'])): ?> <?php foreach ($package_podcasts['BASIC BUNDLE'] as $podcast): ?> <?php $podcast_details = get_post($podcast); ?> <h5 class="item-main-title"><?php echo esc_html($podcast_details->post_title); ?></h5> <?php endforeach; ?> <?php endif; ?> </div> <div class="col-md-4"> <h3 class="package-head-intro">STARTER BUNDLE - $14.99</h3> <?php if (!empty($package_podcasts['STARTER BUNDLE'])): ?> <?php foreach ($package_podcasts['STARTER BUNDLE'] as $podcast): ?> <?php $podcast_details = get_post($podcast); ?> <h5 class="item-main-title"><?php echo esc_html($podcast_details->post_title); ?></h5> <?php endforeach; ?> <?php endif; ?> </div> <div class="col-md-4"> <h3 class="package-head-intro">EXCLUSIVE BUNDLE - $19.99</h3> <?php if (!empty($package_podcasts['EXCLUSIVE BUNDLE'])): ?> <?php foreach ($package_podcasts['EXCLUSIVE BUNDLE'] as $podcast): ?> <?php $podcast_details = get_post($podcast); ?> <h5 class="item-main-title"><?php echo esc_html($podcast_details->post_title); ?></h5> <?php endforeach; ?> <?php endif; ?> </div> </div> </div>
注意事项
- 请确保后台创建的三个套餐的标题和代码中
BASIC BUNDLE、STARTER BUNDLE、EXCLUSIVE BUNDLE完全一致,若需要更高兼容性,可以改用套餐别名(slug)作为匹配键 - 代码中增加了
esc_html()转义输出,符合WordPress开发安全规范,避免XSS漏洞 - 如果套餐标题后续有调整,同步修改代码中数组对应的键名即可正常匹配
内容的提问来源于stack exchange,提问作者Imran Irshad
相关产品推荐
相关产品推荐

