我不能再发布甚至不能保存草稿,收到错误“A POST类型不匹配已被检测到。”

时间:2020-01-19 作者:Nick Hodges

我不是一个WordPress开发人员,只是一个试图保持更新并撰写博客文章的人。

如果我试图发布或保存新帖子的草稿,我会得到:

检测到post类型不匹配。

我正在运行WordPress 5.3.2运行脚手架主题。

我刚更新到那个版本,这个问题就开始出现了。

在这个网站上我发现了一些有这个错误的帖子,但它们都是关于WordPress编程的。我注意到这与主题有关,所以我将主题改为WordPress提供的一个股票主题,但无论我在该领域做什么尝试,我都会得到同样的结果。

我禁用了所有插件,但没有任何效果。

有人能帮我修复我的网站吗?

ADDED: 我在古腾堡的帖子更新上也遇到了问题,所以我把它删除了。

MORE ADDED: 我注意到一件奇怪的事:编辑器上的永久链接按钮指的是我的关于页面。

1 个回复
最合适的回答,由SO网友:Joel M 整理而成

在我的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类型,则会导致您看到的错误。

相关推荐

Get_Term_meta()不适用于Pre_Get_Posts()

我试图使用get\\u term\\u meta()函数获取特定类别的自定义术语元值。该值存储在wp\\U termmeta表中。然后,基于该值,我想修改某个类别归档页面的主查询(按日期升序排序帖子)。但是,我使用的pre\\u get\\u posts()钩子不允许这样做。我尝试了我所知道的所有方法,但仍然不起作用这是我的代码:function my_new_category_order( $query ) { //get the category id $cat_id