J'ai regardé get_current_screen();
. J'ai vu qu'il y a aussi un global $current_screen;
que je pourrais utiliser.
Voici deux exemples:
// Using function
function wpse_post_notice() {
$screen = get_current_screen();
// Only run in post/page creation and edit screens
if ( $screen->post_type === 'post' ) {
return 'This is a post';
}
}
// Using gloabl
function wpse_post_notice() {
global $current_screen;
// Only run in post/page creation and edit screens
if ( $current_screen->post_type === 'post' ) {
return 'This is a post';
}
}
Une méthode est-elle considérée meilleure que l'autre? Si oui, pourquoi?
Dans votre exemple, il n'y a actuellement aucune différence. Vous obtenez le même objet, s’il en existe un. Essayez le:
global $current_screen;
$current_screen->foo = 1;
$screen = get_current_screen();
$screen->foo = 2;
echo '$current_screen->foo: ' . $current_screen->foo; // 2!
La raison simple: les objets ne sont pas passés sous forme de copie en PHP.
Mais: les variables globales sont vraiment mauvaises, car tout le monde peut les changer à tout moment. Un jour, très loin, WordPress pourrait rendre obsolète cette variable globale. Si vous utilisez le wrapper de la fonction pour obtenir l'objet, tout va bien. Sinon, votre code pourrait générer des notifications.
Et vérifiez toujours si vous obtenez bien un objet. $current_screen->post_type
pourrait ne pas exister.
La fonction get_current_screen
utilise en fait la variable globale $ current_screen, mais la différence est que la fonction get_current_screen
vérifie si la variable globale $ current_screen est définie, puis renvoie null
(si la variable n'est pas définie) ou $ current_screen.
En ce qui concerne ce sujet, je vous suggère d’utiliser la fonction get_current_screen
afin d’inclure ce contrôle isset supplémentaire.
Voir le code source WordPress (wp-admin/includes/screen.php) ligne 174.