Php WordPress插件在使用wp_重定向时抛出警告

Php WordPress插件在使用wp_重定向时抛出警告,php,wordpress,Php,Wordpress,我正在开发一个插件,用户将提交一个表单。表单提交到同一页。表单数据处理代码是通过检查条件来实现的- if ( !empty( $_POST['action'] ) && $_POST['action'] == 'customer_add_new') 然后使用$wpdb->insert验证数据并将其输入数据库 之后,我想向URL传递一个变量,这样可以显示成功消息,并且可以通过刷新页面阻止用户重新提交表单。为此,我使用了- $url = add_query_arg( array(

我正在开发一个插件,用户将提交一个表单。表单提交到同一页。表单数据处理代码是通过检查条件来实现的-

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
我已经成功地在同一个项目的主题中使用了相同的代码。但是该功能更适合插件,而不是主题。

hook admin\u post将帮助您。其工作原理与admin-ajax.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();
    }
}

这可能会对您有所帮助。

您需要将表单处理代码放在任何HTML输出之前,因为重定向是通过修改标题来实现的,一旦标题发送到浏览器,就无法修改。要解决这个问题,请看。@malviya,表单处理代码不输出任何HTML。它只是验证所有数据并将其输入数据库。不一定是表单处理代码,任何生成HTML的代码都会导致此错误,因为WordPress有许多可插拔的功能。@rmalviya如果是这种情况,我如何找出问题的原因?另外,请阅读我添加到原始问题中的编辑。这看起来会起作用。但我无法确定所需的文件结构。我想把表格放在面向公众的一面。目前,我正在使用shortcode按顺序包含文件“customers/customer add to database.php”和“customers/customer add new.php”。第一个文件包含处理提交数据的代码,第二个文件包含表单本身。现在我应该把add_操作放在哪里,把函数放在哪里?我试图保持当前的结构,但它给了我“警告:call\u user\u func\u数组期望参数1是有效的回调”。有没有办法在插件本身中管理它?我的意思是不触及主题?是的,当然。将此代码放在主插件文件中。如果您使用的是OOP结构,那么应该在主类的u构造方法上添加此操作。