web-dev-qa-db-ja.com

プログラムによるカテゴリの挿入

私はどのように私はプログラム的にカテゴリを挿入する必要があり、それはテーマがアクティブになった後に1回だけ挿入する必要があります疑問に思います。

私はここまで知っています。

function example_insert_category() {
    wp_insert_term(
        'Science',
        'category',
        array(
          'description' => 'This is an Science category.',
          'slug'        => 'science'
        )
    );
}
add_action( 'after_setup_theme', 'example_insert_category' );

私はこのような構造のカテゴリを挿入したいのですが。

Science
--Grade 11
----Science
----Management
----Humanities
--Grade 12
----Science
----Management
----Humanities

MIT
--Grade 15
----Science
----Management
----Humanities
--Grade 16
----Science
----Management
----Humanities

プログラムで実行することは可能ですか?

ありがとう

1
stlawrance

wp_insert_term の戻り値を追跡し、それを使用して構造を構築します。戻り値が成功すると、term_idwp_insert_term配列にparentとして渡すことができる$argsキーを持つ配列になります。

$parent = wp_insert_term('Science', 'category'); // I'll leave out `$args` here
if (is_wp_error($parent)) {
  // insert didn't work! return from your function or error or whatever
  return;
}

// grade 11 category has "Sience" as its parent
$grade11 = wp_insert_term('Grade 11', 'category', ['parent' => $parent['term_id']]);
if (is_wp_error($grade11)) {
  // same as above, something went wrong
  return;
}

// Management has the parent "Grade 11"
wp_insert_term('Management', 'category', ['parent' => $grade11['term_id']]);

一度だけ挿入する限り、 after_switch_theme にフックして自分の作業を行うことができます。おそらく最初にあなたの用語を調べてそれが挿入されていないことを確かめるか、成功したら挿入された用語IDでオプションを設定するでしょう。

add_action('after_switch_theme', 'wpse206511_switch');
function wpse206511_switch()
{
    if (get_option('wpse206511_term_id')) {
        // already done, bail
        return;
    }

    // category insert code from above

    // set the term ID in an option that you can check later
    // if/when the theme gets activated/deactivated again
    add_option('wpse206511_term_id', $parent['term_id']);
}
1
chrisguitarguy