Contact Form 7とFlamingoを使って契約中の部屋に空きが出たら通知するプラグイン作ってみた

GitHubはコチラ → marushu/kktt_free_room_announce: Send mail at the timing when the room status changes from contracting or negotiating to free.

…まだ途中。。😅

タイトル通り。
倉庫のような限られたスペースで、「契約中」「商談中」「空きあり」の3つのステータスがあって、ステータスが「空きあり」になったらメールで通知する仕組み。

Contact Form 7Flamingoを使ってメールの登録や自動返信・データの保存などをやって、ステータスの変更をトリガーにメールを送る感じ。

Flamingoは今までお客さんのサイトで入れてはいたけど、そこからデータを取り出して使うってことはしてなかった。

flamingo_inbound投稿タイプ

Flamingoは受信メッセージというメニューがあるんだけど、これ、flamingo_inboundっていう投稿タイプ。

Contact Form 7でPOSTされてきた各データをflamingo_inbound投稿タイプ内にカスタムフィールドを作って格納してくれる。
例えば、[your-name]ってフィールドだったら、_field_your-nameといった感じ。

複数フォームがあっても、flamingo_inbound_channelタクソノミーで判別できる。

Contact Form 7は言うまでもなく凄いけど、

Flamingoももの凄い便利!!!!!!! あざまーーーーっす!!!

ということで、仕組みとしては、

  • 通知の欲しいメールアドレスと、部屋をフォームで選択
  • 送られてきたメールアドレスと部屋情報をFlamingoから参照
  • 部屋のステータスが空きに変わったら、そのメールアドレスへメール送信

通知の欲しい部屋の選択画面

各セルをクリックすると、hiddenフィールドに値(a-01など)を格納

管理画面

ここで契約中・商談中・空きありの3つのステータスを変更

空き待ち状況

空き待ちリスト。

ステータスが空きに変わったら待ちリストの該当メールアドレスへ通知

メール出通知。一度送ったらリストから削除する感じ 😀

といった感じ。
まだ調整は必要なんだけど、期待通りに動いたので一先ず 😀

Post Notifier プラグインの使い方 (IFTTTとの連携)

Throw to Twitter

Post Notifierを使ってFacebook Page, Twitterへアイキャッチ画像付きでシェアできるレシピを共有してみます。

プラグイン申請してみた。

IFTTTへ送る場合

Twitterへ投げる場合、wp_mailで添付するファイル(attachment このプラグインでは画像)はフルパスで、Facebookへ投げる時は絶対パスだったので、画像は一つだけど2パターン用意して出るようにしてます。

Facebook Page用

IFTTT Recipe: Throw to Facebook Page connects email to facebook-pages

Twitter用

IFTTT Recipe: Throw to Twitter connects email to twitter

Post Notifierでの設定

post_notifier_settings_panel

  • メールアドレスを設定

    送信先メールアドレスに、 “trigger@recipe.ifttt.com”を設定。
    カンマ区切りで複数追加可能なので、確認のために自分へ送ってみたり

  • 投稿タイプを選択

    デフォルトの投稿(post)、固定ページ(page)、カスタム投稿タイプがあればカスタム投稿タイプを選択できます。

  • 送信元メールアドレス

    admin_emailではなく、独自に設定します。IFTTTへ送る場合、IFTTTアカウントのメールアドレスを。
    ここは空欄の場合、admin_emailで送信されます。

上記レシピと管理画面の設定で投稿を公開と同時にIFTTTへメールを飛ばし、IFTTTから各SNSヘ投げることができます。予約投稿ももちろんOK 🙂
アイキャッチ画像があればアイキャッチ画像付きで飛びますよ。(ただしアイキャッチ画像は、デフォルト/wp-content/uploads/ 配下)に限られます。。
uploadsディレクトリ以外に変更されている方は画像飛ばないっす。。

これ修正できれば良いんですが…(^0^;)
アイキャッチ画像のフルパスの取得方法がいまいちなんですよね…。。

