web-dev-qa-db-ja.com

WordPressのアップデートに夢中?

WordPressのアップデートプロセスにアクセスして$_POST変数をアップデートサーバーに送信する方法がありますか。

私はプライベートサーバーからプラグイン/テーマの更新を配信しています、そしてこれにフックします。

add_filter('pre_set_site_transient_update_themes', 'check_for_update');

これはうまくいきます。新しいバージョンのテーマ/プラグインが[ダッシュボード]> [アップデート]の下に表示され、アップデートできます。しかし問題は、ユーザーが正しいログイン名/パスワードを入力した場合にのみダウンロード/更新できるようにすることです(最初はadd_option()から)。理想的には、クライアントがupdate.php(代わりにplugin.Zipを送信するアップデートサーバー上のファイル)にlogin/passwordを指定して$_POSTを送信しない限り、直接リンクは機能しないはずです。

私はこのようなものを探しています:

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

そしてWordPressはテーマ/プラグインを更新している間、$_POST['login']$_POST['pass']http://example.com/update.php とupdate.phpにのみ送るべきですログインがそこで定義されたものと一致する場合、ダウンロード/更新を許可します(update.phpはWordPressに新しいプラグインを含むZipパッケージを送信する更新サーバー上のファイルです)。

私はそれが明確であることを願っています:)

6
Paul

内部のWP HTTP APIを更新します

この質問に対する私の答え を少し修正したものですが、 - - がどのように動作するかを示すプラグインとしてもあります。

注:コードはテストされていません - 私はあなたのサーバーの設定などを知りません - そして私の頭から書き出されただけです。あなたはそれをテストし、引数をマージするための適切な位置を見つけ、あなたのURLなどを設定しなければならないでしょう。

カスタムリモートリポジトリが使用可能なヘッダを送り返す場合(最初のテスト(#1))は改善されるかもしれません(これはしばしばそうではありません)。もしそうなら、HTTPリクエストをより軽量にするので、代わりに wp_remote_head() を使用するほうが得策です。

<?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;
}

がんばろう。 :)

4
kaiser