WordPress如何将所有已发布页面显示为下拉选项?代码故障求助
WordPress已发布页面下拉菜单修复方案
你的代码核心问题是**get_pages()返回的是WP_Post对象数组,而非关联数组**,直接用$name['name']无法正确读取页面数据,这是显示异常的根源。以下是修正后的实现方案:
修正代码
<div class="header-right"> <?php // 获取所有已发布页面,返回WP_Post对象集合 $published_pages = get_pages([ 'post_status' => 'publish', 'post_type' => 'page', 'sort_column' => 'post_title' // 按页面标题排序,可根据需求调整 ]); ?> <select name="per1" id="per1" onchange="this.value && (window.location.href = this.value)"> <option selected>Choose one</option> <?php foreach ($published_pages as $page) : ?> <option value="<?php echo esc_url(get_permalink($page->ID)); ?>"> <?php echo esc_html($page->post_title); ?> </option> <?php endforeach; ?> </select> </div>
关键修复点说明
- 移除了无用的
$pages和$array_pages变量,简化逻辑 - 使用对象属性访问(
->)替代数组下标,比如$page->post_title获取页面标题,$page->ID获取页面ID - 添加
esc_url()和esc_html()做内容转义,符合WordPress安全开发规范,避免XSS风险 - 可选添加
onchange事件,实现选择页面后自动跳转的功能(不需要可删除该属性) - 明确指定
post_type为page,避免意外获取其他自定义类型内容 - 通过
sort_column参数控制页面排序顺序,可选值包括menu_order(按后台页面顺序)、post_date(按发布时间)等
内容的提问来源于stack exchange,提问作者Rajin Sharwar
相关产品推荐
相关产品推荐

