【问题标题】:Wordpress csv import duplicateWordpress csv导入重复
【发布时间】:2013-07-18 20:16:56
【问题描述】:

我为 wordpress 使用了一个 csv 导入插件的改编版本。它导入 csv 以创建和更新帖子。为了更新现有帖子,我添加了一个按标题查找帖子 ID 的编辑,如果存在则覆盖,否则创建新帖子。

问题是它似乎不是很可靠!如果我多次导入相同的 csv,它会覆盖其中的大部分,但我会得到一些重复。有什么方法可以让这个更可靠,或者有没有其他方法可以处理重复的帖子?

这里创建帖子的主要功能

 function create_post($data, $options) {
    extract($options);
//edit 1 added here
   global $wpdb;  
//end

    $data = array_merge($this->defaults, $data);
    $type = $data['csv_post_type'] ? $data['csv_post_type'] : 'post';
    $valid_type = (function_exists('post_type_exists') &&
        post_type_exists($type)) || in_array($type, array('post', 'page'));

    if (!$valid_type) {
        $this->log['error']["type-{$type}"] = sprintf(
            'Unknown post type "%s".', $type);
    }

    $new_post = array(
        'post_title'   => convert_chars($data['csv_post_title']),
        'post_content' => wpautop(convert_chars($data['csv_post_post'])),
        'post_status'  => $opt_draft,
        'post_type'    => $type,
        'post_date'    => $this->parse_date($data['csv_post_date']),
        'post_excerpt' => convert_chars($data['csv_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'],
    );

// edit 2 here
    $new_post['ID'] = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_title = '" .   $data['csv_post_title'] . "'" );
// ends

    // pages don't have tags or categories
    if ('page' !== $type) {
        $new_post['tags_input'] = $data['csv_post_tags'];

        // Setup categories before inserting 
        $cats = $this->create_or_get_categories($data, $opt_cat);
        $new_post['post_category'] = $cats['post'];
    }

// edit 3
    if(!empty($new_post['ID'])) {
    $id = wp_update_post($new_post);
} else {
    $id = wp_insert_post($new_post);
}
// ends

    if ('page' !== $type && !$id) {
        // cleanup new categories on failure
        foreach ($cats['cleanup'] as $c) {
            wp_delete_term($c, 'category');
        }
    }
    return $id;
}

谢谢

【问题讨论】:

  • 在我的插件 CSV 2 POST 中,我指的是这已被采纳。我建议在可能的情况下对 post_name/permalink 进行比较,除非您非常了解自己的数据。标题 (post_title) 可以有重复值。

标签: php mysql wordpress csv


【解决方案1】:

已修复!我使用了内置的 wordpress 功能,get_page_by_title。这是我用来定位正确帖子的代码。

if (!get_page_by_title( $bpp_title, 'OBJECT', 'publications')) {


    $id = wp_insert_post($new_post);

    } else {

        $bpp_page = get_page_by_title( $bpp_title, 'OBJECT', 'publications');
        $new_post['ID'] = $bpp_page->ID;

        $id = wp_update_post($new_post);

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2011-06-29
    • 2022-01-03
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多