<?php
if ( has_post_thumbnail() ) {
  $post_thumbnail_id    = get_post_thumbnail_id( $post->ID );
  $post_thumbnail_datas = wp_get_attachment_image_src( $post_thumbnail_id, 'full' );
  $attachments[]        = esc_url( $post_thumbnail_datas[0] );
  
  /**
   * If use ifttt and throw twitter with attachent, must get full path of post thumbnail...
   */
  $upload_dir = wp_upload_dir();
  $basedir = $upload_dir['basedir'];
  $for_full_path = esc_url( $post_thumbnail_datas[0] );
  $for_full_path = explode( '/uploads', $for_full_path );
  $full_path = $basedir . $for_full_path[1];
  $attachments[] = $full_path;
} else {
  $attachments[] = '';
}

若干強引にフルパス作ってる感…(^0^;)

投稿本文も

実は投稿本文も送れるんですが、日本語の場合、WP Multibyte Patchが有効化されていると、Twitterでは本文(マルチバイト)が文字化けするので、今のところ外してあります。

WP Multibyte Patch | EastCoder;

デフォルトで標準的な設定値が割り当てられるようになっています。これらの設定値を変更する必要がある場合は、wpmp-config-sample-ja.phpwpmp-config.php に変名し内容を編集してから下記のように配置してください。(WP_CONTENT_DIR を変更している場合はその中に置いてください。)

WP Multibyte Patch | EastCoder;

↑↑ 上記wpmp-config.phpがあって、かつ、

$wpmp_conf['mail_mode'] = 'UTF-8';

となっていれば、文字化けは起きません。
プラグインからこの設定を変更する方法がわからない所っす。。…(^0^;)

※このプラグインは止める気は全く無いっす。ってか、このプラグインのおかげでファイル名など何も気にせず快適に使えてるんですもの :) 感謝っす!!

将来的には

とりあえず、記事を投げられるようにしたかったので申請しましたが、各記事毎にメールを投げる・投げない設定を追加したいです。
雑記など特にシェアしたくない場合もありますもんね (^0^;)
あとは、各記事毎にコメントを入れるとか。。Jetpackと同じっすね…。。

IFTTTを使ってFacebook, Twitterへ投げるだけじゃなくて、特定のメールアドレス(複数可)へ直接メールを送ることもできるので、メルマガっぽい使い方ができるようにしたいなぁとか、下書きのリンクを管理者へ送るとか、あれこれできそうだなぁと一人ワクワクしてるところですw

プラグイン公開しました。Post Notifier

WordPress › Post Notifier « WordPress Plugins

これは、投稿を公開した際、指定したメールアドレス宛てに投稿情報(タイトル、URL、アイキャッチ画像)を送信んするというシンプルなプラグインです。

…ヘッダ画像はまだだけど。。

インストールして有効化後、ダッシュボード > 設定 > Post Notifierと進むと、

スクリーンショット 2016-01-10 1.54.06

このような設定画面が、出てきます。

  • メールアドレスを設定
    送信先のメールアドレスをカンマ区切り
  • 投稿タイプを選択
    どの投稿タイプで使うか?(公開後メール送信したいか)
  • 送信元メールアドレス
    admin_email(設定 > 一般 > メールアドレス)以外を使用したい場合は入力

それぞれ設定保存すると、選択した投稿タイプの記事を公開したタイミングでメールを送信します。
アイキャッチ画像は添付ファイルとして送信されます。

良かったら使ってみてください〜 🙂

プラグイン申請してみた。

タイトル通り。

marushu/post-notifier

きっかけ

Jetpack by WordPress.comの共有でFacebookとTwitterへ投稿をシェアしてたんですけど、たまにコケたりFacebookには改行無しでだだーーっと本文載っかったりしてたので、IFTTTを使ってみたんです。

それと、複数サイトを同じWrodPress.com アカウントで管理してると、FacebookページやTwitterアカウントがなんとも辛くなってしまったりで、そこら辺も要因っす。

IFTTT(イフト)とは「レシピ」と呼ばれる個人作成もしくは公に共有しているプロフィールを使って数あるWebサービスFacebookEvernoteWeatherDropboxなど)同士で連携することができるWebサービスである。開発したのはリンデン・チベッツで[1]2010年にスタートした[2]

IFTTT – Wikipedia

FacebookやTwitterとの認証をIFTTTにやってもらう感じです。大変便利っす 🙂

IFTTTには既にWordPressと連携するレシピが沢山あったんだけど、例えば、

