问题描述

我尝试了导入工具,似乎对不同的表做了不同的事情。

对于 posts:如果一个帖子 (或者技术上也是一个帖子),导入文件中的 title 已经存在于数据库中,它将不被导入。在这种情况下,Wordpress 界面将显示 「已存在…」 。

对于 postmeta:将导入数据库中的所有行。无论该信息是否已经存在 – > 往往会使数据库膨胀。

我想知道其他表格会发生什么。如果已经存在,行将被覆盖,添加 (如 postmeta) 或拒绝 (如 posts))

那么”already present” 如何定义 (post_idterm_idname)?

最佳解决办法

how is “already present” defined here anyway (post_id? term_id? name)?

帖子标题和日期必须匹配才能存在。

WordPress post_exists()功能用于确定该帖子是否存在。

从插件代码:

$post_exists = post_exists( $post['post_title'], '', $post['post_date'] );

没有提供过滤器来更改此行为。


For posts: if a post (or page, which technically is a post too) title from the import file is already present in the database, it won’t be imported. The WordPress interface in this case will indicate that “there already exists…”.

不仅仅是'post''page'的 post 类型都可以导入。任何定义的职位类型都可以导入。例如,'nav_menu_item'在导入代码中的处理方式不同:

if ( 'nav_menu_item' == $post['post_type'] ) {
    $this->process_menu_item( $post );
    [...]

导入不会在以下情况下创建新的帖子:1. 帖子类型不存在,2. 给定的帖子 ID 已被注册为导入或 3. 具有相同标题和日期的帖子已存在。

标记为拥有数据库中不存在的父级的帖子将成为顶级项。这可能是临时的,因为父项可能尚未导入。


For postmeta: all rows from the imported database will be added. Regardless whether that information was already present -> tends to bloat the database.

对于已经存在的帖子,仅当具有相同标题和日期的帖子已存在 (#3 以上) 时才导入新的/更新的帖子,评论和元数据。

添加后期元素的插件代码如下:

if ( ! isset( $post['postmeta'] ) )
    $post['postmeta'] = array();

$post['postmeta'] = apply_filters( 'wp_import_post_meta', $post['postmeta'], $post_id, $post );

// add/update post meta
if ( ! empty( $post['postmeta'] ) ) {
    foreach ( $post['postmeta'] as $meta ) {
        $key = apply_filters( 'import_post_meta_key', $meta['key'], $post_id, $post );
        $value = false;

        if ( '_edit_last' == $key ) {
            if ( isset( $this->processed_authors[intval($meta['value'])] ) )
                $value = $this->processed_authors[intval($meta['value'])];
            else
                $key = false;
        }

        if ( $key ) {
            // export gets meta straight from the DB so could have a serialized string
            if ( ! $value )
                $value = maybe_unserialize( $meta['value'] );

            add_post_meta( $post_id, $key, $value );
            do_action( 'import_post_meta', $post_id, $key, $value );

            // if the post has a featured image, take note of this in case of remap
            if ( '_thumbnail_id' == $key )
                $this->featured_images[$post_id] = (int) $value;
        }
    }
}

在插入之前使用'wp_import_post_meta'过滤器调整后期元数据。可以通过返回 empty value(如 0) 来取消插入。


I wonder what happens for the other tables.

所有上述信息都是通过阅读插件代码 (wordpress-importerwordpress-importer.php) 来收集的,大部分内容都是用英文写成的。

在此代码中没有运行 SQL 查询。添加到数据库的所有信息都是通过使用 WordPress 函数完成的。要了解任何表格如何受到影响,请阅读代码。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。