Перемещение "тип записи регистрации" в отдельный файл не работает


Я создаю простой плагин. Когда я регистрирую пользовательский тип записи в основном файле плагина, он работает, но когда я перемещаю его в отдельный файл, он не отображается в меню администратора...

Часть основного файла плагина:

if ( ! defined( 'ABSPATH' ) ) {
    die( 'Access denied.' );
}

//Get some constants ready 
define( 'QD_KLANTEN_VERSION', '0.0.1' );
define( 'QD_KLANTEN_PATH', dirname( __FILE__ ) );
define( 'QD_KLANTEN_PATH_INCLUDES', dirname( __FILE__ ) . '/inc' );
define( 'QD_KLANTEN_FOLDER', basename( QD_KLANTEN_PATH ) );
define( 'QD_KLANTEN_URL', plugins_url() . '/' . QD_KLANTEN_FOLDER );


add_action( 'init', 'qdklanten_load_files' );
function qdklanten_load_files() {
    require_once( QD_KLANTEN_PATH_INCLUDES .'/qdklanten_cpt.php' );
    require_once( QD_KLANTEN_PATH_INCLUDES .'/qdklanten_settings.php' );
}

Внутри qdklanten_cpt.php Я регистрирую CPT.. Но он не отображается в меню администратора.. После того, как я ТАКЖЕ пытаюсь зарегистрировать CPT в главном файле, я получаю предупреждение о том, что CPT с тем же именем уже загружен.... Так что, по-видимому, регистрация CPT выполняется во втором файле, но не полностью...?

Мой qdklanten_cpt.php файл:

add_action( 'init', 'qdklanten_register_cpt' );
function qdklanten_register_cpt() {

    $labels = array(
        'name'               => 'QD Klanten',
        'singular_name'      => 'QD Klanten',
        'menu_name'          => 'QD Klanten',
        'name_admin_bar'     => 'QD Klanten',
        'add_new'            => 'Add New',
        'add_new_item'       => 'Add New Client',
        'new_item'           => 'New Client',
        'edit_item'          => 'Edit Client',
        'view_item'          => 'View Client',
        'all_items'          => 'All Clients',
        'search_items'       => 'Search Clients',
        'parent_item_colon'  => 'Parent Clients:',
        'not_found'          => 'No clients found.',
        'not_found_in_trash' => 'No clients found in Trash.'
    );

    $args = array(
        'labels'             => $labels,
        'description'        => 'Description.',
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'qd-klanten' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
        //'register_meta_box_cb' => 'add_qdklantencpt_metaboxes'
    );

    register_post_type( 'qdklanten', $args );  

}

Почему CPT регистра работает в основном файле, а не в отдельном файле..? Я также require_once файл php настроек без каких-либо проблем.

Я удалил все входные данные CPT в базе данных.. Пробовал flush_rewrite_rules(); на register_activation_hook..

Обратите внимание, я не получаю ошибок php, и с WP_DEBUG также нет ошибок.

Я прочитал все о CPT в кодексе WP, но не могу найти там решение... Должен хотя это было бы легко исправить, но спустя день я все еще не могу этого понять....

Пожалуйста, помогите:-)

С уважением, Бьорн

Author: denis.stoyanov, 2015-09-23

1 answers

Вы загружаете файлы в init, и ваш загруженный файл подключает что-то к init. В тот момент, когда загрузка файла init уже произошла, вы добавляете действие слишком поздно. Просто загрузите файлы вне функции и убедитесь, что все в этих файлах подключено к правильному действию.

 1
Author: Milo, 2015-09-23 21:52:01