本文详解 wordpress 插件开发中通过 php 获取 html 下拉菜单选中项的完整实现流程,涵盖表单提交逻辑、`$_post` 数据安全读取、常见错误(如错误的 `action` 属性导致表单未提交至当前页面)及调试技巧。
在 WordPress 插件开发中,动态生成用户下拉菜单并准确捕获用户选择,是常见但易出错的操作。你遇到的问题核心在于:表单未正确提交到当前处理页,导致 $_POST['employees'] 始终为空。
你的原始代码中:
移除与 Settings API 冲突的 options.php 表单,改用指向当前页面的干净表单:
// 显示表单 + 处理逻辑应放在同一文件(如 admin-page.php)
global $wpdb;
$users = $wpdb->get_col("SELECT user_login FROM {$wpdb->users}");
// 检查是否提交并获取选中值(注意:需先验证 nonce 并校验权限,生产环境务必添加!)
$selected_employee = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST
' && isset($_POST['employees'])) {
$selected_employee = sanitize_text_field($_POST['employees']); // 安全过滤
}
// 输出表单
echo '';
// 显示结果(安全输出)
if ($selected_employee) {
echo '已选择:' . esc_html($selected_employee) . '
'; }需显式注册自定义字段:
// 在插件初始化时注册
register_setting('alecaddd_options_group', 'alecaddd_selected_employee', [
'sanitize_callback' => 'sanitize_text_field',
]);
// 在设置页面中添加字段(而非直接 echo select)
add_settings_field(
'employees_select',
'员工选择',
'render_employees_dropdown',
'alecaddd_plugin',
'alecaddd_section'
);
function render_employees_dropdown() {
global $wpdb;
$users = $wpdb->get_col("SELECT user_login FROM {$wpdb->users}");
$value = get_option('alecaddd_selected_employee', '');
echo '';
}然后在页面中仅调用标准 Settings API 表单:
遵循以上结构,即可稳定、安全地获取下拉菜单选中值——核心不是 PHP 语法,而是理解 WordPress 表单生命周期与数据流。