Einfügen von Taxonomiebegriffen während einer Plugin-Aktivierung?

8

Ich habe verschiedene Möglichkeiten ausprobiert, dies zu tun. Grundsätzlich habe ich versucht, es so zu gestalten, dass ein Plugin von mir die Begriffe einer Taxonomie nur einmal während der Aktivierung des Plugins auffüllt. Der Begriff Auffüllen erfolgt in einer Funktion über die Funktion wp_insert_terms. Das Aufrufen der Funktion direkt im register_activation_hook scheint nicht zu funktionieren, und das Verknüpfen mit dem init-Hook über den register_activation_hook funktioniert auch nicht. Hat jemand irgendwelche Ideen?

Hier ist eine Version meines Codes

//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);
     }
}

Als das nicht funktionierte, habe ich Folgendes versucht:

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

Bisher hat keine der beiden Ideen für mich funktioniert.

Manny Fleurmond
quelle
Können Sie bitte den Code anzeigen, den Sie in register_activation_hook verwenden?
Hameedullah Khan
@ Hameedullah Khan Code hinzugefügt, um Klarheit darüber zu schaffen, was ich bisher versucht habe.
Manny Fleurmond

Antworten:

9

Hier ist die feste Version Ihres Codes.

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

Und vergessen Sie nicht, das Objekt / die Instanz der vsetup-Klasse zu erstellen, d. H. new vsetup()

Huh! Ich habe vergessen, die Debug-Anweisung zu entfernen.

Hameedullah Khan
quelle
Oh, also hat die Beilage nicht funktioniert, weil die Taxonomien noch nicht existierten. Ich werde es versuchen, wenn ich von der Arbeit nach Hause
komme
Nur um zu sehen, ob ich verstehe, was hier passiert - register_taxonomy wird am "init" -Hook (also jedes Mal) und während des Aktivierungs-Hooks (der vor init ausgeführt zu werden scheint, sonst wäre dies nicht notwendig) aufgerufen ? Und das Einfügen von Begriffen erfolgt erst bei Aktivierung (nicht bei Init) und auch dann erst, nachdem Taxonomien deklariert wurden?
somatische
@somatic ja, sir.
Manny Fleurmond
1

Genial! Dies löste mein Problem. Aber dann hatte ich noch einen. Viele Leute, wie ich, halten Klassen in einem Ordner, der niedriger ist als die Plugin-Datei, die sie instanziiert. So könnten Sie in Ihrer Plugin-Datei haben:

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

Nun, so mache ich das, und das Obige funktioniert, wenn Sie den Registeraktivierungs-Hook aus dem Konstruktor der Klasse entfernen und ihn als Teil der Methode einfügen, die die Instanz von vsetup erstellt hat, wie:

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

Vielleicht hilft das jemandem ...

Jim Maguire
quelle