cum să știi dacă administratorul este în pagina de editare a unui articol sau pagini
Folosesc acest cod după ce am verificat dacă utilizatorul este administrator
if ( isset($_GET['action']) && $_GET['action'] === 'edit' )
există o metodă mai bună?

Poți folosi get_current_screen
pentru a determina acest lucru.
$screen = get_current_screen();
if ( $screen->parent_base == 'edit' ) {
echo 'ecran de editare';
}
Nu aș spune neapărat că această metodă este întotdeauna mai bună, depinde de ce este necesar, dar probabil așa aș proceda. Marele avantaj al acestei metode este că ai acces la mai multe informații și, prin urmare, poți face mai multe și diferite distincții. Aruncă o privire peste documentație pentru a înțelege la ce mă refer.
Ar trebui folosită în hook-uri mai târzii, Codex spune:
Funcția returnează
null
dacă este apelată din hook-uladmin_init
. Este recomandat să o folosești într-un hook mai târziu, cum ar ficurrent_screen
.

Acest lucru ar fi valabil și pentru o listă de articole și pagini, nu-i așa? De exemplu mywebsite.com/wp-admin/edit.php?post_status=draft&post_type=post

@Nathan Adevărat, așa este. După cum s-a menționat în răspuns, ceea ce este potrivit pentru scop depinde de cazul de utilizare. Cu siguranță aceasta nu este cea mai bună abordare pentru toate cazurile, dar în unele situații este una bună, dacă nu chiar cea mai bună.

Notă: Apelarea directă a funcției get_current_screen() în multe cazuri poate provoca o eroare fatală. Asigurați-vă că o încapsulați într-o funcție și o apelați dintr-un hook adecvat.

$screen->is_block_editor == 1 a funcționat pentru mine pentru a verifica pagina de editare. parent_base pare a fi gol.

parent_base
este întotdeauna NULL pentru mine atât în lista de postări cât și în editarea unei singure postări. Ce am folosit în schimb este if (get_current_screen()->base === 'post' && get_current_screen()->post_type === 'my_post_type')
. Aceasta este pentru editarea administrativă a unei singure postări. Pentru ecranul edit.php (ecranul administrativ cu lista de postări) folosiți edit
în loc de post
.

edit: citiți comentariile pentru posibile deficiențe.
Puteți folosi variabila globală $pagenow
global $pagenow;
if ($pagenow == 'post.php' && get_post_type() == 'post') {
// editarea unui articol de blog
}
if ($pagenow == 'profile.php') {
// editarea paginii de profil a utilizatorului
}

Am constatat că funcționează, cu excepția cazului $_GET['post_type']
. Totuși, get_post_type()
a funcționat pentru mine în schimb.

$_GET['post_type']
este setat doar pe post-new.php
, când se creează un articol nou, și nu pe post.php
, care este momentul când articolul este editat. get_post_type()
va funcționa pentru post.php deoarece articolul există deja și are un tip de postare, dar nu sunt sigur că va funcționa pe post-new.php. Răspunsul lui Frank este mai bun deoarece funcționează pentru ambele situații.

mulțumesc pentru ajutor. este cel mai bun răspuns pentru unele situații.

nu, ce zici de post-new.php? există nume noi de pagini la fiecare versiune majoră, acest lucru nu este de încredere.

- Folosește 'get_current_screen', dar asigură-te mai întâi că funcția există.
- După cum spune codex-ul "Această funcție este definită pe majoritatea paginilor de administrare, dar nu pe toate."
- Apropo, acest lucru filtrează și vizualizările normale (pentru cititori) (recitește acea propoziție, cu accent pe paginile de administrare).
cel mai probabil următorul lucru pe care vrei să îl afli este dacă te afli efectiv pe o pagină sau articol...
// Elimină casetele meta inutile pentru articole function FRANK_TWEAKS_current_screen() { // "Această funcție este definită pe majoritatea paginilor de administrare, dar nu pe toate." if ( function_exists('get_current_screen')) { $pt = get_current_screen()->post_type; if ( $pt != 'post' && $pt != 'page') return; remove_meta_box( 'authordiv',$pt ,'normal' ); // Caseta Meta Autor remove_meta_box( 'commentstatusdiv',$pt ,'normal' ); // Caseta Meta Stare Comentarii remove_meta_box( 'commentsdiv',$pt ,'normal' ); // Caseta Meta Comentarii remove_meta_box( 'postcustom',$pt ,'normal' ); // Caseta Meta Câmpuri Personalizate remove_meta_box( 'postexcerpt',$pt ,'normal' ); // Caseta Meta Rezumat remove_meta_box( 'revisionsdiv',$pt ,'normal' ); // Caseta Meta Revizii remove_meta_box( 'slugdiv',$pt ,'normal' ); // Caseta Meta Slug remove_meta_box( 'trackbacksdiv',$pt ,'normal' ); // Caseta Meta Trackback } } add_action( 'current_screen', 'FRANK_TWEAKS_current_screen' );
