Вставка терминов таксономии Во время активации плагина?
Я пробовал разные способы сделать это. В принципе, я пытался сделать так, чтобы мой плагин заполнял термины таксономии только один раз во время активации плагина. Заполнение термина выполняется в функции с помощью функции wp_insert_terms. Вызов функции прямо внутри крючка register_activation_hook, похоже, не работает, как и подключение к крючку инициализации с помощью крючка register_activation_hook. У кого-нибудь есть какие-нибудь идеи?
Вот версия моего кода
//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);
}
}
Когда это не сработало, я попытался сделать это:
//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');
}
}
Ни одна из идей не сработала для меня до сих пор.
2 answers
Вот исправленная версия вашего кода.
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);
}
}
И не забудьте создать объект/экземпляр класса vsetup, т.е. new vsetup()
Ха! Забыл удалить инструкцию debug.
Потрясающе! Это решило мою проблему. Но потом у меня появился другой. Многие люди, как и я, хранят классы в папке ниже, чем файл плагина, который их создает. Таким образом, в вашем файле плагина может быть:
//assumes some kind of autoloading
$vsetup = new vsetup; //where there might be a file called 'classes/vsetup.class.php'
Ну, вот как я это делаю, и вышесказанное сработает, если вы удалите крючок активации реестра из конструктора класса и поместите его как часть метода, создавшего экземпляр vsetup, например:
$vsetup = new vsetup;
register_activation_hook ( __FILE__, array( $vsetup, 'activate' ) );
Может быть, это кому-то поможет...