Как узнать текущий тип записи при редактировании в post.php в админке?
Я пытаюсь выполнить определенное действие с помощью хука admin_init, если и только если пользователь редактирует запись (post.php) с типом записи "event". Моя проблема в том, что, хотя WordPress указывает на глобальную переменную $post_type, если я делаю:
global $post_type;
var_dump($post_type);
Возвращается NULL.
но если я делаю это:
global $pagenow;
var_dump($pagenow);
возвращается моя текущая страница, т.е. "post.php".
Я изучил функцию $screen = get_current_screen();
, но она не объявляется до того, как выполнится хук admin_init, и тогда уже слишком поздно.
Итак, мой вопрос: как во время выполнения admin_init определить, какой тип записи редактируется в данный момент? Если URL имеет вид post.php?post=81&action=edit
, как узнать, какой тип записи имеет post с id=81?
Спасибо Malthe

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
// Глобальный объект, содержащий текущую страницу админки
global $pagenow;
// Если текущая страница post.php и пост установлен, то запрашиваем его тип записи
// если тип записи 'post', делаем что-то
if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
// Делаем что-то
}
}

При редактировании существующей записи URL имеет вид '/wp-admin/post.php?post=81&action=edit'

Теперь исправлено... хотя для этого пришлось выполнить запрос к базе данных...

Я расширю ответ MiCc83. В нем есть несколько моментов, которые не полностью соответствуют исходному вопросу автора, но в целом это отличное решение. Например, оно не будет работать с типом записи event, потому что в ответе проверяется тип записи 'post'.
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
// Глобальный объект, содержащий текущую страницу админки
global $pagenow;
// Если текущая страница post.php и пост установлен, то запрашиваем его тип записи
if ( 'post.php' === $pagenow && isset($_GET['post']) ){
$post_id = $_GET['post'];
// Делаем что-то с $post_id. Например, можно получить полный объект записи:
$post = get_post($post_id);
}
}
Условие 'post' === get_post_type( $_GET['post'] )
в предыдущем ответе не позволит этому коду работать с типом записи 'event'. Вместо проверки на 'post' нужно проверять на 'event'.
