如何导出和导入分类法(类别,标签和/或自定义分类法)及其术语


10

我想将所有Wordpress类别(没有帖子,只有类别)从一个博客导出到另一个博客。我怎样才能做到这一点 ?


您是否尝试过从博客的“管理”面板访问“管理”>“导出”。

没有“管理”菜单,只有“工具/导出”菜单,但它不允许我仅导出类别
chubbyk 2011年

抱歉,我是从一个在线博客中读取的。您可以从数据库级别执行此操作吗?

如果您需要简单的操作,请尝试导出类别插件。wordpress.org/plugins/export-categories

Answers:


5

这个答案与Ünsal的答案基本相同,但是我想详细说明一下,因为尽管正确,他的答案并没有帮助我(我只是想记住自己过去所做的事情,我应该阅读他的更仔细地分析,我会发现的,但是对于其他人来说,完整的描述将很有用)。

要导出完整的类别层次结构,您需要导出“所有内容”

任何其他选择都不会为您提供完整的数据(例如,导出带有所有类别的标签的帖子大部分都可以,但是您会丢失有关分层分类法的所有亲子关系/分层数据)。

导出“所有内容”时,生成的文件将包含一个包含有关您的条款的数据的部分。如果您浏览文件,应该很容易找到作者之后和“项目”(即帖子)之前。

如果可以的话,您可以导入并删除内容*

导入完整文件将完美地复制分类法层次结构,但显然也将导入所有页面和帖子。如果没有太多,不妨考虑手动删除它们。如果您将其批量处理并且少于数百个,则不会花费那么长时间(请记住,您可以使用“编辑帖子”屏幕上的“屏幕选项”显示更多而不是默认值,从而一次批量编辑更多内容)。

如果要删除所有内容的内容太多,则需要手动编辑WXR文件以删除除要保留的条款以外的所有内容。

编辑WXR文件以删除内容

这可能有点棘手,但实际上,如果您查看文件的内容,找出每个元素的作用并不难。XML就像带有标签的HTML,因此要注意的主要事情是,不要在保留开始标签等的情况下删除结束标签。

您会发现WXR中有1-3种术语定义,一种是类别,一种是“标签”,一种是“术语”。“自定义分类法”使用术语,而老式类别和标签则具有其自己的特殊格式。

类别示例

<wp:category><wp:term_id>8880</wp:term_id><wp:category_nicename>runner-up-proposals</wp:category_nicename><wp:category_parent>second-round-proposals</wp:category_parent><wp:cat_name><![CDATA[Runner-up Proposals]]></wp:cat_name></wp:category>

标签示例

<wp:tag><wp:term_id>122</wp:term_id><wp:tag_slug>ave-maria</wp:tag_slug><wp:tag_name><![CDATA[Ave Maria]]></wp:tag_name></wp:tag>

自定义分类术语示例

<wp:term><wp:term_id>8579</wp:term_id><wp:term_taxonomy>gv_tools</wp:term_taxonomy><wp:term_slug>digital-video</wp:term_slug><wp:term_parent></wp:term_parent><wp:term_name><![CDATA[Digital Video]]></wp:term_name></wp:term>

因此,您要做的是从WXR文件中删除除这些类别/标签/术语标签之外的所有内容。即,之前的wp:author标签和之后的许多item标签。最重要的是:不要删除底部的关闭/ channel和/ rss标签!没有它们,XML将无法验证。

显然,在实际网站上使用之前,您将测试导入编辑后的文件的结果。尝试将其导入本地的全新安装中,看看它是否完全失败,然后在wp-admin中检查类别列表屏幕,并确保一切都与您期望的完全一样。

祝好运!


1
请注意,这不会将层次结构添加到已创建的类别中。它将仅将父类别分配给尚不存在的子类别。
扎德

4

我用2个查询解决了这个问题。

我想这不是最好的方法,但是肯定不是最安全的方法。此外,它假定您正在使用同一个数据库(如果不是这种情况,则可以轻松导出查询,然后导入到另一个数据库)。

我在空的 wordpress安装上使用了它:

1-导入类别的术语:

INSERT INTO newwp_terms
SELECT te.*
  FROM oldwp_terms te
  JOIN oldwp_term_taxonomy ta
    ON te.term_id = ta.term_id
 WHERE ta.taxonomy = 'category'
 ;

2-导入类别关系和描述

INSERT INTO newwp_term_taxonomy
SELECT term_taxonomy_id,term_id,taxonomy,description,parent,0
  FROM oldwp_term_taxonomy ta
  WHERE ta.term_taxonomy_id IN
          (
           SELECT ta2.term_taxonomy_id
             FROM oldwp_terms te
             JOIN oldwp_term_taxonomy ta2
               ON te.term_id = ta2.term_id
            WHERE ta.taxonomy = 'category'
         )
  ;

[A]总是newwp_指您要导入的oldwp_表,而指源表


2

您不能仅导出类别(或通常的分类法)。只需使用“工具/导出”导出所有内容,就可以从xml中删除除类别之外的内容。


2

您的最终目标是什么?只是为了获得从一个博客到另一个博客的类别列表?或者,您是否正在尝试将一个或多个类别中的所有内容移动到另一个WordPress安装中?

这有点丑陋,但是您可以导出所有内容,然后只删除类别中的内容或删除不需要的类别。这可能是达到目标的较快方法之一。


2

如果您有权访问数据库表,则可以执行wp_term_relationships,wp_term_taxonomy,wp_terms表的mysql dump导出,并将它们导入新的wordpress安装中。我只是在两次安装了300多个类别的WP之间进行了此操作,效果很好。


谢谢,这对我来说效果很好。
Nikhil VJ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.