Wordpress xmlprc 无法在 https 中工作

Wordpress xmlprc not working in https

最近,我使用 SSL 更新了我的网站,所有 URI 现在都是 "https://"。

我的站点是使用 Symfony 2 开发的,并在 Symfony 2 web/wordpress 目录中混合了 Wordpress 安装。

所有常规访问都可以。只有一个问题:

在我的 Symfony 2 中,有这样的代码片段:

private function getRecentPosts($num = 4)
{
    require_once 'wordpress/wp-includes/class-IXR.php';

    $user      = '11111';
    $pwd       = '22222';

    $host='https://www.rsywx.net';
    $script='/wordpress/xmlrpc.php';
    $port=443;

    $client = new \IXR_Client($host, $script, $port);

    $params = array(0, $user, $pwd, $num);
    $client->query('metaWeblog.getRecentPosts', $params);

    $wp = $client->getResponse();

    return $wp;
}

当我的网站没有用 https 包裹时,上面的代码可以正常工作。但是现在在https下,上面的代码就不行了。如果我在 query 函数调用后转储 $client 变量,它会给出如下错误:

+error: IXR_Error {#256 ▼
    +code: -32300
    +message: "transport error - could not open socket"

有什么提示吗?我需要调整我的 WP 吗?

我只是完全避免使用 XMLRPC 来解决这个问题。

在我的 Symfony 2 应用程序中,我只使用了第二个数据库来直接访问底层的 wordpress 数据库。这是一个黑客,但它暂时解决了我的问题。

问题出在文件 wp-includes/class-IXR.php 上,它不适用于 HTTPS,您还必须使用 class-wp-http-ixr-client.php 。并且不要忘记包含配置文件 wp-load.php.

代码段将是:

private function getRecentPosts($num = 4) 
{
    include 'wordpress/wp-load.php';
    require_once ABSPATH . WPINC . 'wordpress/wp-includes/class-IXR.php';
    require_once ABSPATH . WPINC . 'wordpress/wp-includes/class-wp-http-ixr-client.php';


    $user      = '11111';
    $pwd       = '22222';

    //Deprecated
    /*
    $host='https://www.rsywx.net';
    $script='/wordpress/xmlrpc.php';
    $port=443;
    $client = new \IXR_Client($host, $script, $port);
    */
    $client = new WP_HTTP_IXR_CLIENT('https://www.rsywx.net/wordpress/xmlrpc.php');

    $params = array(0, $user, $pwd, $num);
    $client->query('metaWeblog.getRecentPosts', $params);

    $wp = $client->getResponse();

    return $wp;
}