如何批量插入类别?

时间:2012-08-31 作者:p.a.

我想插入数百个类别,按层次结构。关于如何在批处理模式下执行此操作,有什么建议吗?谢谢

3 个回复
SO网友:Simon

这是导入过程的主要功能。

function menu_recursive_output( $branch_objet, $parent_id, $level ) {

// JUST FOR COUNTING ITEMS
static $counter = 1;

if ( $level ) {

    // CHECK IF ITEM EXISTS ALREADY
    // IF SO, THIS WILL RETURN ARRAY CONTAINING ID OF EXISTING ITEM
    $created_cat = term_exists( $branch_objet->name, \'category\', $parent_id);   

    // IF NOT, WE CREATE ITEMS
    // WITH 
    if ( ! $created_cat ) {

    $created_cat = wp_insert_term( $branch_objet->name, \'category\', array(
        \'description\'=> $parent_id,
        \'slug\'=> $branch_objet->id . \'_\' . $branch_objet->slug,
        \'parent\'=> $parent_id
    ));

    } else {

    $created_cat = wp_update_term( $created_cat[\'term_id\'], \'category\', array(
        \'description\'=> $parent_id . \'updated!\',
        \'slug\'=> $branch_objet->id . \'_\' . $branch_objet->slug,
        \'parent\'=> $parent_id
    ));

    }
}
//if ( is_wp_error( $created_cat ) ) echo $created_cat->get_error_message();
// ECHOING DATA JUST TO VISUAL CHECK
echo $counter; $counter++;
for ( $i = 0; $i < $level ; $i++) echo \'--\';
echo \'|\';
echo \'<a href="\' . get_category_link($created_cat[\'term_id\']) . \'">\' . $branch_objet->name . \'</a> | id = \' . $created_cat[\'term_id\'] . \' | parent = \' . $parent_id . \' | level = \' . $level . \'<br />\';

// $options_categories[ $created_cat[\'term_id\'] ] = $branch_objet->name;

// IF CHILDREN START A NEW RECURSION WITH EACH CHILD
// WITH CATEGORY ID AS PARENT ID
if ( $branch_objet->children != \'-\' ) {
    foreach( $branch_objet->children as $sub_branch ) {
        menu_recursive_output( $sub_branch, $created_cat[\'term_id\'], $level + 1 );
    }
}
}

首先,我需要一个包含类别的对象。在这种情况下,它应该是一个对象,但可以很容易地适应处理数组。

我通过提供对象开始该过程,并开始一个级别0:

// START RECURSION 
menu_recursive_output ( $cat_object, 0, 0 );
您可以通过更改\'category\' 在里面wp_insert_termwp_update_term 功能。

在我的例子中,我为每个类别都提供了一个ID和一个slug,因为我是从另一个数据库导入的。我不知道你的具体情况,所以你可能需要调整它。

希望这能有所帮助,请随时询问和评论。

编辑以添加上下文信息:

我在模板文件中使用了此函数,而不是常规循环,因此我只需通过显示页面的特定页面来启动导入过程,并使用echo 因此,我对我的类别结构有了一个即时而清晰的视图,看看它是否正常。

如您所见,该函数还可以更新数据,因此如果您更改了类别文件中的某些内容(例如名称),只需再次运行它,数据就会更新。

它不做的是修改结构:如果从导入的文件中删除类别,它将不会在WP结构中删除。它不比较数据,只解析数据,如果不存在,则为每个项目创建数据,如果存在,则更新数据。

为了开始测试,我只更改了一行:

if ( $level ) {
根据

if ( $level < 1 ) {
因此,导入将在第一级(父级)类别之后立即停止。如果此时一切正常(名称、层次结构),则可以删除条件编号。

要导入数据,我只需使用:

$file_to_import = file_get_contents( TEMPLATEPATH . \'/import/arbo.php\' );

SO网友:Danny Hernandez

嘿,伙计们,很抱歉在一个很旧的帖子中发帖,但我在网上冲浪了几个小时后发现了一个对我有用的帖子,希望这对处于同样情况的人有所帮助。

我使用https://wordpress.org/plugins/bulkpress/

我知道它说新的wordpress版本还没有经过测试,但从2016年4月1日起对我有效

SO网友:gArn
结束