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() )
Jawaban:
Hanya spekulasi, tapi saya ingin tahu apakah Anda mengalami masalah fungsi anonim. Fungsi anonim diizinkan dalam WP, dan biasanya berfungsi dengan baik (menganggap PHP diperbarui), tetapi, jika Anda mencari di sekitar Anda akan menemukan laporan bug yang diduga atau setidaknya perilaku yang tidak terduga.
Dalam hal ini, saya tidak yakin bahwa saya pernah melihat fungsi anonim yang digunakan sebagai contoh di WordPress Codex, dan saya tidak ingat pernah menjalankannya sebelumnya dalam tema dan kode plug-in. Tentu saja, saya tidak punya mata untuk fungsi-fungsi anon, tetapi, tetap saja, saya pikir fungsi di atas hampir selalu ditulis dalam beberapa versi format dua bagian yang lebih akrab - yaitu:
Jadi, sebagai percobaan, saya akan mencoba format di atas yang lebih "konvensional", dan juga mencobanya dengan prioritas yang ditunjuk lebih tinggi atau lebih rendah dari 10. Jika melampirkan beberapa fungsi anonim ke filter yang sama, saya akan memberi mereka prioritas yang berbeda, atau gunakan array (contoh di sini: http://snippets.khromov.se/adding-multiple-actions-and-filters-using-anonymous-functions-in-wordpress/ ), atau tulis masing-masing dari keduanya dengan nama dua- berpisah juga.
Sebenarnya, saya menemukan cara 2 bagian yang sedikit lebih panjang lebih mudah untuk dibaca, dilacak, dan disesuaikan.
sumber
WordPress menggunakan templat yang berbeda untuk halaman di situs Anda. Jika Anda memiliki template page.php di tema Anda, itu akan digunakan untuk menampilkan halaman Anda. Jika Anda memiliki single.php, itu akan digunakan untuk menampilkan posting tunggal Anda. index.php atau home.php akan menampilkan halaman rumah Anda, atau page.php jika Anda memiliki halaman tertentu yang dipilih sebagai halaman rumah melalui opsi membaca.
Jadi, pernyataan kondisional Anda:
Akan sangat berguna di header.php atau file footer.php- atau di page.php jika Anda memiliki halaman tertentu yang dipilih dalam opsi membaca.
sumber