web-dev-qa-db-fra.com

Insertion de la catégorie par programmation

Je me demande comment dois-je insérer la catégorie par programme et ne l'insérer qu'une fois après l'activation du thème.

Je sais jusqu'ici.

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' );

je ne sais pas comment insérer des enfants, etc. Je veux insérer une catégorie structurée comme ceci:

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

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

Est-il possible de le faire par programme?

Merci

1
stlawrance

Gardez une trace de la valeur de retour de wp_insert_term et utilisez-la pour construire votre structure. Une valeur de retour réussie sera un tableau avec une clé term_id que vous pouvez passer dans le tableau wp_insert_term de $args en tant que 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']]);

En ce qui concerne l'insertion unique, vous pouvez vous connecter à after_switch_theme et faire votre travail. Vous voudrez probablement rechercher votre terme en premier pour vous assurer qu'il n'a pas été inséré, ou définir une option avec l'identifiant de terme inséré en cas de succès.

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