问题描述
我尝试了导入工具,似乎对不同的表做了不同的事情。
对于 posts
:如果一个帖子 (或者技术上也是一个帖子),导入文件中的 title
已经存在于数据库中,它将不被导入。在这种情况下,Wordpress 界面将显示 「已存在…」 。
对于 postmeta
:将导入数据库中的所有行。无论该信息是否已经存在 – > 往往会使数据库膨胀。
我想知道其他表格会发生什么。如果已经存在,行将被覆盖,添加 (如 postmeta
) 或拒绝 (如 posts
))
那么”already present” 如何定义 (post_id
?term_id
?name
)?
最佳解决办法
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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。