勉強したことのメモ

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でスケジュール実行される日時を調べる方法

WordPressであるシステムを実装し、その際に毎日1回スケジュール実行(WP ...

wp_mail関数でエンベロープFrom(Return-Path)が指定できない場合の対応方法

WordPress内に設置されたお問い合わせのフォームようなシステムでエンベロー ...

WordPressのテーマファイル内で取得したオブジェクトを指定のフィールド名でソートする方法

WordPressのテーマファイル内で記事やカテゴリ一覧等を取得するとオブジェク ...

WordPressでカスタムフィールドとCSVファイル投稿する方法

WordPressでカスタムフィールド設定している環境に、CSVファイルアップロ ...

WordPressのWP-Mail-SMTPプラグインが動かない

PHPのバージョンを下げてからWordPressで外部メールサーバが使えるWP- ...