1

Тема: в register_activation_hook польовательский тип

Всем привет,
В  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 мне нужно уже иметь польовательские типы, но они еще не созданы...

Не подскажите, как обойти эту коллизию ?

2

Re: в 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 убрать вызов методов моего плагина. Или можно как-то извернуться?