Cập nhật plugin bắt buộc là gì, làm thế nào tôi có thể tránh và sử dụng nó cho các plugin của mình


7

Sau một cuộc thảo luận trên twitter, có vẻ như wordpress.org có khả năng đẩy các bản cập nhật bảo mật cho các plugin ngay cả đến các trang web không chọn tham gia nhận cập nhật plugin tự động. Bất cứ ai cũng có thể giải thích sự hợp lý cho nó và làm thế nào tôi có thể chặn các loại cập nhật này?

Mặt khác, chức năng này bị giới hạn bởi "ma thuật" đối với wordpress.org hoặc tôi có thể sử dụng cùng một cơ chế để cập nhật các plugin và chủ đề được phân phối từ máy chủ của mình trong khi vẫn tuân thủ quy trình cập nhật chung và quy tắc của wordpress lõi (rõ ràng trong mã của tôi, tôi có thể bỏ qua mọi thứ để kích hoạt cập nhật, câu hỏi là làm thế nào để tôi phù hợp nhất với mong đợi của người dùng như được thể hiện bằng cách thiết lập hằng số hoặc sử dụng các bộ lọc liên quan đến cập nhật khác nhau).

Câu trả lời:


8

Để trả lời câu hỏi đầu tiên ...

Nếu bạn xem trong WP_Automatic_Updaterlớp tìm thấy trong wp-admin/includes/class-wp-upgrader.phpchúng tôi lưu ý phương thức is_disabledđược sử dụng bởi phương thức should_updateđể xác định xem có cho phép cập nhật tự động hay không.

Các is_disabledphương pháp sẽ trở lại đúng theo các điều kiện sau đây,

  • nếu DISALLOW_FILE_MODShằng được định nghĩa và làtrue
  • nếu WP_INSTALLINGhằng được định nghĩa bất kể trạng thái giá trị
  • nếu AUTOMATIC_UPDATER_DISABLEDhằng được định nghĩa làtrue

Tuy nhiên, hãy lưu ý rằng hằng số sau AUTOMATIC_UPDATER_DISABLEDcũng được liên kết với bộ lọc, automatic_updater_disableddo đó, ngay cả khi được xác định, giá trị có thể được lọc ở nơi khác trong trường hợp bạn được phục vụ tốt nhất bằng cách khai báo hook sau:

add_filter( 'automatic_updater_disabled', '__return_true' );

Đây là đoạn trích phương thức từ WP_Automatic_Updaterlớp:

wp-admin/includes/class-wp-upgrader.php:1730

/**
 * Whether the entire automatic updater is disabled.
 *
 * @since 3.7.0
 */
public function is_disabled() {
    // Background updates are disabled if you don't want file changes.
    if ( defined( 'DISALLOW_FILE_MODS' ) && DISALLOW_FILE_MODS )
        return true;

    if ( defined( 'WP_INSTALLING' ) )
        return true;

    // More fine grained control can be done through the WP_AUTO_UPDATE_CORE constant and filters.
    $disabled = defined( 'AUTOMATIC_UPDATER_DISABLED' ) && AUTOMATIC_UPDATER_DISABLED;

    /**
     * Filter whether to entirely disable background updates.
     *
     * There are more fine-grained filters and controls for selective disabling.
     * This filter parallels the AUTOMATIC_UPDATER_DISABLED constant in name.
     *
     * This also disables update notification emails. That may change in the future.
     *
     * @since 3.7.0
     *
     * @param bool $disabled Whether the updater should be disabled.
     */
    return apply_filters( 'automatic_updater_disabled', $disabled );
}

Tôi sẽ đề nghị thêm các liên kết sau để đọc:

Cấu hình cập nhật nền tự động

http://codex.wordpress.org/Configuring_Automatic_Background_Updates

... trong đó cung cấp chi tiết một danh sách các hằng số và bộ lọc có sẵn để kiểm soát hạt mịn đối với các thành phần nào cần vô hiệu hóa đối với các bản cập nhật.

