web-dev-qa-db-de.com

In WordPress-Update einbinden?

Ich möchte wissen, ob es eine Möglichkeit gibt, sich in den WordPress-Aktualisierungsprozess einzuklinken und eine $_POST-Variable an den Aktualisierungsserver zu senden.

Ich liefere Plugin/Theme-Updates von einem privaten Server und gehe folgendermaßen vor:

add_filter('pre_set_site_transient_update_themes', 'check_for_update');

was gut funktioniert. Eine neuere Version von Theme/Plugin wird unter Dashboard> Updates angezeigt und ich kann aktualisieren. Das Problem ist jedoch, dass Benutzer nur dann herunterladen/aktualisieren können, wenn sie das richtige Login/Passwort angegeben haben (zuerst über add_option()). Im Idealfall sollte eine direkte Verbindung nur funktionieren, wenn der Client einen $_POST mit Login/Passwort an update.php sendet (die Dateien auf dem Update-Server, die plugin.Zip zurücksenden).

Ich suche so etwas:

add_filter('updating', 'my_func');
function my_func($request){
   $request['login'] = get_option('login');
   $request['pass'] = get_option('pass');
   return $request;
}

Und WordPress sollte beim Aktualisieren des Themes/Plugins $_POST['login'] und $_POST['pass'] an http://example.com/update.php senden und update.php sollte das Herunterladen/Aktualisieren nur erlauben, wenn die Anmeldung mit der dort definierten übereinstimmt (update. PHP ist die Datei auf dem Update-Server, die das Zip-Paket mit einem neueren Plugin an WordPress sendet.

Ich hoffe das ist klar :)

6
Paul

Aktualisieren Sie die interne WP HTTP-API

Eine leicht modifizierte Version von meine Antwort auf diese Frage , aber auch als Plugin, das zeigt, wie es funktionieren könnte .

Hinweis: Der Code wurde nicht getestet - ich kenne Ihr Server-Setup usw. nicht - und habe ihn nur aus dem Kopf geschrieben. Sie müssen es testen, die richtige Position zum Zusammenführen der Argumente finden und Ihre URL usw. festlegen.

Der erste Test (Nr. 1) könnte verbessert werden, wenn das benutzerdefinierte Remote-Repository verwendbare Header zurücksendet (was nicht oft der Fall ist). In diesem Fall ist es besser, wp_remote_head() zu verwenden, da die HTTP-Anforderung dadurch weniger umfangreich wird.

<?php
defined( 'ABSPATH' ) OR exit;
/**
 * Plugin Name: (#78267) Custom Theme Update Args
 * Description: Adds custom arguments to the HTTP request for a theme or plugin update from a custom location.
 * Version:     2013-04-02.2139
 * Author:      Franz Josef Kaiser <[email protected]>
 * Author URI:  http://unserkaiser.com
 * License:     The MIT License (MIT)
 * LicenseURI:  http://www.opensource.org/licenses/mit-license.php
 */

add_filter( 'http_request_args', 'custom_upgrade_process', 9, 2 );
/**
 * Callback for a HTTP request used to switch the
 * SSL verification in case of a WP error response
 * and routing to a custom Theme or Plugin repository.
 * @param  array  $r   Request arguments
 * @param  string $url Request URL
 * @return array  $r
 */
function custom_upgrade_process( $r, $url )
{
    // Alter the following settings according to your
    // update procedure and admin pages that deliver it.
    # A) The admin URL
    $custom_repo = 'https://example.com?foo=bar';

    if (
        0 !== strpos( $url, 'http://api.wordpress.org/plugins/update-check' )
        XOR 0 !== strpos( $url, 'http://api.wordpress.org/themes/update-check' )
    )
        return $r;

    # 1) Do an initial test to check if things are working as expected
    $response = wp_remote_get(
        $custom_repo,
        array(
            'timeout'     => 120,
            'httpversion' => '1.1',
        )
    );
    # 2) Turn off SSL verification in case the HTTP request didn't work out
    if (
        is_wp_error( $response )
        AND strstr( $response->get_error_message(), 'SSL: certificate subject name' )
    )
        add_filter( 'https_ssl_verify', '__return_false' );

    # 3) Add your custom request arguments
    $r = array_merge( $r, array(
        'login' => get_option( 'login' ),
        'pass'  => get_option( 'pass' ),
    ) );

    return $r;
}

Viel Glück. :)

4
kaiser