jos*_*nte 2 php csv wordpress genesis
我目前正在使用每天自动更新的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"
}
Run Code Online (Sandbox Code Playgroud)
我知道插件至少可以工作,因为所有其他插件都已发布,但似乎这三个由于某种原因正在出现此错误.它们中没有任何特殊字符或其他数据可以将它们与其他行区分开来.这是我用来创建新帖子的数组和代码:
$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']);
Run Code Online (Sandbox Code Playgroud)
$title地址,城市和州的预加入字符串在哪里.
if (!get_page_by_title( $new_post['post_title'], 'OBJECT', 'listing') && $pricecheck != "") {
$id = wp_insert_post($new_post, true);
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的字段或变量都不是空的,它会变wp_insert_post()好,但不会插入.任何帮助将不胜感激!
我今天遇到了类似的问题,所以我将分享导致我解决方案的问题(解决方案可能与您不同,但方式会有所帮助).
我得到了相同的错误消息,绝对没有有用的文本,所以我挖了WordPress源代码并开始调试.
wp_insert_post()当$wpdb->insert()返回false 时,错误仅在一个地方抛出:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
$wpdb->insert()在进行插入之前进行一些健全性检查,使用process_fields()in 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;
}
Run Code Online (Sandbox Code Playgroud)
我开始var_dump($data)在每个检查和以下if子句之间添加,以查看错误的来源.
在我的情况下问题是在strip_invalid_text()电话会议之后,这导致了我的问题的原因:
我正在读取要从其他数据库插入的数据,并且它的编码错误.添加charset=utf8mb4到我的PDO构造函数后,所有数据都在utf8中,wp_insert_post()并立即工作.
很难说在你的情况下是什么导致了问题,它可能是一个错误的字符集,一个错误的格式,一个太长的字段...... WordPress并没有真正披露出什么问题.找到它你真的要仔细看.
| 归档时间: |
|
| 查看次数: |
3806 次 |
| 最近记录: |