なんか、昔に死ぬほどやったけど忘れてしまった…自分でAPIのメソッドを作ったりしたんだけどな。
そもそも時代も変わったので生のPHPのXMLRPCとか触りたくないのでライブラリを使う。よさげなのがあった。
とりあえずパッケージインストール
composer.pharは使えるとして…
./composer.phar init ./composer.phar require hieu-le/wordpress-xmlrpc-client ./composer.phar require monolog/monolog
使い方
APIドキュメントがあったんだけど、これがもう全然正しくなくて…ってかこれ、ソースのコメントから作ってるんだろうけど引数が全然違うしね。
http://letrunghieu.github.io/wordpress-xmlrpc-client/api/index.html
ということで、ソースコードとWordPressのAPIレファレンス見て頑張った。
https://codex.wordpress.org/XML-RPC_WordPress_API
で、import.phpとかで
<?php require_once 'vendor/autoload.php'; $endpoint = 'http://your-wordpress-site/xmlrpc.php'; $username = 'your_name'; $password = 'your_password'; $client = new \HieuLe\WordpressXmlrpcClient\WordpressClient(); $client->setCredentials($endpoint, $username, $password); $wpLog = new Monolog\Logger('wp-xmlrpc'); $client->onError(function($error, $event) use ($wpLog){ $wpLog->error($error, $event); });
ここまでは共通
新しい投稿
<?php $client->newPost('新しいタイトル ', "内容をここに書く", array( 'post_type' => 'post', 'post_status' => 'publish', 'terms_names' => array( 'category' => array('お知らせ','カテゴリー2'), ), 'post_status' => 'private', 'post_author' => 1, 'post_date' => date('c', time() - 86400 * 8), // 'comment_status' => 'closed', 'ping_status' => 'closed', ));
こんな感じ。
カテゴリーの設定が難しかったけど、WordPressのclass-wp-xmlrpc-server.phpを覗いて理解した。
'terms_names' => array( 'category' => array('お知らせ','カテゴリ―2'), 'post_tag' => array('タグ1', 'タグ2'), 'post_format' => // WordPressのpost_format使ったことないのでよくわからない。 ),
という感じ。IDを使いたかったら、terms_namesの代わりにtermsで。
うーん、これは楽だ。
画像のアップロード
よーし、画像のアップロードも…
<?php $upfile = '/home/itoh/photos/1270.jpg'; $client->uploadFile('写真.jpg', mime_content_type($upfile), file_get_contents($upfile), true, 80 );
最初、ファイル名に拡張子の.jpgを付けずに「写真」とだけしてたらアップロードできずになんでだーとなってた。
と、なんか、上書きできないなーって思ったら…
https://codex.wordpress.org/XML-RPC_WordPress_API/Media#wp.uploadFile
bool overwrite: Optional. Has no effect (see 17604).
ん~~と、リンク先チケットを見ると…私の4年前の書き込みが…直ってないのか…使われないんだろうな…
しかし、これキャプションを付けられないものかな…
…とそこで気付いた。WordPressは写真も1つのPOSTとして保存しているのである。
post_content => 説明の欄 post_excerpt => キャプションの欄 _wp_attachment_image_alt => ALTテキスト
となっている。
ちなみにパーマリンクになる日付は、所属している投稿の時刻である。意味付けとしてはこれを写真の時刻とすればいい。