WordPress-使用insert_post时出现db_insert_error - php

我当前使用的是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并未真正揭示出问题所在。要找到它,您实际上必须仔细观察。

WordPress:在网站上仅加载一个jquery脚本 - php

刚要启动一个WordPress网站,但注意到它当前正在加载两个jquery文件,一个包含在wp-includes中,另一个来自我的header.php,是否有一种方法可以使wordpress在前端加载wp-includes?做了大量的搜索,并且对此的唯一提及似乎包括以下代码,但是我找不到关于它的任何文档,任何想法?<?php wp_enqueue_sc…

Wordpress the_permalink性能与将值存储在变量中 - php

制作新主题和创建具有链接到所述文章的多个对象的文章视图的最有效方法是什么?我是C#专业人士,但是在PHP中我并不如我所愿。假设您有:while(have_posts()) <h4><a href="<?php the_permalink(); ?>"><?php the_title(); ?>…

WordPress:ACF将行添加到转发器字段 - php

我正在寻找一种在ACF Pro中将行添加到转发器字段的方法。我找到了this post,但是解决方案发布似乎无效。我将描述我的问题:我有一个名为“ gebruikers”的自定义帖子类型,一个名为“ logins”的转发器字段,以及一个可以包含名为“ datum”的字段的行。我希望能够在“基准”字段的新行中添加一个值。这可能吗?到目前为止,我的代码:$fie…

如何从致命错误“允许的内存容量用尽”中恢复 - php

您知道从PHP致命错误中恢复的任何解决方案:“允许的内存大小...耗尽”我有一个致命错误出现时会调用的关机函数。此函数从中创建一个ErrorException并将其记录下来。问题是:当没有更多可用内存时,它将无法记录错误(我使用Zend Framework通过FirePHP登录Firebug)。因此,我所谓的“如何从中恢复”是指如何执行基本错误日志,并让Ze…

移动Wordpress后,登录有效,但不再有管理员访问权限 - php

将wordpress从旧的ISP转移到新的ISP之后,我在管理员访问权限/对仪表板的访问方面遇到了麻烦。传输是通过将所有文件(包括.htaccess)从旧服务器复制到新服务器,转储旧数据库并将其放在新服务器上并调整wp-config.php中数据库的所有设置来完成的。通过在计算机上设置主机条目,我可以验证一切正常,并且显示了所有内容。这是我的问题。使用旧的和…