Um die erste Frage zu beantworten ...
Wenn Sie in die in WP_Automatic_Updater
gefundene Klasse schauen, wp-admin/includes/class-wp-upgrader.php
notieren wir die Methode is_disabled
, mit der die Methode should_update
bestimmt, ob eine automatische Aktualisierung zulässig ist oder nicht.
Die is_disabled
Methode gibt unter den folgenden Bedingungen true zurück:
- wenn
DISALLOW_FILE_MODS
konstant definiert ist und isttrue
- wenn
WP_INSTALLING
konstant unabhängig vom Wertzustand definiert ist
- wenn
AUTOMATIC_UPDATER_DISABLED
konstant definiert ist alstrue
Beachten Sie jedoch, dass die letztere Konstante AUTOMATIC_UPDATER_DISABLED
auch einem Filter zugeordnet ist automatic_updater_disabled
. Selbst wenn sie definiert ist, kann der Wert an anderer Stelle gefiltert werden. In diesem Fall ist es am besten, wenn Sie den folgenden Hook deklarieren:
add_filter( 'automatic_updater_disabled', '__return_true' );
Hier ist der Methodenauszug aus der WP_Automatic_Updater
Klasse:
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 );
}
Ich würde weiterhin den folgenden Link zum Lesen vorschlagen:
Automatische Hintergrundaktualisierungen konfigurieren
http://codex.wordpress.org/Configuring_Automatic_Background_Updates
... enthält eine detaillierte Liste der verfügbaren Konstanten und Filter für die Feinkornsteuerung, welche Komponenten gegen Aktualisierungen deaktiviert werden sollen.
Wenn Sie nur automatische Plugin-Updates deaktivieren möchten, haben Sie:
add_filter( 'auto_update_plugin', '__return_false' );
...und so weiter.
Um Ihre zweite Frage zu beantworten ...
(Jemand korrigiert mich, wenn ich falsch liege)
Fügen wir einen Kontext für die Leser hinzu. Diese gesamte Frage ist das Ergebnis dieses Twitter-Status, der an sich eine Antwort auf die erzwungene automatische Aktualisierung des WP SEO-Plugins von Yoast war. Siehe folgendes: https://yoast.com/wordpress-seo -security-release / , für weitere Informationen.
In wp-includes/update.php
named gibt es eine Funktion, wp_maybe_auto_update
die am Hook mit demselben Namen do_action('wp_maybe_auto_update')
ausgelöst wird und aus der wp_version_check
Funktion in derselben Datei ausgelöst wird, die an sich ein geplantes Ereignis ist, das zweimal täglich ausgeführt wird.
Ich vermute also, dass WordPress.org die Version von WordPress intern inkrementiert hat, sodass den Benutzern aufgrund der offensichtlichen Schwere der Sicherheitslücke, die mit dem Yoast WP SEO-Plugin verbunden ist, ein automatisches Update aufgezwungen wird.
Um Yoast selbst zu zitieren :
Aufgrund der Schwere des Problems hat das WordPress.org-Team ein erzwungenes automatisches Update veröffentlicht (danke!).
Ich bin nicht 100% sicher, ob dies tatsächlich dann auch automatisch andere Plugins aktualisiert hat, die neue Versionen im WordPress.org-Repository hatten, oder ob WordPress.org vorschreiben kann, welche Plugins von dort aus automatisch aktualisiert werden können, vielleicht dort etwas innerhalb des Codes, das auch diese Art von Diskretion zulässt.
Ich bin mir nicht ganz sicher, ob Sie dieselben Mechanismen selbst für Plugins verwenden können, die Sie im WordPress.org-Repository hosten, ja, für Plugins außerhalb des offiziellen Repositorys. Möglicherweise können Sie dies jedoch Instanziieren Sie die WP_Automatic_Updater
Klasse und stellen Sie ihr einen Kontext zur Verfügung, gegen den geprüft werden kann, aber ich denke, letztendlich landen wir in einer Funktion, die aufgerufen wird und wp_update_plugins
in wp-includes/update.php
der die offizielle WordPress-Repository-API überprüft wird.
Ich kann mich irren. Wenn also jemand etwas hinzuzufügen hat, melden Sie sich bitte.
set_site_transient( 'update_plugins' )
in derwp_update_plugins()
Funktion, wo sie ein bestimmtes Plugin vorübergehend als aktualisierungsbedürftig kennzeichnen können. Von dort geht es bergab ...