Chèn điều khoản phân loại trong quá trình kích hoạt plugin?


8

Tôi đã thử nhiều cách để làm điều này. Về cơ bản, tôi đã cố gắng làm cho nó để một plugin của tôi điền vào các điều khoản phân loại chỉ một lần trong quá trình kích hoạt plugin. Thuật ngữ điền được thực hiện trong một chức năng thông qua chức năng wp_insert_terms. Gọi hàm trực tiếp bên trong register_activation_hook dường như không hoạt động và cũng không móc vào hook init bằng cách sử dụng register_activation_hook. Còn ai có ý tưởng nào không?

Đây là một phiên bản mã của tôi

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

Khi nó không hoạt động, tôi đã thử làm điều này:

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

Không có ý tưởng làm việc cho tôi cho đến nay.


Bạn có thể vui lòng hiển thị mã bạn đang sử dụng trong register_activation_hook không?
Hameedullah Khan

@Hameedullah Mã Khan được thêm vào cho rõ ràng về những gì tôi đã thử cho đến nay.
Manny Fleurmond

Câu trả lời:


9

Đây là phiên bản cố định của mã của bạn.

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

Và đừng quên tạo đối tượng / thể hiện của lớp vsetup tức là new vsetup()

Huh! Quên xóa câu lệnh gỡ lỗi.


Ồ, vậy là phần chèn không hoạt động vì các nguyên tắc phân loại chưa tồn tại. Gonna thử điều này khi tôi đi làm về
Manny Fleurmond

Chỉ để xem liệu tôi có hiểu những gì đang xảy ra ở đây không - register_taxonomy đang được gọi trên hook "init" (vì vậy mọi lúc) trong hook hook (dường như thực thi trước init, nếu không thì điều này là không cần thiết)? Và việc chèn thuật ngữ chỉ xảy ra khi kích hoạt (không phải init), và thậm chí sau đó chỉ sau khi các nguyên tắc phân loại đã được tuyên bố?
somatic

@somatic vâng thưa ngài.
Manny Fleurmond

1

Tuyệt vời! Điều này đã giải quyết vấn đề của tôi. Nhưng sau đó tôi đã có một cái khác. Nhiều người, giống như tôi, giữ các lớp trong một thư mục thấp hơn tệp plugin đang khởi tạo chúng. Vì vậy, bạn có thể có trong tập tin plugin của bạn:

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

Vâng, đây là cách tôi làm, và ở trên sẽ hoạt động nếu bạn loại bỏ móc kích hoạt đăng ký khỏi hàm tạo của lớp và đặt nó như một phần của phương thức tạo ra thể hiện của vsetup, như:

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

Có lẽ điều này giúp ai đó ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.