我编写了一个插件,其工作是使用用户订阅表单创建自定义页面。表单页的创建方式如下:
$page = [
\'post_type\' => \'page\',
\'post_content\' => \'\',
\'post_status\' => \'publish\',
\'post_title\' => \'Create a new account\',
\'post_name\' => \'account new\'
];
$page_id = wp_insert_post($page);
这将在以下位置创建新页面:
http://example.com/account-new/
这将呈现订阅注册表单。我使用相同的过程创建了一个页面,该页面在
http://example.com/account-pending/
.
在独立于插件的“我的主题”中,表单的开头标记如下所示:
<form method="post" id="new-account-form" action="/account-pending/">
在提交时,我可以在Chrome中看到post数据被发送到帐户挂起页面,但当我使用PHPStorm调试PHP代码时,我发现
$_POST object is not set.
这个/account-pending/
页面包含以下用于处理POST数据的函数:
public function get_account_pending()
{
if (isset( $_POST[\'my_check_value\'])) {
$username = $_POST[\'username\'];
$password = $_POST[\'userpass\'];
$firstname = $_POST[\'firstname\'];
etc...
我还添加了一个用于捕获post操作的操作
add_action( \'wp\', array( &$this, \'get_account_pending\' ) );
但我还是错过了一些东西。如何找到剥离$\\u POST对象的内容?此时,代码中仅设置以下变量:
$this
$_GET
$_REQUEST
$_SERVER
$GLOBALS
我是否遗漏了正确设置POST数据以在
/account-pending/
页
编辑:
如果我通过cURL命令发送数据,我可以看到$\\u POST数据,如下所示:
curl -X POST \'firstname=myfirst\' -F \'lastname=mylast\' -F \'username=username21\' -F \'usermail=me%40example.com\' -F \'userpass=thisone\' -F \'userpass_again=thisone\' -F \'my_check_value=on\' -F \'billing_address=452+Kennebec+Rd\' -F \'billing_apt=\' -F \'billing_city=Heretown\' -F \'billing_state=ME\' -F \'billing_zip=04444\' -F \'card_type=4\' -F \'card_number=4111111111111111\' -F \'expire_month=07\' -F \'expire_year=23\' http://example.com/account-pending/?XDEBUG_SESSION_START=10663
这似乎表明问题在于wordpress(或PHP)清除$\\u POST变量,或者我的表单没有正确提交数据。