从一个站点导入到另一个站点时,自定义分类不保留层次结构

时间:2013-08-27 作者:Debasish Panda

在我的网站上,我有一个自定义的帖子类型“listing”,它有一个层次分类法“local”。

该分类法中的术语以州>城市的形式出现。

例如,“Washington”是一个父术语&;阿灵顿、奥本、达文波特等可能是它的儿童分类法。

现在,当我导出;将此自定义帖子类型导入到另一个网站,我的子级分类法将成为顶级分类法,它们不再保留层次结构。

我在函数中使用了代码。php来创建这些,没有插件。我做错了什么?

1 个回复
SO网友:kaiser

我理解你的问题,也必须解决它:wp_insert_term() 不处理父/子连接。

您可以通过以下内容进行检查:

$tax = \'category\';
$terms = get_terms( array( $tax ) );

$children_to_update = array();

foreach ( $terms as $term )
{
    $checked_term = get_term_by( \'name\', $term, $tax );

    // ... retrieve parent here ...

    if ( ! $checked_term )
    {
        $term_data = wp_insert_term(
            $term,
            $tax,
            array( \'parent\' => $parent )
        );
        if (
            is_array( $term_data )
            AND ! is_wp_error( $term_data )
            AND \'0\' !== $parent
        )
            $children_to_update[ $parent ][] = $term_data[\'term_id\'];
    }
}
// inspect result
var_dump( $children_to_update );
你会看到它一直是空的。原因很简单:有一个Option 保存此信息的。您还需要更新它:

$option = get_option( "{$tax}_children" );
foreach( $children_to_update as $new_p => $new_c )
{
    if ( ! array_key_exists( $new_p, $option ) )
    {
        $option[ $new_p ] = $new_c;
    }
    else
    {
        foreach ( $new_c as $c )
        {
            if ( ! in_array( $c, $option[ $new_p ] ) )
                $option[ $new_p ][] = $c;
        }
    }
}
update_option( "{$tax}_children", $option );
起初,我不知道层次结构不起作用,但当你在管理UI中查看分类法概述页面时,你会发现这些术语没有像should(在子/父列表中)那样对齐。

结束

相关推荐

rewrite rules hierarchical

我希望我的WordPress遵循以下规则:/productes/ 包含所有产品的页面/productes/[category]/ 包含该类别所有产品的分类页面/productes/[category]/[subcategory]/ 包含该类别所有产品(与2相同)的分类页面/[productes]/[category]/[product]/ A.single-productes.php 将显示类别产品/[productes]/[category]/[subcategory]/[product]/ A.sin