我正在开发一个用户将提交表单的插件。表单提交到同一页面。表单数据处理代码通过检查条件 -
来实现if ( !empty( $_POST['action'] ) && $_POST['action'] == 'customer_add_new')
然后使用$ wpdb-> insert。
验证数据并输入数据库之后,我想将一个变量传递给URL,这样就可以显示成功消息,并且可以通过刷新页面来停止用户重新提交表单。为此,我使用了 -
$url = add_query_arg( array(
'customer_add_new' => 'success'
) );
wp_redirect( $url );
exit();
但是这段代码抛出了以下错误 -
Warning: Cannot modify header information - headers already sent by (output started at E:\wamp\www\cp_plugin\wp-includes\class.wp-scripts.php:343) in E:\wamp\www\cp_plugin\wp-includes\pluggable.php on line 1216
我已成功在主题中使用相同的代码来完成同一个项目。但功能更适合插件,而不是主题。
答案 0 :(得分:1)
hook admin_post
会帮助你。与admin-ajax.php
的作用相同。
将表单操作更改为<?php echo admin_url('admin-post.php'); ?>
并创建挂钩:
add_action( 'admin_post_{action}', 'funct' );
add_action( 'admin_post_nopriv_{action}', 'funct' );
function funct() {
if ( wp_verify_nonce( 'some_nonce', 'some_action' ) ) {
// Your code using $_POST
// And create wp_redirect();
}
}
这可能会对你有帮助。