这是导入过程的主要功能。
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_term
和
wp_update_term
功能。
在我的例子中,我为每个类别都提供了一个ID和一个slug,因为我是从另一个数据库导入的。我不知道你的具体情况,所以你可能需要调整它。
希望这能有所帮助,请随时询问和评论。
编辑以添加上下文信息:
我在模板文件中使用了此函数,而不是常规循环,因此我只需通过显示页面的特定页面来启动导入过程,并使用echo
因此,我对我的类别结构有了一个即时而清晰的视图,看看它是否正常。
如您所见,该函数还可以更新数据,因此如果您更改了类别文件中的某些内容(例如名称),只需再次运行它,数据就会更新。
它不做的是修改结构:如果从导入的文件中删除类别,它将不会在WP结构中删除。它不比较数据,只解析数据,如果不存在,则为每个项目创建数据,如果存在,则更新数据。
为了开始测试,我只更改了一行:
if ( $level ) {
根据
if ( $level < 1 ) {
因此,导入将在第一级(父级)类别之后立即停止。如果此时一切正常(名称、层次结构),则可以删除条件编号。
要导入数据,我只需使用:
$file_to_import = file_get_contents( TEMPLATEPATH . \'/import/arbo.php\' );