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 pageditetapkan sebagai halaman depan dalam pengaturan membaca. Dalam kode plugin, saya mencoba menentukan apakah WP menampilkan halaman depan dan menambahkan kelas ke $classesarray 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-pagekelas bodybahkan pada wp-signup.phphalaman.
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.phpmemenuhi syarat sebagai halaman (id) dikembalikan oleh get_option('page_on_front')( yang mengembalikan IDhalaman 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.phpkasus 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.phpdan memunculkan pertanyaan-pertanyaan berikut.
- Mengapa
is_front_page()mengembalikan hasil yang salah? - AFAIK
wp-signup.phptidak pernah dapat ditetapkan sebagai beranda menggunakan pengaturan administrator Wordpress lalu mengapa kode wordpress tidak dibatalkan hanya dengan memeriksaPHP_SELFatauREQUEST_URI? - Mengapa WP_Query memiliki beranda saat ini pada
$this->postsaat ini?
Saya telah mengesampingkan masalah plugin dengan menghapus direktori plugins (and mu-plugins). Itu masih memenuhi syarat wp-signup.phpsebagai 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.
ifkondisi berikut :( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )