Nâng cấp từ 5.0.4 lên 5.1.1 khiến $ theme không có giá trị


7

Khi chúng tôi nâng cấp từ 5.0.4 lên 5.1.1, trang web sẽ ngừng tải.

Thông báo lỗi là

Fatal error:  Uncaught Error: Call to a member function images_path() on null 
/wp-content/themes/mytheme/header.php on line 49

Dòng 49 là <?php $theme->images_path(); ?>

ở trên nó trong cùng một tập tin là global $theme;

$ theme được tạo trong Hàm.php như là ví dụ của chủ đề tùy chỉnh của chúng tôi.

class MyTheme {
  private $theme_name = "MyTheme";
  private $scripts_version = '0.90';

  function __construct() {
    add_action('init', array($this, 'init_assets'));
    ...several of these
  ...more methods
  }
}
...other stuff
$theme = new MyTheme();

Tôi không biết cách khắc phục sự cố này. Mọi thứ đều hoạt động tốt trước khi nâng cấp và không có thay đổi nào khác được thực hiện cho trang web.

Bất kỳ trợ giúp đánh giá cao.


1
Mã liên quan nào tồn tại trước dòng 49? Các biến được định nghĩa trong hàm.php không tự động có sẵn trong các tệp mẫu. Giả sử bạn đã đổi tên $ theme thành $ lp_theme, có lẽ bạn nên thực hiện global $lp_theme;trước khi thử sử dụng nó.
Anastis

Câu trả lời:


12

Kể từ Thay đổi 44524 , đã xuất hiện trong WordPress 5.1, biến $themenày hiện là biến toàn cục được đặt bởi WordPress, cũng không được đặt sau khi các chủ đề đã được khởi động :

// Load the functions for the active theme, for both parent and child theme if applicable.
foreach ( wp_get_active_and_valid_themes() as $theme ) {
    if ( file_exists( $theme . '/functions.php' ) ) {
        include $theme . '/functions.php';
    }
}
unset( $theme );

Điều này có nghĩa là bất kỳ giá trị nào được đặt theo chủ đề của bạn cũng sẽ không được đặt.

Để sửa lỗi nghiêm trọng, bây giờ bạn phải thay thế tất cả các biến được đặt tên $themebằng phiên bản tiền tố $my_theme. Tiền tố biến và chức năng trong phạm vi toàn cầu được coi là thực tiễn tốt nhất để tránh các vấn đề như vậy.


Tôi vẫn chưa có cách khắc phục để giải quyết trong trường hợp của mình, nhưng chúng tôi đã thực hiện một số thử nghiệm riêng biệt về vấn đề này và bạn có thể phát hiện ra nguyên nhân và cách giải quyết. Bravo
Giám mục

1

Luôn kiểm tra các điều khoản dành riêng và các biến toàn cục để tránh xung đột có thể xảy ra.

Tổng quan có thể được tìm thấy tại Codex WordPress:



Lưu ý: Những danh sách đó có thể không phải lúc nào cũng được cập nhật 100%, vì vậy việc kiểm tra phiên bản mã nguồn bạn đang sử dụng là khả năng duy nhất chắc chắn 100%.

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.