在WordPress插件中处理表单提交和验证通常涉及以下几个步骤:
- 创建表单
- 添加表单处理逻辑到插件中
- 验证表单输入
- 处理表单数据
以下是一个简单的示例,展示了如何在WordPress插件中处理表单提交和验证:
步骤 1: 创建表单
在你的WordPress主题的 functions.php
文件或者插件文件中,你可以使用 shortcode
来创建一个表单。
function my_custom_form_shortcode() {
$output = '<form action="' . esc_url($_SERVER['REQUEST_URI']) . '" method="post">';
$output .= '<label for="name">Name:</label>';
$output .= '<input type="text" id="name" name="name" required>';
$output .= '<label for="email">Email:</label>';
$output .= '<input type="email" id="email" name="email" required>';
$output .= '<input type="submit" name="submit_form" value="Submit">';
$output .= '</form>';
return $output;
}
add_shortcode('my_custom_form', 'my_custom_form_shortcode');
步骤 2: 添加表单处理逻辑
在你的插件文件中,你可以添加一个函数来处理表单提交。
function handle_form_submission() {
if (isset($_POST['submit_form'])) {
// 表单被提交了,进行验证
if (validate_form($_POST)) {
// 验证通过,处理数据
process_form_data($_POST);
} else {
// 验证失败,显示错误信息
add_action('admin_notices', 'display_error_message');
}
}
}
add_action('init', 'handle_form_submission');
步骤 3: 验证表单输入
创建一个函数来验证表单输入。
function validate_form($data) {
$errors = array();
if (empty($data['name'])) {
$errors[] = 'Name is required.';
}
if (empty($data['email']) || !is_email($data['email'])) {
$errors[] = 'Please enter a valid email address.';
}
if (empty($errors)) {
return true;
} else {
foreach ($errors as $error) {
echo '<div class="error"><p>' . esc_html($error) . '</p></div>';
}
return false;
}
}
步骤 4: 处理表单数据
创建一个函数来处理验证后的表单数据。
function process_form_data($data) {
// 这里你可以将数据保存到数据库,发送电子邮件等
// 例如,保存到数据库
global $wpdb;
$table_name = $wpdb->prefix . 'my_custom_form_submissions';
$wpdb->insert(
$table_name,
array(
'name' => sanitize_text_field($data['name']),
'email' => sanitize_email($data['email']),
'date_submitted' => current_time('mysql'),
),
array(
'%s',
'%s',
'%s',
)
);
// 重定向或显示成功消息
wp_redirect(add_query_arg('message', 'success', $_SERVER['REQUEST_URI']));
exit;
}
请确保你已经创建了一个数据库表来存储提交的数据,并且已经正确处理了所有的安全措施,比如使用 sanitize_text_field()
, sanitize_email()
, esc_url()
, 和 esc_html()
函数来清理和转义数据。
最后,不要忘记在插件的 uninstall.php
文件中添加清理代码,以删除插件时清理相关数据。