Вставка категории программно


Мне интересно, как мне вставить категорию программно, и она должна вставляться только 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

Можно ли это сделать программно?

Спасибо

Author: stlawrance, 2015-10-25

1 answers

Следите за возвращаемым значением wp_insert_term и используйте его для построения своей структуры. Успешным возвращаемым значением будет массив с ключом term_id, который вы можете передать в массив wp_insert_term $args в виде parent.

$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 и делай свое дело. Вероятно, вы захотите сначала просмотреть свой термин, чтобы убедиться, что он не был вставлен, или установить опцию с идентификатором вставленного термина при успешном выполнении.

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
Author: chrisguitarguy, 2015-10-25 14:05:34