Import posts from a .csv file with WP-CLI
如果我们的
import.csv
以制表符分隔,有两列:
Planet Mars The red planet.
Planet Earth Our blue planet.
然后我们可以借助这个来解析它
answer, 我们使用的位置
IFS=$\'\\t\'
而是作为制表符分隔符:
while IFS=$\'\\t\', read col1 col2; \\
do \\
echo "$col1|$col2";
done < import.csv
请注意,列计数必须与文件的列相匹配。
现在,让我们使用WP-CLI创建帖子wp create post
:
while IFS=$\'\\t\', read col1 col2; \\
do \\
wp post create \\
--post_title="$col1" \\
--post_content="$col2" \\
--post_author=1 \\
--post_type=post \\
--post_status=publish \\
done < import.csv
如果我们有额外的元数据,如从太阳到天文单位(au)的平均距离:
Planet Mars The red planet. 1.52
Planet Earth Our blue planet. 1.00
然后我们可以尝试:
while IFS=$\'\\t\', read col1 col2 col3; \\
do \\
wp post create \\
--post_title="$col1" \\
--post_content="$col2" \\
--post_author=1 \\
--post_type=post \\
--post_status=publish \\
| xargs -I % wp post meta add % distance_au "$col3"; done < import.csv
如果
wp post create
支持
meta_input
的参数
wp_insert_post()
.
我们也可以用wp_insert_post()
从带有wp eval-file
command.
WP-CLIsupports 从csv文件导入用户,但我还没有看到帖子的这种核心功能。
我们可以编写自己的WP-CLI命令来导入csv帖子。
还有一些插件,比如WP CLI Import CSV, 这似乎已经做到了(我与之无关,也没有使用过)。
请注意,WP-CLI可以import wxr文件,如果您可以将csv文件转换为wxr文件。
还要注意的是,目前(4.8)WordPress在wp admin后端不能很好地处理层次化的帖子类型(即页面)。该类型的所有帖子将立即加载到父选择的下拉列表中。这不能很好地扩展,在后端工作时可能会导致PHP超时!参见示例here. 所以go for non-hierarchical post types (aka posts)在您的大量导入中。