前回に引き続き、イシュー「ドット絵のデータをWordPress に保存したい #15」への対応。
ドット絵エディタとWordPressのデータのやり取りは、専用のAPIを介して行うことにした。
※WordPressのREST APIを使えば、ドット絵エディタ側から直接データのやり取りができそうだが、
セキュリティ面が心配だったので、REST APIは使わないことにした。
今回はそのAPI作り。PHPで書いた。
なお、APIのソースを公開してしまうと、実際に動作しているサイトのセキュリティが不安になるので非公開。
データ連携のイメージ

つまづきポイント
WordPressの関数を外部から扱う準備
WordPresswp-load.phpを読み込むことで、WordPressの関数を扱う事が可能。
読み込み方法は以下。
<?php
require_once('~/wp-load.php' );
?>
※パスはディレクトリ構造に合わせて適宜書き換える
参考:wordpress関数を外から使うにはwp_load.phpを読み込む | Unskilled?
WordPressへのログイン判定
新規投稿や上書き保存など、WordPress内のデータを書き換える場合には、
WordPressへログインしていることを前提としたい。
ログインの判定は関数「is_user_logged_in」で行う。
以下は記述例。
<?php
if ( is_user_logged_in() ) {
echo 'ログイン済み';
} else {
echo 'ログインしていない';
}
?>
WordPressへの投稿
以下は記述例。
<?php
$args = array(
'post_author' =>1, //ユーザーID
'post_type' => 'pixcelart', //投稿タイプ
'post_status' => 'draft', //公開(publish)か下書き(draft)か設定
'post_title' => $title, //タイトル
);
$result_id = wp_insert_post($args); //新規投稿
if($result_id != 0){
update_post_meta($result_id, 'dot_json', $json );//カスタムフィールド「dot_json」に$jsonの値を保存
}
?>
投稿は「wp_insert_post」で行うが、カスタムフィールドの内容までは送れない。
そのため、最初に通常の投稿を行い、
その際に受け取った投稿IDを元に、
関数「update_post_meta」でカスタムフィールドのデータを追加する。
WordPressへの上書き保存
以下は記述例。
<?php
$args = array(
'ID' => $post_id,
'post_title' => $post_title
);
$result_id = wp_update_post($args);//記事に内容を更新
if($result_id != 0){
update_post_meta($result_id, 'dot_json', $json );//カスタムフィールド「dot_json」に$jsonの値を保存
}
?>
通常の投稿内容の更新は関数「wp_update_post」で行うが、カスタムフィールドの内容までは送れない。
カスタムフィールドに関する処理は、
投稿のときと同じで
関数「update_post_meta」でデータを後から追加する。
WordPressからのデータ取り出し
以下は記述例。
<?php
$args = array(
'posts_per_page' => -1, // 表示する投稿数を全件表示にする
'post_type' => array('pixcelart'), // 取得する投稿タイプのスラッグ
'post_status' => 'publish', //公開(publish)か下書き(draft)を選択
'orderby' => 'post_title', //タイトルで並び替え
'order' => 'ASC' // 昇順
);
$posts = get_posts($args); //投稿データ取得
foreach ($posts as $post){
$post_id = $post->ID; //投稿ID
$post_title = $post->post_title; //タイトル
$post_dot_json = $post->dot_json; //ドット絵のJSONデータ
}
?>
上記は一覧のデータを取得する際の例。
投稿や上書き保存とは違い、取り出す場合はカスタムフィールドの値も同時に取り出せる。
ひとこと
wp-load.phpを読み込みさえすれば、あとは何でもあり。
