cum să știi dacă administratorul este în pagina de editare a unui articol sau pagini

7 dec. 2013, 19:17:51
Vizualizări: 54.9K
Voturi: 28

Folosesc acest cod după ce am verificat dacă utilizatorul este administrator

   if ( isset($_GET['action'])  && $_GET['action'] === 'edit' )

există o metodă mai bună?

2
Comentarii

Din testele mele de astăzi, aceasta pare a fi cea mai bună metodă de a face acest lucru cu condiționalele actuale din WP, deoarece get_current_screen este documentat ca eșuând cu o eroare fatală pe unele ecrane din administrare. Consultați documentația pentru mai multe informații, https://codex.wordpress.org/Function_Reference/get_current_screen

Nathan Nathan
25 mar. 2016 20:44:13

dar încercarea de a apela get_current_screen() va rezulta într-o eroare fatală deoarece nu este definită. — atunci poate înfășurați-o în if (function_exists('get_current_screen'))?

Frank N Frank N
1 ian. 2017 10:11:31
Toate răspunsurile la întrebare 3
5
31

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-ul admin_init. Este recomandat să o folosești într-un hook mai târziu, cum ar fi current_screen.

7 dec. 2013 19:41:06
Comentarii

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 Nathan
25 mar. 2016 20:42:01

@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ă.

Nicolai Grossherr Nicolai Grossherr
26 mar. 2016 15:38:06

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.

squarecandy squarecandy
13 ian. 2017 18:53:34

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

Floris Floris
21 sept. 2021 14:25:36

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.

Denis P Denis P
6 aug. 2024 18:27:17
6
27

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

}
10 iul. 2017 11:39:55
Comentarii

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

Ashe Abbott DiBlasi Ashe Abbott DiBlasi
14 sept. 2017 19:30:18

$_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.

Jacob Peattie Jacob Peattie
10 apr. 2018 10:31:35

În prima condiție, de ce există un SAU ( || ) în loc de un ȘI ( && )?

alexg alexg
8 iun. 2021 12:25:23

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

Abilash Erikson Abilash Erikson
5 nov. 2021 13:07:10

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

scavenger scavenger
29 apr. 2024 04:46:18

Această soluție nu funcționează. Când dai click înăuntru și în afară din editarea unui bloc, acesta se re-randeză greșit. Funcționează doar la prima încărcare.

Shane McCurdy Shane McCurdy
22 mai 2024 18:52:19
Arată celelalte 1 comentarii
1
  • 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' );
    
1 ian. 2017 12:48:54
Comentarii

mersi pentru împărtășire, get_current_screen() este instrumentul potrivit de utilizat deoarece oferă o cantitate bună de date.

Sagive Sagive
9 nov. 2017 10:13:21