女子WEBエンジニアのTechメモ

都内の某企業でマーケッターやってます。営業→WEBエンジニア・オフショア開発チーム駐在→マーケッター(SEO)ちょっと便利だなと思ったことをメモしています。

WordPressの記事をはてなブログに自動で連携【メール投稿を使う】

複数のブログサービスを使っていると、「こちらのブログで投稿するやつ、別のサービスにも自動で投稿できるようにしたい」ということありますよね。

今回は、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使ってみてください。

はてなブログのメール投稿用メールアドレスを確認する

はてなブログの管理画面にログインし、「設定」タブの「詳細設定」を開きます。

「メール投稿」のメールアドレスを確認します。
f:id:bombomprin:20161228174747p:plain

自動投稿でいきなり公開になっても大丈夫であれば、「投稿メールアドレス」、
はてなブログ側は下書き状態でセットしておきたければ、「下書き投稿メールアドレス」を使います。


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で指定すれば大丈夫です。

ほったらかしでも月10万円!  ミニサイトをつくって儲ける法
ほったらかしでも月10万円! ミニサイトをつくって儲ける法

プラス月5万円で暮らしを楽にする超かんたんアフィリエイト
プラス月5万円で暮らしを楽にする超かんたんアフィリエイト