など。スゲー沢山。
どれも便利でいいんだけど、記事を公開した後、少し遅れちゃうんすよね…。。いや、せっかちなつもりはないんだけど、記事公開したら直ぐ出て欲しいじゃぁないっすか…(^0^;)

トリガーがメールだと即反応する 🙂

あれこれ試している内に、ifがメールだと、かなり反応が良いことがわかりまして、まぁ当然と言えば当然なんですが、トリガーをメールにして、記事を公開したと同時にIFTTTに記事情報をメールできれば、直ぐfFacebook, Twitterと連携できると思ったんです。

スクリーンショット 2016-01-08 2.22.26

メールだとほぼリアルタイムで反応してくれます。

後は必要な

  • 記事タイトル
  • アイキャッチ画像があればそれ
  • 記事URL

があればOK!!と言うことで作ってみました。
既にこのブログでやってるので無事に動いてます。

設定ページ作るの勉強になった

設定ページを作るのは初だったんですが、エラーメッセージとかいろいろ勉強になり楽しかったです。
そこら辺は忘れないようにまたメモ投稿したいと思います。

無事にパスしてくれることを祈りつつ 🙂

テストはまだっす

…とりあえず申請を先にと思って、テストはまだやってないっす。
待ってる間にテストしようかと (^^)

 

add_settings_error

今年一発目風邪引いた…( ꒪⌓꒪)

Function Reference/add settings error « WordPress Codex

ユーザーへ表示するために設定エラーを登録します。

この関数は Settings API の一部です。設定の検証で問題があったときや設定の不足など任意のメッセージを表示するのに使います。

入力値についてフィードバックを返すため、設定エラーは register_setting() で定義する $sanitize_callback 関数の中で追加します。

デフォルトでは、エラーが発生した入力の直後にメッセージを表示します。追加の settings_errors() 呼び出しを利用して、設定ページを初めてアクセスしたときにメッセージを表示することもできます。

とのこと。

register_setting() とは?

設定項目と無害化用コールバックを登録します。

これは Settings API の一部です。設定項目を登録し、出力を制御するわずかなコールバックを使って、wp-admin 設定ページを自動的に生成します。

この関数を使って、"media""general" のような WordPress のデフォルトの設定ページに設定項目を登録することもできます。(WordPress 4.1 以降、この関数は "permalink"ページへ追加された設定を保存しません。)設定項目を登録すると、add_settings_field() で既存のセクションへ追加したり、add_settings_section() で作った新規セクションへ追加したりできます。


<?php register_setting( $option_group, $option_name, $sanitize_callback ); ?>

パラメータ 説明
$setting (文字列)(必須)エラーを適用する設定項目のスラッグ名。
初期値:なし
$code (文字列)(必須)えらを特定するスラッグ名。HTML出力の’id’属性に含められる。$codeの文字列の前に’setting-error-’が付与され、このエラーを囲む一番外側の<div>の’id’属性に入る。
初期値:なし
$message (文字列)(必須)ユーザーへ表示するフォーマット済みメッセージ。スタイル付きの<div>と<p>で囲んで表示される
初期値:なし
$type (文字列)(オプション)メッセージの種類。$typeがそのまま、一番外側の<div>のクラスに追加される。複数のクラスを追加するにはスペースで区切る。

  • error
  • update

初期値:’error’

とのこと。なるほどー。

今年(2014年)最後のWordBench行ってきた

早いもので今年もあとわずか。
WordBenchも2014年最後になりました。

わぷーでWマーク
わぷーでWマーク 😀

前半は主にプラグインの紹介で、後半は参加者それぞれの今年のまとめを話した感じです (^^)

今日話題に上ったプラグイン

プラグインを使ってみた感想などは、どしどし作者の方へ連絡しよう!! も忘れずに 😀

などなど。他にもあったと思うんですが、メモ忘れっす…(*_*)

後半は今年1年のまとめ

15386246554_eddafcc1d2_k
それぞれの今年のまとめ?を共有 😀

後半の今年のまとめは、参加者の皆さん一人ずつ話していく方法でした。
Webの勉強を始めたばかりの方や、WordCampへ参加された方など、幅広く、来年一発目はハンズオンをやろう!! と言う話になって終わりました。

2015年一発目のWordBench鹿児島で網元起動隊ハンズオンやるぞ!!

