0

Curl と PHP を使用して Wordpress XML-RPC 関数を使用し、Wordpress ブログに直接投稿するこの便利な小さなスクリプトを見つけました。ほとんどの情報をどこに入力すればよいかがわかったと思いますが、2 つの値がわかりません (これまでのところ、Google でいくら検索してもわかりません)。

以下に、他の人が使用する可能性のあるスクリプト全体を置きます - http://blog.artooro.com/2012/09/03/wordpress-api-xml-rpc-new-easy-to-use-php-class/によって提供されます

私が把握できない2つの値は、「ch」と「execute」です。これが Curl の値なのか PHP の値なのか不明です。

class WordPress {
private $username;
private $password;
private $endpoint;
private $blogid;

private $ch;

public function __construct($username, $password, $endpoint, $blogid = 1) {
    $this->myusername = $username;
    $this->mypassword = $password;
    $this->my-site.com/xmlrpc.php = $endpoint;
    $this->1 = $blogid;


    $this->ch = curl_init($this->my-site.com/xmlrpc.php);
    curl_setopt($this->ch, CURLOPT_HEADER, false);
    curl_setopt($this->ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
}

private function execute($request) {
    curl_setopt($this->ch, CURLOPT_POSTFIELDS, $request);
    $response = curl_exec($this->ch);
    $result = xmlrpc_decode($response);
    if (is_array($result) && xmlrpc_is_fault($result)) {
        throw new Exception($result['faultString'], $result['faultCode']);
    }
    else {
        return $result;
    }
}

public function publish_post($title, $content, array $tags, array $categories, $status = 'publish', $date = Null) {
    // Set datetime for post
    if ($date == Null) {
        $post_date = date("Ymd\TH:i:s", time());
    }
    else {
        $post_date = $date;
    }
    xmlrpc_set_type($post_date, 'datetime');

    $params = array(
        $this->id,
        $this->myusername,
        $this->mypassword,
        array(
            'post_type' => 'post',
            'post_status' => $status,
            'post_title' => $title,
            'post_content' => $content,
            'post_date' => $post_date,
            'terms_names' => array('category' => $categories, 'post_tag' => $tags)
        )
    );

    $request = xmlrpc_encode_request('wp.newPost', $params);

    $response = $this->execute($request);
    return $response;
}

}

4

1 に答える 1

1

$this->ch= Curl ハンドル。curl リクエスト ハンドルを保持するプロパティです。クラス外では使用されないため、非公開です。

$this->execute()= curl リクエストを実行して結果を返すクラス メソッドです。クラス外では使用されないため、非公開です。

どちらもクラスの一部であり、PHP 内部の一部ではありません。

また:

提供されたコードにはいくつかの問題があります。

  • $this->my-site.com/xmlrpc.php = $endpoint;する必要があります $this->endpoint = $endpoint;
  • $this->1 = $blogid;する必要があります$this->blogid = $blogid;

publish_post()さらに、メソッド内のそれらのプロパティへの参照を変更します。

固定コード:

<?php 
/*Usage:*/
$wordpress = new WordPress($username, $password, 'my-site.com/xmlrpc.php', 1);
$wordpress->publish_post(...);


class WordPress {
    private $username;
    private $password;
    private $endpoint;
    private $blogid;
    private $ch;

    public function __construct($username, $password, $endpoint, $blogid = 1) {
        $this->myusername = $username;
        $this->mypassword = $password;
        $this->endpoint   = $endpoint;
        $this->blogid     = $blogid;

        $this->ch = curl_init($this->endpoint);
        curl_setopt($this->ch, CURLOPT_HEADER, false);
        curl_setopt($this->ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
    }

    private function execute($request) {
        curl_setopt($this->ch, CURLOPT_POSTFIELDS, $request);
        $response = curl_exec($this->ch);
        $result   = xmlrpc_decode($response);
        if (is_array($result) && xmlrpc_is_fault($result)) {
            throw new Exception($result['faultString'], $result['faultCode']);
        }
        else {
            return $result;
        }
    }

    public function publish_post($title, $content, array $tags, array $categories, $status = 'publish', $date = Null) {
        // Set datetime for post
        if ($date == Null) {
            $post_date = date("Ymd\TH:i:s", time());
        }
        else {
            $post_date = $date;
        }
        xmlrpc_set_type($post_date, 'datetime');

        $params = array(
            $this->blogid,
            $this->myusername,
            $this->mypassword,
            array(
                'post_type' => 'post',
                'post_status' => $status,
                'post_title' => $title,
                'post_content' => $content,
                'post_date' => $post_date,
                'terms_names' => array('category' => $categories, 'post_tag' => $tags)
            )
        );

        $request = xmlrpc_encode_request('wp.newPost', $params);

        $response = $this->execute($request);
        return $response;
    }

}
?>

それが役に立てば幸い

于 2013-10-29T14:46:14.590 に答える