Đối với trường hợp chỉ vô hiệu hóa cập nhật plugin tự động, bạn có:

add_filter( 'auto_update_plugin', '__return_false' );

...và kể từ đó trở đi.

Để trả lời câu hỏi thứ hai của bạn ...

(ai đó sửa tôi nếu tôi sai)

Chúng ta hãy thêm một số bối cảnh cho độc giả, toàn bộ câu hỏi này là kết quả của trạng thái twitter này , bản thân nó là một phản ứng với bản cập nhật tự động bắt buộc của plugin WP SEO của Yoast, xem phần sau, https://yoast.com/wordpress-seo -securance-phát hành / , để biết thêm thông tin.

Có một chức năng wp-includes/update.phpđược đặt tên wp_maybe_auto_updateđược bắn vào hook có cùng tên do_action('wp_maybe_auto_update')được bắn từ bên trong wp_version_checkchức năng có trong cùng một tệp mà chính nó là một sự kiện được lên lịch chạy hai lần mỗi ngày.

Vì vậy, điều mà tôi nghi ngờ WordPress.org đã làm, đó là họ đã tăng phiên bản WordPress nội bộ để một bản cập nhật tự động sẽ bị ép buộc đối với người dùng do mức độ nghiêm trọng của lỗ hổng bảo mật liên quan đến plugin Yoast WP SEO.

Để tự trích dẫn Yoast:

Vì mức độ nghiêm trọng của sự cố, nhóm WordPress.org đã đưa ra bản cập nhật tự động bắt buộc (cảm ơn!)

Tôi không chắc chắn 100% cho dù điều này trong thực tế sau đó cũng tự động cập nhật bất kỳ plugin nào khác có phiên bản mới trong kho lưu trữ WordPress.org hoặc liệu WordPress.org có thể ra lệnh những plugin nào có thể được cập nhật tự động từ cuối không, có lẽ ở đó một cái gì đó trong mã cũng cho phép loại tùy ý này.

Về việc bạn có thể tự sử dụng các cơ chế tương tự hay không, đối với các plugin mà bạn lưu trữ trong kho WordPress.org, vâng, đối với những người bên ngoài kho lưu trữ chính thức, tôi không hoàn toàn chắc chắn, nhưng bạn có thể nhanh chóng các WP_Automatic_Updaterlớp và cung cấp cho nó một bối cảnh mà để kiểm tra chống lại nhưng tôi nghĩ rằng cuối cùng chúng tôi kết thúc trong chức năng gọi wp_update_pluginstrong wp-includes/update.phpđó kiểm tra đối với API kho WordPress chính thức.

Tôi có thể không chính xác vì vậy nếu bất cứ ai có thêm điều gì đó để thêm, xin vui lòng bấm vào.


2
Chỉ WP-SEO được cập nhật tự động. Nhóm WordPress rõ ràng có thể đặt cờ cho phép tính năng tự động cập nhật cho plugin / chủ đề. Nếu nó được xác định bởi lõi có một bản cập nhật, thì lõi sẽ lấy thông tin cập nhật ( github.com/WordPress/WordPress/blob/master/wp-admin/includes/ trộm ). Dường như trong phản hồi này, một biến có thể xuất hiện để làm cho plugin / theme thực hiện tự động ( github.com/WordPress/WordPress/blob/master/wp-admin/includes/ tựa ). Tôi không biết nếu nhà phát triển có thể đặt cờ này.
Peter van der Does

@PetervanderDoes Cảm ơn, đó là những gì tôi nghĩ và đào sâu thêm một chút, họ set_site_transient( 'update_plugins' )trong wp_update_plugins()chức năng, đó là nơi họ có thể gắn cờ tạm thời một plugin cụ thể khi yêu cầu cập nhật. Tất cả xuống đồi từ đó ...
Adam
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.