Всем привет,
В WP 4.2 проекте создаю плагин и в register_activation_hook запускаю процедуру для создания таблиц с инициализирующими данными.
Также я создаю в wp-content/themes/mytheme/functions.php новый тип поста и категорию с помощью функций
register_post_type и register_taxonomy, что-то вроде :
require(ABSPATH."wp-admin/includes/plugin.php");
$artistssongsPluginPath= 'artistssongs/artists-songs-plugin.php';
if( is_plugin_active( $artistssongsPluginPath ) ) { // pluging artistssongs must be installed
if ( ! function_exists( 'artists_songs_cp' ) ) {
function artists_songs_cp() {
$labels = array(
'name' => _x( 'Artists&Songs', 'Post Type General Name', 'artists_songs' ),
...
'not_found_in_trash' => __( 'Not found in trash', 'artists_songs' ),
);
$args = array(
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', ),
'taxonomies' => array( 'artists_songs_tax' ), // categories, which will be created below.
...
);
register_post_type( 'artists_songs', $args );
}
add_action( 'init', 'artists_songs_cp', 0 ); // init artists_songs type
}
if ( ! function_exists( 'artists_songs_tax' ) ) {
function artists_songs_tax() { // categories for type above
$labels = array(
'name'=> _x( 'Category Artists&Songs', 'Taxonomy General Name', 'artists_songs' ),
...
'not_found'=> __( 'Not found', 'artists_songs' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
);
register_taxonomy( 'artists_songs_tax', array( 'artists_songs' ), $args );
}
add_action( 'init', 'artists_songs_tax', 0 ); // init categories
я ставлю проверку с помощью is_plugin_active для того, чтобы эти типы данных создавались только, если мой плагин активирован.
Сложность в том что при создании инициализирующих данных в register_activation_hook мне нужно уже иметь польовательские типы, но они еще не созданы…
Не подскажите, как обойти эту коллизию ?
Не знаю, понятно ли я описал что хочу.
Чуть подробнее : кроме создания нового тип поста и категории с помощью register_post_type и register_taxonomy у меня есть расширение
редактора постов и для этого расширения мне нужно обращаться к методам моего плагина(для получения данных для создания списка в этом расширении редактора).
Поскольку в моем плагине, уже эти есть методы то хотелось их и спользовать. Может зря, поскольку из-за этого и проблемка .
А код который обычно вставляют в functions.phpfunctions.php я завернул в обьект и его и вызвал в functions.php :
require(ABSPATH."wp-admin/includes/plugin.php"); // Нужен для вызова is_plugin_active
$artistssongsPluginPath= ‘artistssongs/artists-songs-plugin.php’;
if( is_plugin_active( $artistssongsPluginPath ) ) { // pluging artistssongs must be installed
require_once(ABSPATH . ‘/wp-content/plugins/artistssongs/lib/extend-post.php’);
$extendPostObj = new extendPost( get_site_url(), get_site_url() . ‘/wp-content/plugins/artistssongs/’ ); // init my object
…
} // if( is_plugin_active( $artistssongsPluginPath ) ) { // pluging artistssongs must be installed
А при инициализации этого плагина нужно создавать данные этого создаваемого типа. Получилась взаимная ссылка.
Пока что вижу решение из functions.php убрать вызов методов моего плагина. Или можно как-то извернуться?