Advanced Custom Fieldsを利用して写真をFBページにPOSTしたい
やりたいこと
上記を実現するにあたり、Advanced Custom Fieldsの設定と、
Facebookページのアクセストークンを取得しておく必要がある。
Advanced Custom Field側
- 画像用カスタムフィールドの設定
- 概要用カスタムフィールドの設定
カスタムフィールドを設定したら下記エリアに、
フィールドキーが表示されるのでメモしておいて下さい。
(表示オプションにチェックを入れないと表示されないです。)
参考:http://klutche.org/archives/1395/
FB側の作業
- アクセストークンの取得
参考:http://qiita.com/iwanomotoo/items/e4de999971fbf7231496
実装上のポイント
- WP更新のタイミングを識別してPOSTを実行する。
- WP更新時にAdvance Custom Fieldの入力値をPOSTから抽出する。
※Advance Custom Fieldの入力値をデータベースから取得する方法だと上手くいかなかったので、
今回はPOSTから抽出して実装しました。もっと調べたら他に方法があるのかも。。
以下をfunction.phpに記述。
/** Facebook Post API**/
/*
* 記事のステータスが変更された段階で、投稿処理を実行する
* */
add_action('transition_post_status', 'my_fb_function', 10, 3);
function my_fb_function($new_status, $old_status, $post){
/* Facebook API 初期化*/
if($post->post_type == 'post' && $new_status == 'publish' && ($old_status == 'draft' || $old_status == 'pending' || $old_status == 'auto-draft' || $old_status == 'private' || $old_status == 'future')){
/* production server */
$appId = 'アプリケーションID(App_ID)';
$secret = 'アプリのシークレットキー(SECRET_KEY)';
$id = 'FBページID(PAGE_ID)';
$access_token = 'アクセストークン(ACCESS_TOKEN)';
require_once 'src/facebook.php';
$facebook = new facebook(array('appId' => $appId, 'secret' => $secret));
$facebook->setfileuploadsupport(true);
/* 投稿用オブジェクト取得 */
$fb_image = $_POST['fields']['field_xxxxxxxxxxxxx'];//フィールドキーを入力
$fb_summary = $_POST['fields']['field_yyyyyyyyyyyyy'];//フィールドキーを入力
$fb_summary = strip_tags($fb_summary);
$fb_title = strip_tags($post->post_title);
/* 投稿処理 */
$message = 'タイトル:'.$fb_title.
'概要:'.$fb_summary.
'URL'. get_permalink($post->ID) ;
// 画像取得
$thumbnail = wp_get_attachment_image_src($fb_image, 'full');
$regex = '/^http(s)?:\/\/[^\/\s]+(.*)$/';
$url;
if ( preg_match( $regex, $thumbnail[0], $m ) ) {
$url = $m[2];
}
$file_name = $_SERVER['DOCUMENT_ROOT'] . $url;
$params = array(
'access_token' => $access_token,
'message' => $message,
'image' =>'@' . $file_name
);
// 投稿
$post = $facebook->api('/' . $id . '/photos/', 'post', $params);
}else{
return;
}
}
無理やり感が否めない。もっと上手く実装できるはず。