web-dev-qa-db-fra.com

Définir les termes d'objet ne fonctionnant pas avec l'activation du plugin

J'essaie de créer quelques publications personnalisées et de définir un terme de taxonomie personnalisé lors de l'activation du plug-in. J'utilise le hook d'activation du plug-in register pour le faire. Les publications sont créées correctement, mais le terme de publication n’est pas défini. J'utilise wp_set_object_terms pour le faire. Quelle pourrait être la cause possible?

Mon code ressemble à ceci:

register_activation_hook( __FILE__, 'insert_latest_books' );

public function insert_latest_books() {
    //Get the latest books
    $data = new Data_Fetcher();
    $latest_books = $data->get_latest_books();

    foreach($latest_books as $latest_book) {
        //Create a book post for each latest book
        $book = [
            'post_type' => 'book',
            'post_status' => 'publish',
            'post_title' => $latest_book->name,
            'post_content' => $latest_book->description
        ];

        $book_id = wp_insert_post($book);

        //TODO: Not working on plugin activation
        wp_set_object_terms($book_id, array('latest'), 'label');
        set_book_thumbnail($book_id, $latest_book->name, $latest_book->preview_image_url);
        update_post_meta($book_id, 'book_code', $latest_book->embed_code);
        update_post_meta($book_id, 'book_pages', $latest_book->length);
    }
}
1
Rutwick Gangurde

J'ai appris des commentaires de @Pieter Goosen et @ Ignat.B, et de la réponse de @Pieter Goosen ici , que je devais enregistrer la taxonomie lors de l'activation du plugin et insérez le terme. Ensuite, je dois associer le code d'enregistrement de la taxonomie au crochet d'action init, comme suggéré par le codex. Cela garantira que, lorsque j'insère le terme sur l'activation du plug-in, la taxonomie est déjà enregistrée et que je suis init, je suis les instructions de WordPress pour utiliser init à cette fin.

Le pseudo code:

function register_tax() {
    //Register the taxonomy
}


function activate() {
    register_tax();
    wp_insert_term(...);
}

register_activation_hook('...', 'activate');
add_action('init', 'register_tax');

J'espère que cela aide quelqu'un coincé dans une situation similaire. La réponse de Pieter est vraiment utile si vous avez besoin d'explications.

1
Rutwick Gangurde

register_activation_hook est un hook d'activation unique. Il peut être utilisé pour la création de structure de base de données, par exemple, qui ne doit être déclenchée que par le déclencheur d'activation de plug-in.

Afin de définir une taxonomie personnalisée, vous avez besoin d'un hook qui ne se déclenchera pas une seule fois, mais à chaque charge WordPress. Tels que init.

Utilisez add_action( 'init', 'YOUR_CALLBACK' ); pour y parvenir

2
Ignat B.