1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Advanced Custom Fieldsを利用して写真をFBページにPOSTしたい

Last updated at Posted at 2014-09-16

Advanced Custom Fieldsを利用して写真をFBページにPOSTしたい

やりたいこと

以下のような投稿をAPI経由から行いたい。
__2014-09-16_14-51-36_2014-09-16_14-51-51.jpg

上記を実現するにあたり、Advanced Custom Fieldsの設定と、
Facebookページのアクセストークンを取得しておく必要がある。

Advanced Custom Field側

  • 画像用カスタムフィールドの設定
  • 概要用カスタムフィールドの設定

カスタムフィールドを設定したら下記エリアに、
フィールドキーが表示されるのでメモしておいて下さい。
(表示オプションにチェックを入れないと表示されないです。)

__Salon__WordPress_2014-09-16_14-54-26_2014-09-16_14-55-11.jpg

参考:http://klutche.org/archives/1395/

FB側の作業

実装上のポイント

  • 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;
  }
}

無理やり感が否めない。もっと上手く実装できるはず。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?