在我的WordPress版本中,此错误来自wp admin/post的第46行。php,它具有:
if ( isset( $_POST[\'post_type\'] ) && $post && $post_type !== $_POST[\'post_type\'] ) {
wp_die( __( \'A post type mismatch has been detected.\' ), __( \'Sorry, you are not allowed to edit this item.\' ), 400 );
}
之前的代码看起来很简单。它只是根据表单提交的post ID检查数据库中的post对象。
通过尝试以下方法,您可能会获得更多的洞察力。编辑有问题的帖子。在浏览器上单击鼠标右键,然后单击“检查元素(在Chrome中)”。单击“网络”选项卡,然后找到“全部”子选项卡。现在,保持“开发工具”窗口处于打开状态,然后单击“发布”。应在名为post的列表中显示一个项目。php。如果显示post,请忽略。php?操作=编辑等。
单击post。php,然后右键单击Headers选项卡。确保在“常规”下显示请求方法:POST。然后在“表单数据”下,如果难以读取,请单击“查看已解析”。否则,应显示post\\u type:post。此外,您应该看到post\\u ID:{some integer}。
如果post\\U ID或post\\U类型不正确,则会导致您的问题。另一件需要注意的事情是,是否有两个项目具有相同的名称。检查列表末尾,查看是否再次提交了其中任何一个。一般来说,两次提交相同的索引是可以的,但第二次可能会优先,而且可能不正确。
我猜这可能不会透露任何信息。但它可以显示表单数据可能已通过web浏览器正确呈现并发送到服务器。假设这里没有什么不正确的地方,可能是服务器端在正确提交数据后发生的事情。
接下来要检查的是在第46行上方添加两行代码。但是,您必须在加载页面之后和单击提交之前添加代码。之后您必须删除代码,否则您将无法查看或保存任何帖子。
echo \'<pre>\' . htmlspecialchars( print_r($_POST, true) ) . \'</pre>\';
exit;
if ( isset( $_POST[\'post_type\'] ) && $post && $post_type !== $_POST[\'post_type\'] ) {
wp_die( __( \'A post type mismatch has been detected.\' ), __( \'Sorry, you are not allowed to edit this item.\' ), 400 );
}
当我点击publish时,我得到以下信息。。。
Array
(
[_wpnonce] => f5557dcf89
[_wp_http_referer] => /wp-starter/wp-admin/post.php?post=1&action=edit
[user_ID] => 1
[action] => editpost
[originalaction] => editpost
[post_author] => 1
[post_type] => post
[original_post_status] => publish
[referredby] => http://localhost:8080/wp-starter/wp-admin/post.php?post=1&action=edit
[_wp_original_http_referer] => http://localhost:8080/wp-starter/wp-admin/post.php?post=1&action=edit
[post_ID] => 1
[meta-box-order-nonce] => a98dcd6a27
[closedpostboxesnonce] => 1033a61a51
[post_title] => Hello world!
.... (plus a bunch more)
)
此数组应或多或少包含与表单数据下的“网络”选项卡中相同的数据。
重要的一点是,服务器正在识别post\\u ID和post\\u类型,它们都是有效的。
也可能是您的服务器正在将输入变量截断到最大值。默认情况下,此数字相当高,但如果表单向服务器发送的数据超过1000个点,则可能会忽略这些点,如果忽略post\\u类型,则会导致您看到的错误。