私は驚いたかなり基本的な問題を抱えています。WPにはネイティブソリューションがありません(見逃していない限り、うまくいけば)。
私はWPサイトで、static page
をリーディング設定のフロントページに設定しました。プラグインコードで、WPがフロントページを表示しているかどうかを判断し、そうであれば$classes
配列にクラスを追加します。私はそれを達成するために次のコードを使っています
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
将来、フロントページの設定が静的ページからブログレイアウトに変更された場合に備えて、is_front_page()
とis_home()
の両方を使用しています。
私が遭遇する問題は、このコードがhome-page
ページでさえもwp-signup.php
クラスをbody
に追加することです。
コードを調べると、is_front_page()
がWP_Query::is_front_page()
を呼び出していることがわかります。これは基本的にWP_Query::is_page(get_option('page_on_front'))
の結果を返します。そのため、問題の根本は、wp-signup.php
が、get_option('page_on_front')
( settings> reading の先頭ページとして設定された静的ページのID
を返す)によって返されるページ(id)になることです。
WP_Query::is_page()
は内部的にWP_Query::get_queried_object()
を使用して、現在のページがメソッドの引数に含まれるページかどうかを判断します。 wp-signup.php
の場合、現在の照会オブジェクトを設定するコードは次のとおりです。
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
これは、何らかの理由でwordpressがwp-signup.php
を表示するためにフロントページを照会し、次の質問をすることを示しています。
is_front_page()
が間違った結果を返すのはなぜですか?wp-signup.php
をWordpressの管理者設定を使ってホームページに設定することはできません。PHP_SELF
やREQUEST_URI
をチェックするだけではWordpressのコードが無効にならない理由$this->post
にあるのはなぜですか? プラグインの問題 をプラグイン(およびmu-plugins)ディレクトリを削除することで除外しました。まだwp-signup.php
を他のページには適さないフロントページとして認めています。
この問題に関しての手助けは大歓迎です。
アップデート
私はWP verison 4.2.4を使用していますが、これはマルチサイト設定です。
ありがとう。
単なる推測ですが、無名関数の問題に遭遇しているのではないでしょうか。匿名関数はWPで許可されており、通常は正常に動作します(更新されたPHPを想定)が、周りを検索すると、疑わしいバグまたは少なくとも予期しない動作のレポートが見つかります。
その点、WordPress Codexで匿名関数が例として使用されているのを見たことがあるかどうかはわかりません。また、テーマやプラグインのコードで以前に実行されたことがあることを思い出せません。もちろん、私はanon関数に目を向けていませんでしたが、それでも、上記の関数はほとんどいつもよりよく知られている2部形式のいくつかのバージョンで書かれると思います。
add_filter('body_class', 'ejay_add_home_class');
function ejay_add_home_class($classes) {
if (is_front_page() || is_home()) {
$classes[] = 'home-page';
}
return $classes;
}
したがって、実験として、上記の「従来の」形式を試してみて、10より高いまたは低い指定優先順位で試してみます。複数の無名関数を同じフィルターに付加する場合は、優先順位を変えます。または配列を使用するか(例: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ )、またはそれらを1つずつ書く二部構成者としても。
実のところ、少し長い2部構成の方が、とにかく読みやすく、追跡し、調整しやすいと思います。