ってことで、2015年1月のWordBench鹿児島で、僕は網元ハンズオンをやります。
来年の計画が立つのってワクワクしますね〜 😀

WORDCAMP KANSAI 2014行ってきた(コントリビューターデイ編)+プラグインも公開できたよ

WordCamp Kansai 2014行ってきた(前日〜初日編)に続いて2日目。

バッチリ寝たので元気に会場へ。
2日目はコントリビューターデイ

WordPressはオープンソースのCMSです。私たちはWordPressを利用するだけではなく、
よりよくするためにWordPressに関わり、参加していくことができます。

と言うことで、

  • フォーラムに回答しよう!
  • Codexを翻訳しよう!
  • プラグイン・テーマを翻訳しよう!
  • プラグイン・テーマを公式ディレクトリに登録しよう!
  • WordPressコアに貢献しよう!

の5つの中から自由に選んで参加して最終的に成果を発表しようという流れでした。

僕は、「プラグイン・テーマを公式ディレクトリに登録しよう!」に参加しました。
当初はプラグイン・テーマの翻訳をしようと思っていたのですが、最近自分で使い回していた簡単な関数があったので、それをプラグイン化してみよう?もしかしたらできるかもな?っと思っからです 😀

2日目のコントリビューターデイスタートの様子。ハッカソンっぽい雰囲気でした。
2日目のコントリビューターデイスタートの様子。ハッカソンっぽい雰囲気でした。

プラグイン公開テーブルには10〜12人ほど集まり、自己紹介+どんなプラグインを作るかの紹介からスタート。

百合子さんがモデレーターで、各自もくもくして作って行き、行き詰まったりしたら、質問するという形で進んでいきました。

16時から各自発表だったのですが、僕は結局間に合わず、残念な結果に終わりました。
しかし、不明点をその場で言えて、その場で意見をもらえたのはとても刺激的でした。

※ 結果、翌日帰りの飛行機に乗る直前でプラグインが期待通りに動き、鹿児島へ帰ってからプラグイン申請、登録、公開を果たすことができました。

小さなプログラムながら、立派に公式ディレクトリに載せることができた時はホント興奮しました 😀

WordPress › Anywhere List Shortcode « WordPress Plugins

↑↑コレです。いわゆる新着をトップページとかに載せたい場合、テンプレートに書かず、ビジュアルエディタにショートコード書いて出力させるって感じです。
ウィジェットにもテキストウィジェット内にショートコード書けば同じように出ます。

もし興味がありましたら、使ってみてください。
あと、ご意見などもよろしければ (^^)

こっからが大事!!

今回初プラグインを公開することができてやっと理解できたのですが、普段便利に使っているプラグインには作っている方がいて、日々バグ修正やメンテナンスに自分の時間を使っているんだなと!!

わお!WordPress 3.8がもうすぐ出ちゃうので、プラグイン開発者の立場でお願い! | firegoby

僕は上記の宮内さんの記事を読んでWP Total Hacksのチェックをしてみてバグを見つけました。また

Compatibility
Compatibilityでお使いのWordPressのバージョンで動いたよ〜っと連絡

や、

Ratings
評価っすね。イケてる!! とか、ここが不満とか、いろんな意見を投稿できちゃう (^^)

などの評価など某かの連絡がプラグイン作者へ届くと、猛烈に嬉しいです!! 僕なんていきなりレビューいただけてスゲー嬉しかったです。ありがとうございます!!

当たり前のように使っているプラグインですが、今後はもっと感謝を込めてRatingしたり、Compatibilityの連絡をして行こうと思いました。

今まで思い出したらRatingとかCompatibilityの連絡とかやっていましたが、普段使っているプラグインはやっていこうと思いました。今からでも遅くない!! 感謝を込めてやっていきます!! 😀

こうして2日間があっという間に過ぎた

WordCamp Kansai 2014は2Daysだったにも関わらず、あっという間に終わりました。
両日共に充実した、中身の濃い体験をさせていただきました。

実行委員長の額賀さんはじめ、スタッフの皆様、本当にお疲れ様でした!! 2日目の懇親会もサイコーに楽しかったです (^^)。

