複数のブログサービスを使っていると、「こちらのブログで投稿するやつ、別のサービスにも自動で投稿できるようにしたい」ということありますよね。
今回は、WordPressとはてなブログの連携を行ったときのメモです。
- 今回目指すのは、WordPressからはてなブログへの連携
- 有名なIFTTTを使うか、WordPressのPHPをいじるか
- はてなブログのメール投稿用メールアドレスを確認する
- WordPressからはてなブログに連携するコードはこちら
- ステータスを変更したい場合(下書き→公開のときにはてなに投稿 など)
- はてなブログのメール投稿で文字化けしてしまう人は
今回目指すのは、WordPressからはてなブログへの連携
今回つくるものはこちら↓
WordPressで記事を書き、特定のステータス変更(今回はレビュー待ちから非公開)をしたときに、はてなブログに同じ記事が投稿される。
- 別のステータス(下書き→公開、公開→非公開 など)でも可能です。
- はてなブログに「下書き」状態で投稿することも可能です。
有名なIFTTTを使うか、WordPressのPHPをいじるか
WordPressとはてなブログの連携というと、一番有名なのはIFTTTではないでしょうか。
ifttt.com
「このサービスからこのサービスへ」とブラウザ上で選択するだけで、連携が完了できます。プログラミングも不要なので、エンジニア以外の方にもおすすめ。
でも、このIFTTTの連携、WordPressのFeedを利用しているため、WordPress上で「公開」となっているブログ記事しかはてなブログに連携できません。
WordPressで公開以外のステータスを使いたい場合は、WordPressの関数に直接手を加えたほうが良いです。
というわけで、今回はWordPressのfunctions.phpに直接書き加えていきます。
*2017/2/3追記*
後日、より便利なAtomPubの存在を知ったため、そちらに作り変えました。
www.wegirls.tech
画像を複数枚/指定した位置にいれたい、カテゴリをつけたい、という方は、メール投稿だと無理なので、↑のサンプルコードを見つつAtomPub使ってみてください。
はてなブログのメール投稿用メールアドレスを確認する
はてなブログの管理画面にログインし、「設定」タブの「詳細設定」を開きます。
「メール投稿」のメールアドレスを確認します。
自動投稿でいきなり公開になっても大丈夫であれば、「投稿メールアドレス」、
はてなブログ側は下書き状態でセットしておきたければ、「下書き投稿メールアドレス」を使います。
WordPressからはてなブログに連携するコードはこちら
編集するファイルは、WordPressのテーマ配下にあるfunctions.php 。
~/wp-content/themes/twentysixteen/functions.php
末尾に、下記のfunctionを書き加えます。
$to = 'hoge@hogehoge.com'; の中身は、先ほど確認した投稿用メールアドレスに変更してください。
// WP投稿時にはてなブログに投稿(WP側は非公開) function send_hatena($post_id) { $post = get_post($post_id); // HTMLメールで送信する $headers = array( 'Content-Type: text/html; charset=UTF-8' ); $to = 'hoge@hogehoge.com'; $subject = $post->post_title; // WordPressとはてなブログは見出しのタグが違うので、変換する $search = array('<h7','/h7><br />','<h6','/h6><br />','<h5','/h5><br />','<h4','/h4><br />','<h3','/h3><br />','<h2','/h2><br />','<h1','/h1><br />','/p><br />'); $replace = array('<h9','/h9>','<h8','/h8>','<h7','/h7>','<h6','/h6>','<h5','/h5>','<h4','/h4>','<h3','/h3>','/p>'); // 改行が反映されないので、nl2br処理をする $body = str_replace($search,$replace,nl2br($post->post_content)); wp_mail( $to, $subject, $body, $headers ); remove_filter( 'wp_mail_content_type', 'text/html' ); return; } // 承認待ち(レビュー待ち)から非公開になるときにはてなに送信 add_action( 'pending_to_private', 'send_hatena', 1 ,6);
ステータスを変更したい場合(下書き→公開のときにはてなに投稿 など)
一番したのコードadd_action( 'pending_to_private', 'send_hatena', 1 ,6);
の、pending_to_private
を変更すると、別のステータスのときにはてなブログに投稿できます。
WordPressで下書きから公開にしたときにはてなに投稿
一番したのコードadd_action( 'pending_to_private', 'send_hatena', 1 ,6);
を、下記に置き換えます。
add_action( 'draft_to_publish', 'send_hatena', 1 ,6);
WordPressで公開から非公開にしたときにはてなに投稿
一番したのコードadd_action( 'pending_to_private', 'send_hatena', 1 ,6);
を、下記に置き換えます。
add_action( 'publish_to_private', 'send_hatena', 1 ,6);
そのほか、{ステータス}_to_{ステータス}
のかわりに、直前のステータスが関係のないpublish_post
(記事を公開するとき)なども利用できます。
いろいろ柔軟に変更できるので、ステータスや引数については下記公式リファレンスをどうぞ。
投稿ステータスの遷移 - WordPress Codex 日本語版
はてなブログのメール投稿で文字化けしてしまう人は
最初、メール投稿で文字化けしてしまったときのことを書きました。
www.wegirls.tech
WordPressの場合、$headers = array( 'Content-Type: text/html; charset=UTF-8' );
のようにUTF-8で指定すれば大丈夫です。