gpt4 book ai didi

php - Wordpress-使用insert_post时出现db_insert_error

转载 作者:行者123 更新时间:2023-12-04 21:22:40 25 4
gpt4 key购买 nike

我当前使用的是CSV文件,该文件每天自动更新,以创建或更新客户网站的Wordpress帖子。 CSV包含列表的地址,城市,州等的标题,并且每一行都是另一个列表。当前,CSV中大约有220个属性。除了三个以外,所有其他都被创建为帖子,但其中三个没有,并且我得到了WP_Error这样->

 WP_Error { 
"errors"=> array{ ["db_insert_error"]=>
array{ [0]=> "Could not insert post into the database" }}
"error_data"=> array { }
"ID"=> int(0)
"filter"=> "raw"
}


我知道该插件至少可以正常运行,因为其他所有插件都已发布,但似乎这三个插件由于某种原因而收到此错误。它们中没有任何特殊字符或其他可区分它们与其他行的数据。这是我用来创建新帖子的数组和代码:

$new_post = array(
'post_title' => $title,
'post_content' => wpautop(convert_chars($data['csv_post_post'])),
'post_status' => $opt_draft,
'post_type' => 'listing',
'post_date' => $this->parse_date($data['csv_post_date']),
'post_excerpt' => '....',
'post_name' => $data['csv_post_slug'],
'post_author' => $this->get_auth_id($data['csv_post_author']),
'tax_input' => $this->get_taxonomies($data),
'post_parent' => $data['csv_post_parent'],
);
$pricecheck = trim($data['_listing_price']);


其中 $title是地址,城市和州的预连接字符串。

if (!get_page_by_title( $new_post['post_title'], 'OBJECT', 'listing') && $pricecheck != "") {
$id = wp_insert_post($new_post, true);
}


我知道上述所有字段或变量都不为空,并且 wp_insert_post()都可以,但不会插入。任何帮助将不胜感激!

最佳答案

今天我遇到了类似的问题,所以我将分享导致我解决方案的原因(解决方案可能对您有所不同,但是方法会有所帮助)。

我收到相同的错误消息,但绝对没有任何有用的文本,因此我钻研了WordPress源代码并开始调试。

wp_insert_post()返回false时,错误仅在$wpdb->insert()的一个地方引发:

if ( false === $wpdb->insert( $wpdb->posts, $data ) ) {
if ( $wp_error ) {
return new WP_Error('db_insert_error', __('Could not insert post into the database'), $wpdb->last_error);
} else {
return 0;
}
}


$wpdb->insert()使用 process_fields()中的 wp-includes/wp-db.php进行插入之前的完整性检查。

protected function process_fields( $table, $data, $format ) {
$data = $this->process_field_formats( $data, $format );
if ( false === $data ) {
return false;
}

$data = $this->process_field_charsets( $data, $table );
if ( false === $data ) {
return false;
}

$data = $this->process_field_lengths( $data, $table );
if ( false === $data ) {
return false;
}

$converted_data = $this->strip_invalid_text( $data );

if ( $data !== $converted_data ) {
return false;
}

return $data;
}


我开始在每次检查和以下if子句之间添加 var_dump($data),以查看错误的出处。

就我而言,问题出在 strip_invalid_text()调用之后,这导致了我的问题原因:

我正在读取要从其他数据库插入的数据,但编码格式错误。将 charset=utf8mb4添加到我的PDO构造函数后,所有数据都保存在utf8中,并且 wp_insert_post()立即工作。

很难说是什么导致了您的问题,它可能是错误的字符集,错误的格式,太长的字段……WordPress并未真正揭示出问题所在。要找到它,您实际上必须仔细观察。

关于php - Wordpress-使用insert_post时出现db_insert_error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com