これは私がもうしばらくの間失敗しています。私は非常に明白な何かまたは非常に明白でない何かを見逃しています。これがWPに関係しているのか、それとも純粋にPHPの仕事に関係しているのか、私には完全にはわかりません。
function test() {
global $wp_query;
var_dump($wp_query == $GLOBALS['wp_query']);
}
function test2() {
global $wp_query;
query_posts(array('posts_per_page' => 1));
var_dump($wp_query == $GLOBALS['wp_query']);
}
test();
test2();
結果:
真偽値true
ブール値false
なぜtest()
はそれをtrue
と評価しますが、test2()
はそれをfalse
と評価しますか?
header( 'Content-Type: text/plain;charset=utf-8' );
error_reporting( E_ALL | E_STRICT );
function failed_unset()
{ // Copy the variable to the local namespace.
global $foo;
// Change the value.
$foo = 2;
// Remove the variable.
unset ( $foo );
}
function successful_unset()
{
// Remove the global variable
unset ( $GLOBALS['foo'] );
}
$foo = 1;
print "Original: $foo\n";
failed_unset();
print "After failed_unset(): $foo\n";
successful_unset();
print "After successful_unset(): $foo\n";
Original: 1
After failed_unset(): 2
Notice: Undefined variable: foo in /srv/www/htdocs/global-unset.php on line 21
Call Stack:
0.0004 318712 1. {main}() /srv/www/htdocs/global-unset.php:0
After successful_unset():
unset()
は最初の関数のグローバルスコープについて何も知りません。変数はローカル名前空間にコピーされたばかりです。
wp-includes/query.php から:
function &query_posts($query) {
unset($GLOBALS['wp_query']);
$GLOBALS['wp_query'] =& new WP_Query();
return $GLOBALS['wp_query']->query($query);
}
見ますか?
ところで:誰かが この素晴らしいトピックについて//Niceフローチャート を作成しました。 ;)
query_posts()
は$GLOBALS
を変更しますが、global
ごとに利用可能にした変数$wp_query
への参照はすべて unset によって影響を受けないです。 (読みやすさの他に)$GLOBALS
を好む理由の1つがこれです。
http://codex.wordpress.org/Function_Reference/query_posts に記載されているように、カスタムクエリの後にwp_reset_query();
を使用してみましたか?