Cum pot afla tipul de postare curent când sunt pe post.php în admin?

4 iul. 2014, 15:46:47
Vizualizări: 20.9K
Voturi: 17

Încerc să fac ceva cu un hook admin_init dacă - și numai dacă - utilizatorul editează o postare (post.php) cu tipul de postare "event". Problema mea este că, deși WordPress indică o variabilă globală numită $post_type, dacă fac:

global $post_type;
var_dump($post_type);

Returnează NULL.

dar dacă fac asta:

global $pagenow;
var_dump($pagenow);

returnează pagina mea curentă, adică "post.php".

M-am uitat la această funcție $screen = get_current_screen(); dar aceasta nu este declarată până după ce hook-ul admin_init a fost executat, și atunci e prea târziu.

Așadar întrebarea mea este, cum pot afla, în momentul în care admin_init este executat, ce tip de postare este postarea curentă care este editată. Dacă URL-ul este post.php?post=81&action=edit atunci, cum pot ști ce tip de postare este postid=81?

Mulțumesc Malthe

2
Comentarii

ce zici de global $post?

Sisir Sisir
4 iul. 2014 15:56:38

post global nu este încă disponibil în hook-ul admin_init

Malibur Malibur
4 iul. 2014 16:15:04
Toate răspunsurile la întrebare 3
5
28
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Obiect global ce conține pagina curentă de administrare
    global $pagenow;

    // Dacă pagina curentă este post.php și post-ul este setat, atunci interoghează pentru tipul său de postare
    // dacă tipul de postare este 'event' faci ceva
    if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
        // Fă ceva
    }
}
4 iul. 2014 16:15:11
Comentarii

Când editezi un articol existent, URL-ul este '/wp-admin/post.php?post=81&action=edit'

Malibur Malibur
4 iul. 2014 16:24:32

În regulă, acum este reparat... deși trebuie să interoghezi baza de date pentru a face asta...

Alessandro Benoit Alessandro Benoit
4 iul. 2014 16:55:40

Te rog să adaugi o explicație despre ce face codul tău

Pieter Goosen Pieter Goosen
4 iul. 2014 16:59:30

Un răspuns foarte util chiar și în 2018!

LoicTheAztec LoicTheAztec
23 apr. 2018 21:08:32

Răspunsurile care conțin doar cod nu sunt foarte utile. Vezi comentariul lui @PieterGoosen de mai sus, de acum ~5 ani...

random_user_name random_user_name
27 mar. 2019 20:06:32
0

get_current_screen()->post_type conține slug-ul tipului de postare. Sau $_REQUEST['post_type']. Rețineți că pentru pagini/postări standard, post_type poate să nu fie setat.

16 ian. 2022 22:35:43
1

Voi extinde răspunsul lui MiCc83. Există câteva aspecte care nu respectă întrebările originale ale OP, dar în general este o soluție excelentă. De exemplu, nu ar funcționa cu un post_type event pentru că verifici post_type ca fiind 'post' în răspuns.

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Obiect global ce conține pagina curentă de administrare
    global $pagenow;

    // Dacă pagina curentă este post.php și post este setat, atunci interoghează pentru tipul său de post
    if ( 'post.php' === $pagenow && isset($_GET['post']) ){
        $post_id = $_GET['post'];

        // Fă ceva cu $post_id. De exemplu, poți obține întregul obiect post:
        $post = get_post($post_id);

    }
}

Condiția 'post' === get_post_type( $_GET['post'] ) din răspunsul anterior ar împiedica acest lucru să funcționeze pentru un post type 'event'. Ar trebui să verifici pentru post type 'event' în loc de 'post'.

26 mar. 2018 04:42:59
Comentarii

Acesta este un răspuns complet și funcțional.

Marty McGee Marty McGee
9 dec. 2020 10:45:18