私は get_current_screen();
を見てきました。私が使用できるグローバル $current_screen;
もあるのを見ました。
これが2つの例です。
// 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';
}
}
1つの方法が他の方法よりも優れていると考えられますか?もしそうならなぜですか?
あなたの例では、現在違いはありません。ある場合は、同じオブジェクトを取得します。それを試してみてください:
global $current_screen;
$current_screen->foo = 1;
$screen = get_current_screen();
$screen->foo = 2;
echo '$current_screen->foo: ' . $current_screen->foo; // 2!
簡単な理由:オブジェクトはPHPではコピーとして渡されません。
しかし:グローバル変数は本当に悪いです、なぜなら誰でもいつでも変更できるからです。遠い、遠い、WordPressはこのグローバル変数を非推奨にするかもしれません。オブジェクトを取得するために関数ラッパーを使用しているのであれば、問題ないはずです。そうでなければ、あなたのコードは通知を出すかもしれません。
そして、あなたが本当にオブジェクトを手に入れたかどうか常にチェックしてください。 $current_screen->post_type
が存在しない可能性があります。
get_current_screen
関数は実際にはグローバル$ current_screen変数を使用しますが、違いは、関数get_current_screen
がグローバル変数$ current_screenが設定されているかどうかを確認してからnull
を返すか、または$ current_screen。
私はこれを考慮して、私はあなたがこの余分なissetチェックを含めるようにget_current_screen
関数を使うことを勧めます。
WordPressのソースコード (wp-admin/includes/screen.php)の174行目で見てください。