这里“已经存在”是如何定义的(post_id
? term_id
? name
)?
帖子标题和日期必须匹配才能已存在。
WordPresspost_exists()
函数用于确定post是否存在。
从插件代码:
$post_exists = post_exists( $post[\'post_title\'], \'\', $post[\'post_date\'] );
未提供用于更改此行为的筛选器。
用于
posts
: 如果是一篇文章(或页面,从技术上讲也是一篇文章)
title
从数据库中已存在的导入文件中
won\'t 被导入。本例中的WordPress界面将指示“已经存在…”。
不仅仅是\'post\'
和\'page\'
可以导入帖子类型。可以导入任何定义的职位类型。例如\'nav_menu_item\'
在导入代码中的处理方式不同:
if ( \'nav_menu_item\' == $post[\'post_type\'] ) {
$this->process_menu_item( $post );
[...]
如果出现以下情况,导入不会创建新帖子:
1。帖子类型不存在,
2。给定的post ID已标记为已导入或
3。具有相同标题和日期的帖子已存在
标记为具有父级的帖子在数据库中不存在,这些帖子将成为顶级项目。这可能是暂时的,因为父项可能尚未导入。
用于
postmeta
: 将添加导入数据库中的所有行。无论该信息是否已经存在->都会导致数据库膨胀。
对于已经存在的帖子,只有当标题和日期相同的帖子已经存在时(上文第3条),才会导入新的/更新的帖子术语、评论和元数据。
添加post meta的插件代码如下:
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
.
我想知道其他桌子会发生什么。
以上所有信息都是通过阅读插件代码收集的(\\wordpress-importer\\wordpress-importer.php
. 内联文档中的大部分内容都是用纯英语编写的。
此代码中没有运行SQL查询。所有添加到数据库的信息都是使用WordPress函数完成的。要了解exactly 如何影响任何表,请阅读代码。