Saya punya masalah mendasar yang membuat saya terkejut WP tidak memiliki solusi asli untuk (kecuali saya mengabaikan sesuatu, semoga).
Saya memiliki situs WP dengan static page
ditetapkan sebagai halaman depan dalam pengaturan membaca. Dalam kode plugin, saya mencoba menentukan apakah WP menampilkan halaman depan dan menambahkan kelas ke $classes
array jika benar. Saya menggunakan kode berikut untuk mencapainya
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Saya menggunakan keduanya is_front_page()
dan is_home()
jika pengaturan halaman depan berubah dari halaman statis ke tata letak blog di masa depan.
Masalah yang saya temui adalah bahwa kode ini menambah home-page
kelas body
bahkan pada wp-signup.php
halaman.
Memeriksa kode mengungkapkan is_front_page()
panggilan itu WP_Query::is_front_page()
, yang pada dasarnya mengembalikan hasil WP_Query::is_page(get_option('page_on_front'))
. Jadi akar masalahnya adalah yang wp-signup.php
memenuhi syarat sebagai halaman (id) dikembalikan oleh get_option('page_on_front')
( yang mengembalikan ID
halaman statis ditetapkan sebagai halaman depan dalam pengaturan> membaca ).
WP_Query::is_page()
menggunakan secara WP_Query::get_queried_object()
internal untuk memutuskan apakah halaman saat ini adalah halaman yang ada dalam argumen metode. Dalam wp-signup.php
kasus ini, kode yang menetapkan objek yang ditanyakan saat ini adalah sebagai berikut
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Ini menunjukkan bahwa wordpress, untuk beberapa alasan, menanyakan halaman depan untuk menampilkan wp-signup.php
dan memunculkan pertanyaan-pertanyaan berikut.
- Mengapa
is_front_page()
mengembalikan hasil yang salah? - AFAIK
wp-signup.php
tidak pernah dapat ditetapkan sebagai beranda menggunakan pengaturan administrator Wordpress lalu mengapa kode wordpress tidak dibatalkan hanya dengan memeriksaPHP_SELF
atauREQUEST_URI
? - Mengapa WP_Query memiliki beranda saat ini pada
$this->post
saat ini?
Saya telah mengesampingkan masalah plugin dengan menghapus direktori plugins (and mu-plugins). Itu masih memenuhi syarat wp-signup.php
sebagai halaman depan di mana tidak untuk halaman lain.
Setiap bantuan mengenai masalah ini akan sangat dihargai.
Perbarui
Saya menggunakan WP verison 4.2.4 dan ini merupakan pengaturan multisite.
Terima kasih.
if
kondisi berikut :( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )