Як я можу дізнатися поточний тип публікації, коли перебуваю на post.php в адміністраторі?


11

Я намагаюся зробити щось із гачком admin_init, якщо - і лише якщо - користувач редагує публікацію (post.php) з повідомленням типу "подія". Моя проблема полягає в тому, що, хоча 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тоді, як я можу дізнатися, що таке посада postid = 81?

Спасибі Мальте


про що global $post?
Сісір

глобальна публікація ще не доступна в гачку
admin_init

Відповіді:


21
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    // if the post type is 'event' do something
    if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
        // Do something
    }
}

Під час редагування існуючої публікації URL-адреса: '/wp-admin/post.php?post=81&action=edit'
Малібур

Все виправлено зараз ... навіть якщо вам доведеться запитати
ДБ,

1
Будь ласка, додайте пояснення до того, що робить ваш код
Пітер Гузен

Дуже корисна відповідь навіть у 2018 році!
LoicTheAztec

Відповіді з коду тільки не дуже корисні. Дивіться коментар @PieterGoosen вище, від ~ 5 років тому ....
random_user_name

0

Я збираюся розкрити відповідь MiCc83. Є кілька речей, які не відповідають оригінальним питанням ОП, але в цілому це чудове рішення. Наприклад, це не працюватиме з подією post_type, оскільки ви у відповіді перевіряєте тип "post_type" як "повідомлення".

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    if ( 'post.php' === $pagenow && isset($_GET['post']) ){
        $post_id = $_GET['post'];

        // Do something with $post_id. For example, you can get the full post object:
        $post = get_post($post_id);

    }
}

Умова 'post' === get_post_type( $_GET['post'] )в попередній відповіді не дозволить цьому працювати над поштою "подія". Вам потрібно перевірити тип повідомлення "подія" замість "повідомлення".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.