スポンサーリンク
このブログはまだPHP5で動かしていますが、自宅のPCにPHP7とWordPressの4.6を新規インストールして動かしたら管理画面の表示が崩れました。スタイルシートを読み込めてないようですが、原因はwp-include/plugin.php の 600行目でした。
ちなみに32Bit版 Linux Mint 18で次のようにして入れた PHP です。関係ないと思いますが、WebサーバーはH2Oでhttpsにしています。
sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.1-fpm php7.1-cgi php7.1-mbstring php7.1-mysql php7.1-xml php7.1-xmlrpc php7.1-xsl php7.1-zip php7.1-bz2
wp-include/plugin.php の 600行目は次のようになっています。
do { foreach ( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ) call_user_func_array($the_['function'], array_slice($args, 0, (int) $the_['accepted_args'])); } while ( next($wp_filter[$tag]) !== false );
この call_user_func_array が原因でした。上の部分を次のとおりに変えたら直りました。
do { foreach ( (array) current($wp_filter[$tag]) as $the_ ) if ( !is_null($the_['function']) ){ $arr = array(); foreach(array_slice($args, 0, $the_['accepted_args']) as $a){ $arr[] = &$a; } call_user_func_array($the_['function'], $arr); } } while ( next($wp_filter[$tag]) !== false );
PHP の関数 call_user_func_array へ渡す値が参照渡しになっていなかった事が原因です。上の改変箇所ではその値が参照渡しになるように変えています。
参考サイト PHP 5.3: 参照渡しの関数/メソッドを定義してた人は call_user_func_array に注意 – 肉とビールとパンケーキ by @sotarok
ただし、WordPress のバージョンをアップデートすると上書きされて元に戻ってしまうと思います。
プラグインを作る場合、この関数自体にはフックがないので、この関数を呼び出している元の関数にフックする必要がありそうです。
関連コンテンツ
スポンサーリンク