【WordPress】플러그인을 사용하지 않고 투고를 공개하는 타이밍에 자동으로 Facebook에도 투고한다
Twitter와 동시에 Facebook에도 게시 할 수 있으면 편리하네요 ^^
이전 게시물을 아직 읽지 않은 분은 먼저 그곳을 읽으십시오.
Facebook에 게시하는 것은 개인의 타임라인이 아니라 자신이 관리하는 Facebook 페이지에 게시한다고 가정합니다.
하고 싶은 일
Facebook SDK 설정
Facebook Developers 등록 및 Facebook에 앱(웹사이트) 등록은 이미 완료된 것으로서 이야기를 진행합니다.
SDK 다운로드
먼저 PHP 용 Facebook SDK을 다운로드하십시오.
※본고를 집필한 시점에서는 facebook-php-sdk-v4-5.0.0.zip이었습니다.
다운로드한 zip을 적당한 곳에 압축을 풀고 src/Facebook 디렉토리를 WordPress 프로젝트의 적당한 곳에 복사합니다. 덧붙여 저는 디렉토리 이름을 Facebook에서 facebook-php-sdk로 이름 바꾸고 있습니다.
그런 다음 functions.php에 다음과 같이 추가합니다.
functions.phpinclude('/path/to/facebook-php-sdk/autoload.php');
// 名前空間のエイリアス
use Facebook\Facebook;
use Facebook\Exceptions\FacebookSDKException;
API 키 얻기
Facebook Developers 및 앱 등록이 완료되면 다음과 같은 대시보드 화면에 도착할 수 있습니다.
이 화면에있는 앱 ID와 app secret는 나중에 사용하므로 메모합니다.
그런 다음 액세스 토큰을 생성합니다.
오른쪽 상단에 있는 도구 및 지원 을 클릭합니다.
Graph API Explorer를 클릭합니다. 아래와 같은 화면이 표시될까 생각합니다.
오른쪽 상단의 Graph API Explorer를 클릭하고 등록한 앱 이름을 선택합니다.
Get Token을 클릭하고 Get User Access Token을 선택합니다.
자신이 관리하는 Facebook 페이지에 게시하려면 다음 사용 권한을 선택합니다.
include('/path/to/facebook-php-sdk/autoload.php');
// 名前空間のエイリアス
use Facebook\Facebook;
use Facebook\Exceptions\FacebookSDKException;
덧붙여 자신이 관리하는 페이지에 투고하는 것만으로는, Facebook에 의한 리뷰는 필요 없습니다.
[참고] htps : //에서 ゔぇぺぺrs. 후세보오 k. 코 m / 드 cs / 후세 보오 k ㎉ 긴 / 페르 미시 온 s
액세스 토큰이 생성되지만 이 상태에서는 만료 시간이 1시간 정도밖에 없습니다. 그래서 기간 연장을 합니다. 이 글을 쓰는 시점에서 연장된 만료일은 2개월입니다.
액세스 토큰 옆의 'i' 표시를 클릭합니다.
팝업에서 Open in Access Token Tool을 클릭합니다.
Extend Access Token을 클릭합니다.
생성된 액세스 토큰을 기록합니다.
functions.php에 메모한 앱 ID, app secret, 액세스 토큰을 정의합니다.
functions.php
include('/path/to/facebook-php-sdk/autoload.php');
// 名前空間のエイリアス
use Facebook\Facebook;
use Facebook\Exceptions\FacebookSDKException;
// Facebook APIキー
define('FB_APP_ID', '*********************');
define('FB_APP_SECRET', '*********************');
define('FB_ACCESS_TOKEN', '*********************');
게시물 게시와 동시에 Facebook에 게시
투고가 공개된 타이밍을 훅하는 처리는 전회와 같으므로 설명은 생략합니다.
Facebook SDK를 사용하여 이미지와 텍스트를 게시합니다.
이번에도 이미지는 투고의 아이 캐치 이미지에 설정되어 있는 이미지를 이용합니다. 텍스트는 게시물의 제목과 본문의 시작 부분에 70자, 퍼머 링크입니다.
functions.phpfunction hook_transition_post_status($new_status, $old_status, $post) {
// 投稿のステータスが「新規追加」または「下書き保存」または「レビュー待ち」または「予約投稿」から
// 「公開」へ変わった時にFacebookに自動投稿する
if (($old_status == 'auto-draft'
|| $old_status == 'draft'
|| $old_status == 'pending'
|| $old_status == 'future')
&& $new_status == 'publish' && $post->post_type == 'post') {
// Facebook API
$fb = new Facebook(array(
'app_id' => FB_APP_ID,
'app_secret' => FB_APP_SECRET,
'default_graph_version' => 'v2.6' // ダッシュボード画面のAPIバージョンを指定しておく
));
// FBに投稿するテキスト
$message = '{{TITLE}}{{BR}}{{CONTENT}}{{BR}}{{URL}}'; // TODO: テンプレートを適当なところから取得
$message = str_replace('{{TITLE}}', $post->post_title, $message);
$message = str_replace('{{CONTENT}}', _excerpt(strip_tags($post->post_content), 70), $message); // HTMLタグを除去し冒頭70文字を抜粋
$message = str_replace('{{URL}}', get_permalink($post->ID), $message);
$message = str_replace('{{BR}}', "\n", $message);
try {
if (has_post_thumbnail($post->ID)) {
// アイキャッチ画像があるならば写真付きで投稿
$fb->post('/me/photos', array(
'message' => $message,
'source' => $fb->fileToUpload(_get_post_thumbnail_url($post->ID, 'large'))
), FB_ACCESS_TOKEN);
} else {
// アイキャッチ画像が無いならばリンクを投稿
$fb->post('/me/feed', array(
'message' => $message,
'link' => get_permalink($post->ID)
), FB_ACCESS_TOKEN);
}
} catch (FacebookSDKException $e) {
//echo $e->getMessage();
}
}
}
add_action('transition_post_status', 'hook_transition_post_status', 10, 3);
/**
* アイキャッチ画像のURLを取得します
*/
function _get_post_thumbnail_url($post_id, $size) {
$image_id = get_post_thumbnail_id($post_id);
$images = wp_get_attachment_image_src($image_id, $size);
$image_url = $images[0];
return $image_url;
}
/**
* 指定した文字列を先頭から指定した文字数分だけ抜粋した文字列を返します
*/
function _excerpt($text, $char_length = 40) {
$excerpt = $text;
if (mb_strlen($excerpt) > $char_length) {
return mb_substr($excerpt, 0, $char_length).'...';
} else {
return $excerpt;
}
}
이제 Facebook에 게시할 수 있습니다.
이전과 마찬가지로 테마 옵션이나 사용자 정의 필드에서 템플릿을 검색하면 더욱 유연하게 대응할 수 있습니다.
참고
facebook for developers: Facebook SDK for PHP Reference (v5)
facebook for developers: 사용 권한 참조
Reference
이 문제에 관하여(【WordPress】플러그인을 사용하지 않고 투고를 공개하는 타이밍에 자동으로 Facebook에도 투고한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hituziando/items/ca8f1323a5500be23568
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function hook_transition_post_status($new_status, $old_status, $post) {
// 投稿のステータスが「新規追加」または「下書き保存」または「レビュー待ち」または「予約投稿」から
// 「公開」へ変わった時にFacebookに自動投稿する
if (($old_status == 'auto-draft'
|| $old_status == 'draft'
|| $old_status == 'pending'
|| $old_status == 'future')
&& $new_status == 'publish' && $post->post_type == 'post') {
// Facebook API
$fb = new Facebook(array(
'app_id' => FB_APP_ID,
'app_secret' => FB_APP_SECRET,
'default_graph_version' => 'v2.6' // ダッシュボード画面のAPIバージョンを指定しておく
));
// FBに投稿するテキスト
$message = '{{TITLE}}{{BR}}{{CONTENT}}{{BR}}{{URL}}'; // TODO: テンプレートを適当なところから取得
$message = str_replace('{{TITLE}}', $post->post_title, $message);
$message = str_replace('{{CONTENT}}', _excerpt(strip_tags($post->post_content), 70), $message); // HTMLタグを除去し冒頭70文字を抜粋
$message = str_replace('{{URL}}', get_permalink($post->ID), $message);
$message = str_replace('{{BR}}', "\n", $message);
try {
if (has_post_thumbnail($post->ID)) {
// アイキャッチ画像があるならば写真付きで投稿
$fb->post('/me/photos', array(
'message' => $message,
'source' => $fb->fileToUpload(_get_post_thumbnail_url($post->ID, 'large'))
), FB_ACCESS_TOKEN);
} else {
// アイキャッチ画像が無いならばリンクを投稿
$fb->post('/me/feed', array(
'message' => $message,
'link' => get_permalink($post->ID)
), FB_ACCESS_TOKEN);
}
} catch (FacebookSDKException $e) {
//echo $e->getMessage();
}
}
}
add_action('transition_post_status', 'hook_transition_post_status', 10, 3);
/**
* アイキャッチ画像のURLを取得します
*/
function _get_post_thumbnail_url($post_id, $size) {
$image_id = get_post_thumbnail_id($post_id);
$images = wp_get_attachment_image_src($image_id, $size);
$image_url = $images[0];
return $image_url;
}
/**
* 指定した文字列を先頭から指定した文字数分だけ抜粋した文字列を返します
*/
function _excerpt($text, $char_length = 40) {
$excerpt = $text;
if (mb_strlen($excerpt) > $char_length) {
return mb_substr($excerpt, 0, $char_length).'...';
} else {
return $excerpt;
}
}
facebook for developers: Facebook SDK for PHP Reference (v5)
facebook for developers: 사용 권한 참조
Reference
이 문제에 관하여(【WordPress】플러그인을 사용하지 않고 투고를 공개하는 타이밍에 자동으로 Facebook에도 투고한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hituziando/items/ca8f1323a5500be23568텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)