2016-04-05 3 views
0

Я создал плагин, который создает пользовательские типы сообщений и виджеты с такими настраиваемыми типами сообщений. Тип персонализированного сообщения регистрируется с помощью тега init и виджета с номером widget_init.Пользовательские типы сообщений еще не зарегистрированы в Widgets_init?

Как так:

public function __construct() { 
    // load the modules 
    add_action('init', array($this, 'addModule')); 

} 

public function addModule() { 
    // register the post type. 
    register_post_type($this->post_type, $this->getArgs()); 
} 

и виджет называется так:

add_action('widgets_init', function() { 
    register_widget('Webburo\Widgets\project\ProjectsWidget'); 
}); 

Когда я var_dump() типы почтовых с get_post_types() в коде виджета, он не будет показывать вновь зарегистрированный почтовые типы. Поэтому мне кажется, что типы сообщений еще не зарегистрированы в widget_init. Есть ли что-то, что я делаю неправильно, или что-то не хватает?

ответ

0

Видимо widget_init запускаемый с приоритетом 1 init действия. Это объясняет, почему мои типы сообщений еще не зарегистрированы. Я назначил свое действие приоритету 0, поэтому мои типы сообщений будут зарегистрированы до того, как мои виджеты будут.

add_action('init', array($this, 'addModule'), 0, 1); 

Источник: https://codex.wordpress.org/Plugin_API/Action_Reference

0

Убедитесь, что вы установили открытый ключ в аргументах, переданных в функции register_post_type().

Затем используйте следующий код, чтобы получить все общественный зарегистрированный тип сообщения:

$args = array(
    'public' => true, 
); 

$output = 'names'; // names or objects, note names is the default 
$operator = 'and'; // 'and' or 'or' 

$post_types = get_post_types($args, $output, $operator); 

foreach ($post_types as $post_type) {  
    echo '<p>' . $post_type . '</p>'; 
} 
+0

Я установил открытый ключ так, но все еще не получают пользовательские типы почтовых я уже зарегистрированы. Однако, если я, например, использую функцию в действии 'admin_init', я могу видеть пользовательские типы сообщений. Это похоже на то, что он еще не зарегистрирован в момент кода виджета. –

+0

Это может быть причиной, так как admin_init запускается перед любым другим подключением, когда пользователь обращается к области администрирования. и загружается init hook, за которым следуют другие, то есть крючок виджета и т. Д. –

Смежные вопросы