web-dev-qa-db-fra.com

Insertion de termes de taxonomie lors de l'activation d'un plugin?

J'ai essayé différentes façons de le faire. Fondamentalement, j'ai essayé de faire en sorte qu'un plugin de mon peuple remplisse les termes d'une taxonomie une seule fois lors de l'activation du plugin. Le terme peuplement se fait dans une fonction via la fonction wp_insert_terms. L'appel de la fonction directement à l'intérieur de register_activation_hook ne semble pas fonctionner, pas plus que l'accrochage au crochet d'initialisation à l'aide de register_activation_hook. Quelqu'un a des idées?

Voici une version de mon code

//version 1
class vsetup {
     function __construct() {
          register_activation_hook(__FILE__,array($this,'activate'));
          $this->create_taxonomies();
     } 
     function activate() {
          wp_insert_term('Action','genre');
          wp_insert_term('Adventure','genre');
     }
     function create_taxonomies() {
           $genre_args = array( 
            'hierarchical' => true,  
                'labels' => array(
            'name'=> _x('Genres', 'taxonomy general name' ),
            'singular_name' => _x('Genre', 'taxonomy singular name'),
            'search_items' => __('Search Genres'),
            'popular_items' => __('Popular Genres'),
            'all_items' => __('All Genres'),
            'edit_item' => __('Edit Genre'),
            'edit_item' => __('Edit Genre'),
            'update_item' => __('Update Genre'),
            'add_new_item' => __('Add New Genre'),
            'new_item_name' => __('New Genre Name'),
            'separate_items_with_commas' => __('Seperate Genres with Commas'),
            'add_or_remove_items' => __('Add or Remove Genres'),
            'choose_from_most_used' => __('Choose from Most Used Genres')
            ),  
                'query_var' => true,  
            'rewrite' => array('slug' =>'genre')        
           );
           register_taxonomy('genre', 'post',$genre_args);
     }
}

Quand ça n'a pas marché, j'ai essayé de faire ça:

 //version 2
    class vsetup {
         function __construct() {
              register_activation_hook(__FILE__,array($this,'activate'));
              $this->create_taxonomies();
         } 
         function activate() {
              add_action('init', array($this,'populate_taxonomies'));
         }
          function create_taxonomies() {
               $genre_args = array( 
                'hierarchical' => true,  
                    'labels' => array(
                'name'=> _x('Genres', 'taxonomy general name' ),
                'singular_name' => _x('Genre', 'taxonomy singular name'),
                'search_items' => __('Search Genres'),
                'popular_items' => __('Popular Genres'),
                'all_items' => __('All Genres'),
                'edit_item' => __('Edit Genre'),
                'edit_item' => __('Edit Genre'),
                'update_item' => __('Update Genre'),
                'add_new_item' => __('Add New Genre'),
                'new_item_name' => __('New Genre Name'),
                'separate_items_with_commas' => __('Seperate Genres with Commas'),
                'add_or_remove_items' => __('Add or Remove Genres'),
                'choose_from_most_used' => __('Choose from Most Used Genres')
                ),  
                    'query_var' => true,  
                'rewrite' => array('slug' =>'genre')        
               );
               register_taxonomy('genre', 'post',$genre_args);
         }
         function populate_taxonomies() {
              wp_insert_term('Action','genre');
              wp_insert_term('Adventure','genre');
         }
    }

Aucune idée n'a fonctionné pour moi jusqu'à présent.

7
Manny Fleurmond

Voici la version corrigée de votre code.

class vsetup {
     function __construct() {
          register_activation_hook(__FILE__,array($this,'activate'));
          add_action( 'init', array( $this, 'create_taxonomies' ) );
     } 
     function activate() {
          $this->create_taxonomies();
          wp_insert_term('Action','genre');
          wp_insert_term('Adventure','genre');
     }
     function create_taxonomies() {
           $genre_args = array( 
            'hierarchical' => true,  
                'labels' => array(
            'name'=> _x('Genres', 'taxonomy general name' ),
            'singular_name' => _x('Genre', 'taxonomy singular name'),
            'search_items' => __('Search Genres'),
            'popular_items' => __('Popular Genres'),
            'all_items' => __('All Genres'),
            'edit_item' => __('Edit Genre'),
            'edit_item' => __('Edit Genre'),
            'update_item' => __('Update Genre'),
            'add_new_item' => __('Add New Genre'),
            'new_item_name' => __('New Genre Name'),
            'separate_items_with_commas' => __('Seperate Genres with Commas'),
            'add_or_remove_items' => __('Add or Remove Genres'),
            'choose_from_most_used' => __('Choose from Most Used Genres')
            ),  
                'query_var' => true,  
            'rewrite' => array('slug' =>'genre')        
           );
           register_taxonomy('genre', 'post',$genre_args);
     }
}

Et n'oubliez pas de créer l'objet/l'instance de la classe vsetup i.e new vsetup()

Hein! J'ai oublié de supprimer la déclaration de débogage.

8
Hameedullah Khan

Impressionnant! Cela a résolu mon problème. Mais j'en ai eu un autre. De nombreuses personnes, comme moi, conservent les classes dans un dossier inférieur au fichier de plug-in qui les instancie. Donc, vous pourriez avoir dans votre fichier de plugin:

//assumes some kind of autoloading
$vsetup = new vsetup; //where there might be a file called 'classes/vsetup.class.php'

Eh bien, voici comment je le fais, et ce qui précède fonctionnera si vous supprimez le crochet d'activation de registre du constructeur de la classe et que vous le placez dans le cadre de la méthode qui a créé l'instance de vsetup, comme:

$vsetup = new vsetup;
register_activation_hook ( __FILE__, array( $vsetup, 'activate' ) );

Peut-être que cela aide quelqu'un ...

1
Jim Maguire