勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

XML-RPCライブラリを利用してWordPressを外部サーバから投稿する方法

   2024/03/04  WordPress

WordPressをダッシュボードからではなく、外部サーバのプログラムから投稿したかった。調べてみると「XML-RPC」というライブラリでいけるみたい。以下にダウンロード先と使い方と処理をまとめた関数をメモ。

 

ダウンロード先

http://scripts.incutio.com/xmlrpc/

 

関数

//----------------------------------------
//    WordPress外部投稿
//
//    **引数**
//    $domain(string)    投稿したいWordPressを置いているサーバのドメイン
//    $user(string)        WordPressのユーザー
//    $pass(string        WordPressのパスワード
//    $author(int)        投稿者のID
//    $title(string)        投稿タイトル
//    $contents(string)    投稿本文
//    $status(string)    投稿状態。デフォルトは下書き。publishだと公開
//    $category(int)    投稿カテゴリ。デフォルトは未分類
//    $tag(array)        投稿タグ。デフォは何もなし
//    $img(string)        アイキャッチ画像。[./img/test.jpg]のようにディレクトリ形式で指定。デフォは何もなし
//
//    **返り値**
//    bool(true or false)
//----------------------------------------
function postWordPress( $domain, $user, $pass, $author = 1, $title, $contents, $status = 'draft', $category = 1, $tag = array(), $img = '' )
{
    //必須引数のチェック
    if( !$domain || !$user || !$pass || !$title || !$contents ){
        return false;
    }

    //ライブラリの読み込み
    include_once('./IXR_Library.php');
    $client = new IXR_Client($domain . 'xmlrpc.php');

    //画像が指定されている場合はチェックとアップロード
    if( $img && file_exists($img) ){
        $imgInfo = getimagesize($img);
        $type = $imgInfo['mime'];
        $bits = new IXR_Base64(file_get_contents($img));

        $imgData = $client->query(
            'wp.uploadFile',
            1,
            $user,
            $pass,
            array(
                'name' => 'test.jpg',
                'type' => $type,
                'bits' => $bits,
                'overwrite' => false
            )
        );
        $imgResult = $client->getResponse();
    }

    $postData = array(
        'post_author' => $author,
        'post_status' => $status,
        'post_title' => $title,
        'post_content' => $contents,
        'terms' => array('category' => array($category)),
        'terms_names' => array('post_tag' => $tag)
    );

    if( $imgResult ){
        $postData['post_thumbnail'] = $imgResult['id'];
    }

    $return = ( $result = $client->query('wp.newPost', 1, $user, $pass, $postData) ) ? true : false;
    return $return;
}

 

使い方

上記関数を書いたファイルと同じディレクトリにXML-RPCの「IXR_Library.php」をアップロードしておく。あとは引数を設定。例としては以下のような感じ。

$test = postWordPress(
    'http://hogehoge.com/',
    'sampleuser',
    'samplepass',
    1,
    'ここにタイトル',
    'ここに本文',
    'publish',
    1,
    array('タグ1','タグ2'),
    './img/test.jpg'
);

var_dump($test);    //true or false

返り値はbool。

注意点として$domainの部分はxmlrpc.phpを置いてあるディレクトリを指定しないといけない。wp-config.phpとか置いてあるところ。

http://hoge.com/wordpress/xmlrpc.phpという構成になっている場合、サイトの表示は「http://hoge.com」だけど、今回指定するのは「http://hoge.com/wordpress/」になるので注意。

 - WordPress

  関連記事

WordPressで複数あるクリック広告をランダムで表示させる方法

同じクリック広告をずっと貼っているとクリック単価が下がると聞いた。WordPre ...

他所のサーバからWordPressの記事情報をpostIDを指定して取得する方法

他所のサーバからWPの記事IDを指定した上で、当該IDのタイトル・アイキャッチ画 ...

WordPressでテーマファイル内で共通の変数を設定及び使用する方法

WordPressでテーマ内の共通変数を設定し使用したかった。例えば記事一覧ペー ...

WordPressで翌日以降に編集した記事のみ最終更新日を表示する方法

WordPressで翌日以降に編集した記事のみ最終更新日を表示させたい。逆に言う ...

WordPressにてPHPのAPCuを使用して高速化を図る方法

先日本サイトのサーバにAPCuを導入した。しかしながら所感にも書いたとおりAPC ...