WordPressの投稿画面以外からPHPを実行で投稿する方法
WordPressでは通常、管理画面にログインしてから新規投稿から投稿をするのですが。これ以外にも Windows Live Writer といったブログエディタと呼ばれるツールを使って投稿する方法や、最新の WordPress では標準装備となった REST API を使った投稿という方法がありますが
もうひとつ方法があって、同一サーバー内ならWordpressの一部ファイルをPHPで読み込んでやれば、Wordpressの投稿するための関数をそのまま使うことができるので、Wordpressの投稿画面以外からもWordpressの投稿を行うことが出来ます。
実行するPHPファイルをウェブディレクトリ以外に設置すればセキュアでもありますし、サーバーのcronと組み合わせば定期的に実行することも可能になります。
例えば、Twitter API と組み合わせて1日につぶやいた内容をまとめて自動でWordpressの記事として投稿したり いろいろな API と組み合わせて投稿を自動化とかもできるようになります。
WordPressで投稿画面以外から投稿する
まずはググっていろいろな情報を調べたのですが、Wordpressの構造が現在のものと古いものとで変わっていますので最初そこで躓いてしまいました、現最新のWordpressでの方法での話となります。
WordPressの1つのファイルを読み込む(インクルード)
WordPressの1つのファイルをインクルードするだけで、Wordpressの関数が使えるようになりWordpressの全データにアクセスすることも可能になります、今回は投稿について書いていますがWordpressのループ処理とか使えるので、記事の取得とかカスタムフィールドとかメディアとか呼び出して使うこともできるので、Wordpressのテーマ構造を利用せずにサイトの構築も可能であったりもします。
読み込む1つのファイルは
wp-load.php
これを読み込むことによって、Wordpressの機能に利用できるようになります。
実に簡単ですね、ただ躓いてしまいましたのは 旧バージョンのWordpressでは wp-blog-header.php を読み込んで同様のことをするようで、この古い情報に引っ張られて ??? ってちょっとなりました。
現在は wp-load.php に変わっています。
投稿は wp_insert_post() 関数を使って投稿する
投稿は
$post_id = wp_insert_post($my_post,$wp_errer);
この関数を使って投稿を行います、この関数に第一引数に投稿内容を入れます、第二引数には失敗したときに WP_Error を返す設定をします。デフォルトでは flase となっています、$wp_errer にすると設定から読み込んで設定できます。
また wp_insert_post の返り値に投稿した投稿IDが帰ってきますので変数に収めると、そのあとに投稿の確認用の表示や再編集とか使いの情報を入れたりするときに連続して利用することができる。
第一引数に入れる最小構成(投稿内容)
$my_post = array( 'post_title' => 'My post', 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array(1) );
配列でキーに合わせて内容を入れます。使えるキーは決まっており WordPressのcodexに詳細が載っています、カテゴリ(post_category)は1つの場合でも 値には配列で指定する必要があります。
関数リファレンス/wp insert post – WordPress codex
これまでをまとめると
include_once("C:/xampp/htdocs/wp/blog/wp-load.php"); $my_post = array( 'post_title' => 'My post', 'post_content' => 'This is my post.', 'post_status' => 'publish', 'post_author' => 1, 'post_category' => array(1) ); $post_id = wp_insert_post( $my_post, $wp_error ); echo $post_id;
このPHPファイルを実行すると、投稿をひとつ行うことが出来ます、インクルードする wp-load.php はフルパスで指定します、XAMPPを使ってローカルサーバーを立てている場合は上の例の様なパスになります(ローカルサーバーで開発等をしているので上記のようなパスです)。
実行後は投稿した 投稿ID のみが表示されます。
あとは、これをSNSのAPIと組み合わせたり 投稿画面を独自に作ったり、またはプラグインでサンプル記事を一気に作るようなことにも使えたりしますね。
かけだし
こんにちは、参考になる記事をありがとうございます。
質問があります。
>実行するPHPファイルをウェブディレクトリ以外に設置すればセキュアでもありますし
のウェブディレクトリ以外とはローカルにPHPファイルを置くのでしょうか?それともサーバー上の特定の場所に置くのでしょうか?
管理人
>かけだしさん
それは、サーバー上のwebに公開しているディレクトリ外という意味になります。