Intereting Posts
Как я могу надежно найти URL-адрес для скрипта или другого файла? У меня есть около 404 по ссылке rel = alternate json + oembed, как ее исправить? Удаление меток заголовка при разрыве строки Переадресация wp-admin с помощью ssl Тема переключения только изменяет используемую таблицу стилей История пользовательских сообщений Бесконечная проблема после цикла WordPress Когда я нажимаю кнопку «Добавить новую категорию» в сообщении, никаких действий нет Как получить значения из полей ввода администрирования woocommerce? Добавление признака для публикации с использованием базы данных «-2» Добавляется в конец URL (нет дубликатов страниц, нет страниц в корзине) Ошибка переходных процессов и кэширование Редактор TinyMCE становится белым по биографической информации Фильтр http_response_timeout не работает Поле формы контакта 7 неверно отображает ошибки проверки формата в Firefox и IE

Получить тип сообщения на странице редактирования

Я пишу backend для моей темы и имею 4 пользовательских типа сообщений. Я зарегистрировал их все, и теперь я пишу обменники и обработчики.

Мой вопрос: в WordPress admin, есть ли способ определить, какой пользовательский тип сообщения вы редактируете? т.е. скажем, что у меня есть специальный тип Testimonials , я нажимаю « Добавить новый» и представлен различными полями. Есть ли функция в WordPress, которая сообщит мне, что это за тип сообщения?

Я пробовал get_post_type() , но ничего не возвращает.

Есть набор крючков и переменных, которые позволят вам легко определить тип сообщения, поэтому вы можете подключаться к действиям, определенным для данного типа, я приведу несколько примеров ниже.

Примеры

Если вы захотите добавить метабокс на экран создания сообщений для типа публикации book , я бы, вероятно, использовал крючок вдоль строк.

 add_action( 'add_meta_boxes_book', 'my_callback_defining_metaboxes' ); function my_callback_defining_metaboxes() { add_meta_box( ... ); } 

Вы можете заменить book соответствующим типом сообщения, например. пост, страница или пользовательский.

Если я захочу вставить сценарии на редактирование или добавить новый столбец для типа публикации книги, я могу использовать ..

 add_action( 'admin_print_scripts-edit.php', 'my_func_to_enqueue_scripts' ); add_action( 'admin_print_scripts-post-new.php', 'my_func_to_enqueue_scripts' ); function my_func_to_enqueue_scripts() { global $typenow; if( 'book' == $typenow ) wp_enqueue_script( ... ); } 

Если бы я хотел сделать еще один шаг и зацепиться за каждую страницу, связанную с типом книги, я буду использовать более общий крючок и выполнить условную логику на одной из переменных администратора .. (пока вы не зацепите действительно рано вы можете надежно ссылаться на эти вары).

 add_action( 'admin_print_scripts', 'enqueue_scripts_on_specific_posttype_pages' ); function enqueue_scripts_on_specific_posttype_pages() { global $parent_file; if( 'edit.php?post_type=book' == $parent_file ) wp_enqueue_script( ... ); } 

$parent_file всегда является ссылкой или URL-адресом родительского элемента меню для данного типа сообщения, который, как вы заметили, отличается от общего $hook_suffix , добавленного к admin_print_scripts- hook, например. admin_print_scripts-edit.php ..

В приведенном выше примере будет привязываться к очереди на любую страницу для типа book , которая включает экраны управления таксономией.

Надеюсь, что это полезно.

Глобальный $current_screen->post_type более устойчив, чем полагаться на $_GET['post_type'] или $parent_file .

это потому, что сообщение еще не сохранено.

попробуйте с $_GET['post_type']

Если вы хотите получить информацию о текущем экране, вы можете зависеть от того, в каком из них вы работаете.

Например, посмотрите:

 add_action('add_meta_boxes', function () { $screen = get_current_screen(); var_dump($screen); var_dump(get_the_ID()); }); 

Когда вы нажимаете « Добавить новое» и в процессе выполнения add_meta_boxes, вы можете получить текущий экран (пожалуйста, не используйте глобальные переменные), а также новый идентификатор сообщения, которое в настоящее время находится в состоянии « Проект» .