php - Wordpress-使用insert_post时出现db_insert_error

标签 php wordpress csv 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"
 }


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

$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/

相关文章:

javascript - 如何在 Laravel 中通过 jQuery AJAX 发布文件和数据

php - 如何用 C 创建一个支持 PHP 页面的网络服务器?

wordpress - 在产品页面上显示 Woocommerce 产品属性术语描述

csv - 带有 CSV 的 Grails(无数据库)

php - 如何使用 php 将 opencart 应用程序连接到 ms sql server 数据库?

php - 从另一个 PHP 类调用变量

java - 如何强制 Java 的 HttpClient 接受无效的 cookie?

javascript - WordPress 主题的基础 javascript

python - 在 Python 中比较设备序列号

mysql - MONGODB Mongoimport 可能加速?