get_the_ID () đưa ra thông báo trong trang 404


6

Tôi đang sử dụng get_the_ID () trong hành động wp_enqueue_scripts của mình do một số nhu cầu, nhưng kết quả là tôi nhận được thông báo sau (wp-debug được bật):

Lưu ý: Đang cố gắng lấy thuộc tính của đối tượng không trong C: \ wamp \ www \ WordPress \ wp-gồm \ post-template.php trên dòng 29

Tôi biết tại sao điều này xảy ra, Câu hỏi của tôi là tại sao điều này nên xảy ra? Không phải WordPress nên biết rằng không có bài đăng $ nào được gán cho 404 và trả về kết quả trống?

Tôi có phải sử dụng không:

if( !is_object($post) ) return;

Ở mọi nơi tôi sử dụng get_the_ID () để thoát khỏi Thông báo đó?

Câu trả lời:


7

get_the_ID() bị phá vỡ.

function get_the_ID() {
    return get_post()->ID;
}

Nó cố gắng sử dụng thành viên IDtrên một hàm đôi khi trả về một postđối tượng :

/* 
 * @return WP_Post|null WP_Post on success or null on failure
 */
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {

get_posts()có thể trở lại NULL, và NULLkhông có thành viên ID, vì nó không phải là một đối tượng.

Không có postđối tượng toàn cầu trên trang 404. Và bởi vì $postlà một biến toàn cục, nó có thể bị xóa ở mọi nơi, ngay cả trên các trang đơn lẻ.

Vì vậy, bất cứ khi nào bạn sử dụng get_the_ID(), bạn phải kiểm tra một postđối tượng.

if ( get_post() )
{
    $id = get_the_ID();
    // do something
}

Có hai bài học để học ở đây:

  1. Không bao giờ tin tưởng API WordPress. Đọc mã, hiểu những hạn chế của nó.
  2. Tránh các biến toàn cục trong mã của riêng bạn. Hãy coi mỗi người là một lỗi nghiêm trọng và loại bỏ nó ngay lập tức.

Tôi cũng có một loạt các cảnh báo trên các trang 404, tất cả đều liên quan đến đối tượng $ post. Có tốt hơn để tạo và sử dụng một chức năng như vậy không, pastebin.com/EwEZAQzi trên các vị trí có ý nghĩa? Vấn đề chính của tôi là tôi sử dụng đối tượng bài viết để tạo các vars JS được bản địa hóa (sử dụng meta post) trong Hàm.php, vẫn chạy trên trang 404.
Tim

@Tim Chỉ không chạy tập lệnh của bạn trên các trang 404. Kiểm tra is_singular()trước khi bạn đang mê mẩn kịch bản.
fuxia

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.