如何在WordPress中自动列出所有使用服务模板的页面标题?
解决WordPress自动列出使用特定模板的服务页面标题问题
嘿,你的问题我get到了——原来的代码只在当前页面使用了服务模板的时候显示当前页面的标题,这显然不是你要的“自动列出所有服务页面”的效果。咱们得换个思路,用WP_Query去主动查询所有使用template-services.php模板的页面,然后循环输出它们的标题。
下面是完整的可行代码,你可以直接放到服务板块需要显示列表的位置:
<ul> <?php // 构建查询参数:获取所有使用template-services.php模板的页面 $service_pages_query = new WP_Query(array( 'post_type' => 'page', // 查询类型为页面 'meta_key' => '_wp_page_template', // 页面模板的元数据键 'meta_value' => 'template-services.php', // 目标模板文件名 'posts_per_page' => -1, // 显示所有符合条件的页面 'orderby' => 'title', // 按标题排序(也可以改成'menu_order'按后台菜单顺序) 'order' => 'ASC' // 升序排列 )); // 如果有查询结果,开始循环输出 if ($service_pages_query->have_posts()) : while ($service_pages_query->have_posts()) : $service_pages_query->the_post(); ?> <li><?php the_title(); ?></li> <!-- 仅显示页面标题,若需要可改成<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>添加链接 --> <?php endwhile; wp_reset_postdata(); // 重置查询,避免影响后续WordPress循环 else : // 如果没有找到任何服务页面,显示提示(可选) ?> <li>暂无服务页面</li> <?php endif; ?> </ul>
代码说明:
WP_Query是WordPress的核心查询类,这里通过元数据_wp_page_template精准筛选使用指定模板的页面;posts_per_page => -1确保显示所有符合条件的页面,不会分页;wp_reset_postdata()非常重要,它能把查询上下文恢复到原始状态,防止后续的文章/页面循环出现异常;- 如果需要给标题加上跳转链接,只需要把
<li><?php the_title(); ?></li>替换成<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>即可。
这样一来,以后你在后台新增使用template-services.php模板的页面时,这个列表就会自动更新啦~
内容的提问来源于stack exchange,提问作者Taylor18




