Make WordPress Core


Ignore:
Timestamp:
05/17/2021 05:02:49 PM (4 years ago)
Author:
SergeyBiryukov
Message:

Plugins: Add support for Update URI header.

This allows third-party plugins to avoid accidentally being overwritten with an update of a plugin of a similar name from the WordPress.org Plugin Directory.

Additionally, introduce the update_plugins_{$hostname} filter, which third-party plugins can use to offer updates for a given hostname.

If set, the Update URI header field should be a URI and have a unique hostname.

Some examples include:

  • https://wordpress.org/plugins/example-plugin/
  • https://example.com/my-plugin/
  • my-custom-plugin-name

Update URI: false also works, and unless there is code handling the false hostname, the plugin will never get an update notification.

If the header is present, the WordPress.org API will currently only return updates for the plugin if it matches the following format:

  • https://wordpress.org/plugins/{$slug}/
  • w.org/plugin/{$slug}

If the header has any other value, the API will not return a result and will ignore the plugin for update purposes.

Props dd32, DavidAnderson, meloniq, markjaquith, DrewAPicture, mweichert, design_dolphin, filosofo, sean212, nhuja, JeroenReumkens, infolu, dingdang, joyously, earnjam, williampatton, grapplerulrich, markparnell, apedog, afragen, miqrogroove, rmccue, crazycoders, jdgrimes, damonganto, joostdevalk, jorbin, georgestephanis, khromov, GeekStreetWP, jb510, Rarst, juliobox, Ipstenu, mikejolley, Otto42, gMagicScott, TJNowell, GaryJ, knutsp, mordauk, nvartolomei, aspexi, chriscct7, benoitchantre, ryno267, lev0, gregorlove, dougwollison, SergeyBiryukov.
See #14179, #23318, #32101.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-admin/includes/class-wp-plugin-install-list-table.php

    r50808 r50921  
    4848        if ( isset( $plugin_info->no_update ) ) {
    4949            foreach ( $plugin_info->no_update as $plugin ) {
    50                 $plugin->upgrade          = false;
    51                 $plugins[ $plugin->slug ] = $plugin;
     50                if ( isset( $plugin->slug ) ) {
     51                    $plugin->upgrade          = false;
     52                    $plugins[ $plugin->slug ] = $plugin;
     53                }
    5254            }
    5355        }
     
    5557        if ( isset( $plugin_info->response ) ) {
    5658            foreach ( $plugin_info->response as $plugin ) {
    57                 $plugin->upgrade          = true;
    58                 $plugins[ $plugin->slug ] = $plugin;
     59                if ( isset( $plugin->slug ) ) {
     60                    $plugin->upgrade          = true;
     61                    $plugins[ $plugin->slug ] = $plugin;
     62                }
    5963            }
    6064        }
Note: See TracChangeset for help on using the changeset viewer.