is_front_page () trục trặc?


8

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 pagethiế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 $classesmả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()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-pagelớp bodyngay cả trên wp-signup.phptrang.

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ề IDtrang 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.phptrườ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.phpvà đặ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.phpbao 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 tra PHP_SELFhoặc REQUEST_URI?
  • Tại sao WP_Query có trang chủ hiện tại $this->postvà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.phplà 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.


Bạn có chắc chắn sử dụng phiên bản mới nhất của WordPress? Và đây có phải là một thiết lập nhiều trang?
TheDeadMote

Tôi đang sử dụng phiên bản 4.2.4 và đúng vậy, đây là một thiết lập nhiều trang. Thêm vào câu hỏi.
Ejaz

Này là số lẻ. Tất cả những gì tôi có thể đề xuất bây giờ là sử dụng ifđiều kiện sau :( ! isset( $GLOBALS['pagenow'] ) || $GLOBALS['pagenow'] !== 'wp-signup.php' ) && ( is_front_page() || is_home() )
TheDeadMedic

Cảm ơn lời đề nghị @TheDeadMedic, sẽ thực hiện nó. Vậy vấn đề là lỗi WP thì sao?
Ejaz

Tôi thực sự đã nghe về điều này xảy ra trước đây trên WPMU. Hãy thử tắt chủ đề của bạn và kích hoạt lại nó.
Matt van Andel

Câu trả lời:


1

Chỉ là suy đoán, nhưng tôi tự hỏi nếu bạn đang gặp vấn đề về chức năng ẩn danh. Các hàm ẩn danh được cho phép trong WP và thường hoạt động tốt (giả sử PHP đã cập nhật), nhưng, nếu bạn tìm kiếm xung quanh, bạn sẽ tìm thấy các báo cáo về các lỗi đáng ngờ hoặc ít nhất là về hành vi không mong muốn.

Đối với vấn đề đó, tôi không chắc chắn rằng tôi đã từng thấy một chức năng ẩn danh được sử dụng làm ví dụ trong Codex WordPress và tôi không thể nhớ mình đã từng chạy qua một chức năng trước đây trong mã chủ đề và trình cắm. Tất nhiên, tôi đã không để mắt đến các chức năng anon, nhưng, tôi vẫn nghĩ rằng chức năng trên hầu như sẽ luôn được viết trong một số phiên bản của định dạng hai phần quen thuộc hơn - tức là:

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;
} 

Vì vậy, với tư cách là một thử nghiệm, tôi sẽ thử định dạng "thông thường" ở trên và cũng thử nó với mức ưu tiên được chỉ định cao hơn hoặc thấp hơn 10. Nếu gắn nhiều chức năng ẩn danh vào cùng một bộ lọc, tôi sẽ cung cấp cho chúng các mức độ ưu tiên khác nhau, hoặc sử dụng một mảng (ví dụ ở đây: http://snippets.khromov.se/adding-multipl-ilities-and-filters-USE-anonymous-fifts-in-wordpress/ ) hoặc viết mỗi một trong số chúng như được đặt tên hai- chia tay, quá.

Trong thực tế, tôi thấy cách 2 phần dài hơn một chút dễ đọc, theo dõi và điều chỉnh hơn.


-4

WordPress sử dụng các mẫu khác nhau cho các trang trên trang web của bạn. Nếu bạn có một mẫu page.php trong chủ đề của mình, nó sẽ được sử dụng để hiển thị các trang của bạn. Nếu bạn có một tệp.php, nó sẽ được sử dụng để hiển thị các bài đăng đơn của bạn. index.php hoặc home.php sẽ hiển thị trang chủ của bạn hoặc page.php nếu bạn có một trang nhất định được chọn làm trang chủ thông qua các tùy chọn đọc.

Vì vậy, tuyên bố điều kiện của bạn:

<?php if (is_front_page()){ ?>
<p>Home Page</p>
<?php else { ?>
<p>Not Home Page</p>
<?php } ?>
?>

Sẽ chỉ thực sự hữu ích trong tệp tiêu đề.php hoặc tệp footer.php hoặc trong page.php nếu bạn có một trang nhất định được chọn trong các tùy chọn đọc.


Cảm ơn câu trả lời nhưng tôi không thấy điều này ảnh hưởng đến các giá trị được trả về bởi các hàm đã nói ở trên.
Ejaz

5
DỪNG GỬI THƯ RÁC!!!! . Liên kết của bạn là rác trở lại trang web của riêng bạn. Bài viết tiếp theo của bạn sẽ được gắn cờ là thư rác. Cảm ơn bạn
Pieter Goosen 27/08/2015

Điều này thậm chí còn không trả lời được câu hỏi trong tầm tay
Pieter Goosen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.