WordBench鹿児島も最近できていないので、早く開催したいです。先日の翻訳祭りのリベンジもあるし、なにしろ、WordPressな話題でワイワイやりたいです 😀

GitHubでForkしてPull Requestsする時(した後)の注意点:追記あり

Delete this repositoryダイアログ

Deleting a repository · GitHub Helpより

Pull Request後にMergeとかCloseしたら即自分のとこに持ってきたRepositoryは削除しなくてもいいんですね…

GitHubでForkして編集してPull Requestした後、Mergeされたとします。その場合は、迷わず自分のForkしてきたRepositoryは破棄した方がいいです。追記参照

というのも、Mergeされた後、本家で何か修正があった場合、自分のRepositoryではその変更が適用されていない場合があるからです。

Repositoryの削除方法

  • 自分のGitHubアカウント内のForkしてきたRepositoryへ移動

    該当のRepositoryからSettingsをクリック
    Settingsへ移動。
  • SettingsメニューからDanger Zone内のDelete this repositoryをクリック

    Delete this Repositoryボタンをクリック
    クリックしただけでは削除されないので安心してクリック (^^)
  • Delete this repositoryをクリックすると以下のようなボックスが出てくる。

    Delete this repositoryダイアログ
    Are you ABSOLUTELY sure?ダイアログが出てくるので、Repository名を入力
  • Repository名を入力すると、「I understand the consequences, delete this repository」ボタンがアクティブになるので、クリック
  • Repository削除完了!! 🙂

以上でRepositoryが削除されました。

忘れないようにメモ

実際つい先ほどそういった事態になってしまいました。やっていたのは宮内さんが作成されているWP Total Hacksプラグインの修正です。一度やった後だったので、安心して自分のRepositoryからcloneして編集したものをPull Requestしたのです。

すると、速攻で「It is close because conflicts.」のメールが届きました…(^0^;)
僕が送ったPull RequestをMergeした後に、本家で更新があったのに、僕が古いままのデータで新たに編集したものを送りつけたためでした。。ゴメンナサイ!!!

僕は昨年幸運なことに、宮内さんが作成されている、WP Total HacksのContributorsに加えさせていただきました。更にAuthorsにまで!!
WordPressが3.8にメジャーアップデートされる前に宮内さんがわお!WordPress 3.8がもうすぐ出ちゃうので、プラグイン開発者の立場でお願い! と言う記事で呼びかけをされていた時に、僕も挑戦してみたのがきっかけです (^^)

僕がやったのは、WP Total Hacksが有効かされている時に読み込まれるCSSの修正でした。たった2行ほどの修正だったのですが、その際にGitHubでのForkやPull Request方法など一気に教わりました。ホント感謝です!!

3.8対応にばかり気を取られて、古いバージョンでレイアウト崩れが出た

プラグインの修正ができてすっかり気をよくしていると、フォーラムで質問が。。僕がやった所だったので、当然僕が対応です。

改めてプラグイン作者さまの苦労というか、作業の多さを垣間見ました。偉大っす!! プラグインもWordPressもOSSも!!

その後(追記)

宮内さんに、Forkする際の好ましいやり方が載ったエントリーを教えていただきました!!

Githubでfork元の更新をMergeする – より
Forkした後、

本流の変更をpull

する。
なーるほど!! これならPull Request送りつけて迷惑かけることが減るかも知れないっす 🙂
かも知れないと書いたのは、そもそもコード自体に間違いが無いことが前提だなぁと思ったからです…(^0^;)

これも忘れないようメモ 🙂

WordPress Jetpack から僕にも届いたよ (^^)

嬉しいっすね (^^)

昨日のお昼頃、@WebDesignRecipe さんがつぶやいていたのですが、
https://twitter.com/#!/WebDesignRecipe/status/158774201921179649
おおおぉ!! いいなぁ ( ´ ▽ ` )ノ 。僕も入れてるんだけどなぁっと思いながらもWordPress.comアカウントはあるけど、.comの方でBlogは書いてないしなぁとか思いつつ今日のエントリーを書き終えたとき気づきました。

ブラウザウィンドウのキャプチャ画像
なんと!!! これはクリックせざるを得ない (^^)

管理画面にいつもと違うものがあったのでクリックして見ると…

“WordPress Jetpack から僕にも届いたよ (^^)”の続きを読む