2015年3月3日火曜日

PHPからWordPressに記事を投稿する

PHPファイルを実行してWordPressに記事を投稿する方法について。

wp-load.phpでWordPress関数を呼び出し
→投稿オブジェクトを作成
→wp_insert_postで投稿
という流れになります。

指定できる投稿オブジェクトは以下の通り。
$post = array(
  'ID' => [ <投稿 ID> ] // 既存の投稿を更新する場合。
  'menu_order' => [ <順序値> ] // 追加する投稿が固定ページの場合、ページの並び順を番号で指定できます。
  'comment_status' => [ 'closed' | 'open' ] // 'closed' はコメントを閉じます。
  'ping_status' => [ 'closed' | 'open' ] // 'closed' はピンバック/トラックバックをオフにします。
  'pinged' => [ ? ] // ピンバック済。
  'post_author' => [  ] // 作成者のユーザー ID。
  'post_category' => [ array(<カテゴリー ID>, <...>) ] // カテゴリーを追加。
  'post_content' => [ <投稿の本文> ] // 投稿の全文。
  'post_date' => [ Y-m-d H:i:s ] // 投稿の作成日時。
  'post_date_gmt' => [ Y-m-d H:i:s ] // 投稿の作成日時(GMT)。
  'post_excerpt' => [ <抜粋> ] // 投稿の抜粋。
  'post_name' => [ <スラッグ名> ] // 投稿スラッグ。
  'post_parent' => [ <投稿 ID> ] // 親投稿の ID。
  'post_password' => [ <投稿パスワード> ] // 投稿の閲覧時にパスワードが必要になります。
  'post_status' => [ 'draft' | 'publish' | 'pending'| 'future' ] // 公開ステータス。 
  'post_title' => [ <タイトル> ] // 投稿のタイトル。
  'post_type' => [ 'post' | 'page' ] // 投稿タイプ名。
  'tags_input' => [ '<タグ>, <タグ>, <...>' ] // 投稿タグ。
); 

http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_insert_post

というわけでサンプルを作成します。
# vi php-post-test.php
ini_set('display_errors', true);

function find_wordpress_base_path(){
    $dir = dirname(__FILE__);
    do {
        if( file_exists( $dir."/wp-config.php" ) ){
            return $dir;
        }
    } while( $dir = realpath("$dir/..") );
    return null;
}

define( 'BASE_PATH', find_wordpress_base_path()."/" );
require_once( BASE_PATH.'wp-load.php');

$post_value = array(
    'post_title' => 'テストタイトル',
    'post_content' => 'テスト本文',
    'post_status' => 'publish'
);

wp_insert_post($post_value);

echo("post complate \n");

で実行
# php php-post.php
ログインできませんでした
なんかでましたorz
前回、サイトにBasic認証をかけていたのが問題のようで、とりあえずBasic認証を外して実行するとうまくいきました。







さらに投稿記事にサムネイル画像(アイキャッチ画像)を紐付けたいとします。
流れ的には ①画像のアップロード
→②メディアライブラリに画像を再生成
→③記事にアイキャッチ画像を添付
となります。

//①画像のアップロード
$sImageUrl = 画像のパス;
$sFileName = basename($sImageUrl);
$sFileType = wp_check_filetype($sFileName, null);

//画像保存ディレクトリに画像情報を保存する
$sUploadDir = wp_upload_dir();
$sData = file_get_contents($sImageUrl);
$sUploadImageName = $sUploadDir['path'] . "/" . $sFileName;
$fpc = file_put_contents( $sUploadImageName, $sData );

if( $fpc ){

    //②画像を保存できたらメディアライブラリで再生成する
    $hAttachment = array(
        'post_mime_type' => $sFileType['type'],
        'post_title' => sanitize_file_name($sFileName),
        'post_content' => '',
        'post_status' => 'inherit',
    );

    if( wp_mkdir_p($upload_dir['path']) ){
        $file = $sUploadDir['path'] . '/' . $sFileName;
    }else{
        $file = $sUploadDir['basedir'] . '/' . $sFileName;
    }
    //アイキャッチ画像を記事に紐付ける
    $nAttachId = wp_insert_attachment( $hAttachment, $file, $nInsertId );
    require_once( ABSPATH . 'wp-admin/includes/image.php');

    //画像添付ファイルのメタデータを作成する
    $hAttachData = wp_generate_attachment_metadata( $nAttachId, $file );

    //画像ファイルを再作成する
    wp_update_attachment_metadata( $nAttachId, $hAttachData );

    //③サムネイル生成
    set_post_thumbnail( $nInsertId, $nAttachId );

    echo( "POST COMPLATE \n" );
    }else{
        echo( "POST FAILED \n" );
    }
}else{
    echo( "UPLOAD FILE FAILED \n"  );
}

これを実行すると




























記事に紐づきました。
以上です。

0 件のコメント:

コメントを投稿