Hook into WordPress update?

时间:2012-12-07 作者:Paul

我想知道是否有任何方法可以连接到WordPress更新过程并发送$_POST 要更新服务器的变量?

我正在从私有服务器上提供插件/主题更新,并将其与以下内容挂钩:

add_filter(\'pre_set_site_transient_update_themes\', \'check_for_update\');

这很好用。新版本的主题/插件显示在“Dashboard”>“update”下,我可以更新。但问题是,我希望用户只有在提供了正确的登录/密码(首先通过add_option()). 理想情况下,除非客户端发送$_POST 具有要更新的登录名/密码。php(更新服务器上的文件,将返回plugin.ZIP)。

我在找这样的东西:

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 和更新。php应该只允许在登录名与此处定义的登录名匹配的情况下进行下载/更新(update.php是更新服务器上的文件,它将带有较新插件的ZIP包发送到WordPress)。

我希望这很清楚:)

1 个回复
最合适的回答,由SO网友:kaiser 整理而成

&更新;内部WP HTTP API是my answer to this question, 也可以作为一个插件could 工作

注意:代码没有经过测试-我不知道您的服务器设置等-只是我脑子里写出来的。您必须对其进行测试,找到合并参数的正确位置,并设置URL等。

如果自定义远程存储库发回可用的头(这种情况并不常见),那么初始测试(#1)可以得到改进。所以如果是这样,你最好使用wp_remote_head() 相反,它使HTTP请求更加轻量级。

<?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;
}
祝你好运。:)

结束

相关推荐

Updates for a private plugin?

如果我写一个私有插件,有没有办法使用WordPress自动更新机制来更新它 我想封装这个功能,但它是我自己的5个博客特有的,所以它不是公共插件资源的好候选。但我喜欢这种简单的更新机制 有没有办法做到这一点