Tôi có một vấn đề khá cơ bản mà tôi ngạc nhiên là WP không có giải pháp riêng cho (trừ khi tôi đang xem xét một cái gì đó, hy vọng).
Tôi có một trang WP với static page
thiết lập là trang trước trong cài đặt đọc. Trong mã plugin, tôi đang cố xác định xem WP có hiển thị trang trước hay không và thêm một lớp vào $classes
mảng nếu điều đó là đúng. Tôi đang sử dụng mã sau để thực hiện nó
add_filter('body_class', function($classes){
if(is_front_page() || is_home()){
$classes[] = 'home-page';
}
return $classes;
});
Tôi đang sử dụng cả hai is_front_page()
và is_home()
trong trường hợp cài đặt trang trước thay đổi từ trang tĩnh sang bố cục blog trong tương lai.
Vấn đề tôi gặp phải là mã này thêm home-page
lớp body
ngay cả trên wp-signup.php
trang.
Kiểm tra mã cho thấy is_front_page()
các cuộc gọi WP_Query::is_front_page()
, về cơ bản trả về kết quả WP_Query::is_page(get_option('page_on_front'))
. Vì vậy, gốc rễ của vấn đề là wp-signup.php
đủ điều kiện là trang (id) được trả về bởi get_option('page_on_front')
( trả về ID
trang tĩnh được đặt làm trang trước trong cài đặt> đọc ).
WP_Query::is_page()
sử dụng WP_Query::get_queried_object()
nội bộ để quyết định xem trang hiện tại có phải là trang hiện diện trong các đối số phương thức hay không. Trong wp-signup.php
trường hợp, mã đặt đối tượng truy vấn hiện tại như sau
/*...other code... */
elseif ( $this->is_singular && ! empty( $this->post ) ) {
$this->queried_object = $this->post;
$this->queried_object_id = (int) $this->post->ID;
}
/*...other code... */
Điều này cho thấy rằng wordpress, vì một số lý do, truy vấn trang đầu để hiển thị wp-signup.php
và đặt ra các câu hỏi sau đây.
- Tại sao
is_front_page()
trả lại kết quả sai? - Không
wp-signup.php
bao giờ có thể đặt AFAIK làm trang chủ bằng cài đặt quản trị viên Wordpress, tại sao mã wordpress không được bảo lãnh chỉ bằng cách kiểm traPHP_SELF
hoặcREQUEST_URI
? - Tại sao WP_Query có trang chủ hiện tại
$this->post
vào thời điểm này?
Tôi đã loại trừ sự cố plugin bằng cách xóa thư mục plugin (và mu-plugin). Nó vẫn đủ điều kiện wp-signup.php
là trang đầu nơi nó không dành cho bất kỳ trang nào khác.
Bất kỳ trợ giúp liên quan đến vấn đề này sẽ được đánh giá rất cao.
Cập nhật
Tôi đang sử dụng WP verison 4.2.4 và nó là một thiết lập nhiều trang.
Cảm ơn.
if
điều kiện sau :( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )