前回からもう少し変更を加えて、グーグルカレンダーに名前、人数だけでなくemailや電話番号、問い合わせ詳細がある場合はそのデータもカレンダーに反映させます。
前回の記事はこちら
まずは登録データを受信するときに記載される内容を変更します。
プラグインのBookingsからSettings→Notificationsの【Admin Notification Email】の部分を下記の通りに変更しました。
そして予約システムのスプレッドシートでメールを読み込んで…
機能のカレンダー登録をクリック!!
無事登録されたかどうか確認します。
対外的には予定ありにしてますが、きちんと14日の20時に登録されてます。
アカウントにログインしてるとこんな感じで詳細が確認できます。
前回のやり方だと追加情報を加えた時に反映されないので、プラグインに追加情報を記載して当該情報の位置情報を取得します。
それに合わせて該当情報を抜き出します。
これで詳細情報や電話番号がなかったとしてもエラーなく正確な情報を取得できます。
for(var i=2; i< =activeSheet.getLastRow(); i++){ var currentValue = activeSheet.getRange('A'+i).getValue(); currentValue = currentValue.replace(/(^\s+)|(\s+$)/g, ""); currentValue = currentValue.replace(/[\n\r]/g,""); currentValue = currentValue.replace(/amp;/g,""); activeSheet.getRange('A'+i).setValue(currentValue); var string = activeSheet.getRange("A" + i).getValue(); var last = string.length; var name = string.indexOf("名前:") var people = string.indexOf("人数:") var data = string.indexOf("予約日:") var mail = string.indexOf("メール:") var tel = string.indexOf("電話番号:") var message = string.indexOf("メッセージ:") var pending = string.indexOf("View pending bookings") var confirm = string.indexOf("Confirm this booking") var reject = string.indexOf("Reject this booking") var length1 = string.slice(data+4,mail-4);//start activeSheet.getRange(i,2).setValue(length1); var length2 = string.slice(people+3,data-4);//people activeSheet.getRange(i,4).setValue(length2); var length3 = string.slice(name+3,people-4);//conpany activeSheet.getRange(i,5).setValue(length3); var length6 = string.slice(mail+4,tel-4);//mail activeSheet.getRange(i,7).setValue(length6); var length7 = string.slice(tel+5,message-4);//tel activeSheet.getRange(i,8).setValue(length7); var length8 = string.slice(message+6,pending-105);//message activeSheet.getRange(i,9).setValue(length8); var length9 = string.slice(pending+38,confirm-18); activeSheet.getRange(i,10).setValue(length9); var length10 = string.slice(confirm+37,reject-18); activeSheet.getRange(i,11).setValue(length10); activeSheet.getRange(i,3).setFormula("=B"+i+"+time(0,60,0)") } }
createEventで追加した詳細情報をカレンダーに追加します。
改行させるのに多少手こずりました。
function makeCalEvent(){
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var row = sheet.getLastRow();
var cal = CalendarApp.getDefaultCalendar();
for(var i=2; i< =row; i++){ if(sheet.getRange(i,6).getValue() == ""){ sheet.getRange(i, 6).setValue("Confirmed"); var cname = sheet.getRange(i,5).getValue(); var d1 = sheet.getRange(i,2).getValue(); var d2 = sheet.getRange(i,3).getValue(); var d3 = sheet.getRange(i,4).getValue(); var d4 = sheet.getRange(i,7).getValue(); var d5 = sheet.getRange(i,8).getValue(); var d6 = sheet.getRange(i,9).getValue(); cal.createEvent(cname, d1, d2, {description: '人数:'+d3+'人\n' +'メール:'+d4 + String.fromCharCode(10) +'電話番号:'+d5 + String.fromCharCode(10) +'メッセージ:'+d6, location: '足立区新田3−36−21'}); } } }
これで無事googleカレンダーで予定を一元管理することが出来ました。
ニュースピックスにコメントを投稿すると、ワードプレスの投稿ページにタイトルと自分のコメントを挿入してくれます。
ここのページを参考にしました。
この人はカスタム投稿タイプを作成してそっちにさせてますが、私は通常の投稿タイプにしました。
newsをpostに変更するだけです。
アイキャッチ画像の設定はうまく行かなかったのでここだけは手動で行ってます。
私はPHPはよくわからないのでどうカスタマイズすればどう動くかよくわからなかったので、修正しては確かめてを繰り返しました。
問題は、この設定だと更新した時や通常の投稿をした時にもトリガーが実行されてしまいます。
そこで回避させるためコンテンツに、英語でニュースピックスという文字列が含まれている場合は、トリガーを実行しないようにさせました。
// update
$wpdb->query(“UPDATE wp_posts SET post_title = ‘$new_title’ WHERE id = $id “);
$wpdb->query(“UPDATE wp_posts SET post_content = REPLACE (post_content, ‘$url’ , ‘$link’) “);
$wpdb->query(“UPDATE wp_posts SET post_thumbnail = ‘$image’ WHERE id = $id “);
// 不要な部分の削除
$post = $wpdb->get_results(“SELECT post_content FROM wp_posts WHERE id = $id”);
$content = $post[0]->post_content;
$new_content = explode( ‘ / ‘, $content);
$tmp = explode( ‘<a’, $new_content[1]);
$new_content[0] .= ‘<br><a class=”button” href=”‘.$url.'” target=”blank”>Read</a>’.$tmp[1];
$new_content = str_replace(“#NewsPicks”, “” , $new_content[0]);
$wpdb->query(“UPDATE wp_posts SET post_content = ‘$new_content’ WHERE id = $id “);
}
}
赤字の部分を追加しました。
これだと記事にニュースピックスと英語で記載してしまうと、その記事にも投稿時トリガーが実行されるので、本当はタイトルとコメントが同じ場合にトリガーを実行させたかったのですが……うまく出来ませんでした。
一応思ったとおりの処理は実行出来ているので素人にしては上手くいった方かと思います。
……と思いましたが、これだとタイトルを読み込んでしまうのか。。。
一応こんな感じになりました。
インターフェースもかなり変更しました。
アイキャッチ画像とタイトルと本文の位置関係
記事一覧と記事本文のアイキャッチ画像のサイズ変更などなど
ブログをやっている人の大半が無料ブログサービスだと思います。
無料ですし、敷居が低い。
しかし、その分広告などが設置されていたり、自由にカスタマイズが出来ないのが難点です。
まずは独自ドメインを取得しましょう。
自分の名前でもなんでもいいです。
将来有名になりそうなドメインを取得して売却なんて選択肢もあります。
ドメインを取得したらレンタルサーバーを借りましょう。
ブログ以外必要なと言うのであればワードプレス専用のサーバーがお勧めです。
例えば、WordPress専用高速サーバー GMO WP Cloudとか。
1年くらいブログを書き続けると、adsenseからの報酬でレンタルサーバー代をまかなえることは可能だと思います。
HTMLやCSSの知識が全くなくても問題ないです。
レンタルサーバーのマニュアル通りに進めていけば簡単に自分独自のブログを作ることが出来ます。
テンプレートも豊富にあるし、プラグインで大体のことは実現できます。
ワードプレスでブログを作成するのは、オリジナリティがあって、自由にカスタマイズできて、広告も制限ないので、FC2とかアメブロよりもお勧めです。
ワードプレスのサイトをスマホの画面に最適化するプラグインが色々あります。
【ワードプレス】【スマホ】と検索したらWordPressのスマートフォンサイト自動生成プラグイン6選+おまけがトップに表示されたのでこのページを参考に設置してみます。
一応すべて設置してみて使用感やUIを試してみましたが、一番にお勧めしているだけあって「WPtouch Mobile Plugin」が一番よかったです。
インストール方法
しかしこのプラグインは無料版と有料版があって、当然ながら無料版は一部機能が制限されてます。
adsenseの設置は、theme-settings > Advertising のところで設定するのですが、画像の通りIDの入力項目が【PRO】となっており無料版では設定できません。
そこで、プラグインのPHPファイルを直接書き換えてadsenseを表示させてみます。
/wp-content/plugins/wptouch/themes/bauhaus/defaultの中にあるsingle.phpファイルを編集します。
< ?php wptouch_the_content(); ?>の真上にアドセンスコード記載
➡記事の上部に広告が表示されます。
</div> <!– content –>の真上にアドセンスコードを記載
➡記事の下部に広告が表示されます。
こんな感じです。
[dropdown_box expand_text=”Information” show_more=”More” show_less=”Less” start=”hide”]
<?php get_header(); ?> <!-- <div class="crumb-path bauhaus"> <p> <a href="<?php wptouch_bloginfo( 'url' ); ?>"><?php wptouch_bloginfo( 'site_title' ); ?></a> <i class="icon-angle-right"></i> <span><?php wptouch_the_title(); ?></span> </p> </div> --> <div id="content"> <?php while ( wptouch_have_posts() ) { ?> <?php wptouch_the_post(); ?> <div class="<?php wptouch_post_classes(); ?>"> <div class="post-page-head-area bauhaus"> <span class="post-date-comments"> <?php if ( bauhaus_should_show_date() ) { ?> <?php wptouch_the_time(); ?> <?php } ?> <?php if ( bauhaus_should_show_comment_bubbles() ) { ?> <?php if ( bauhaus_should_show_date() && comments_open() ) echo '↔'; ?> <?php if ( comments_open() ) comments_number( __( 'no comments', 'wptouch-pro' ), __( '1 comment', 'wptouch-pro' ), __( '% comments', 'wptouch-pro' ) ); ?> <?php } ?> </span> <h2 class="post-title heading-font"><?php wptouch_the_title(); ?></h2> <?php if ( bauhaus_should_show_author() ) { ?> <span class="post-author"><?php the_author(); ?></span> <?php } ?> </div> <div class="post-page-content"> <?php if ( bauhaus_should_show_thumbnail() && wptouch_has_post_thumbnail() ) { ?> <div class="post-page-thumbnail"> <?php the_post_thumbnail('large', array( 'class' => 'post-thumbnail wp-post-image' ) ); ?> </div> <?php } ?> 【adsenseの広告コード】 <?php wptouch_the_content(); ?> <?php if ( bauhaus_should_show_taxonomy() ) { ?> <?php if ( wptouch_has_categories() || wptouch_has_tags() ) { ?> <div class="cat-tags"> <?php if ( wptouch_has_categories() ) { ?> <?php _e( 'Categories', 'wptouch-pro' ); ?>: <?php wptouch_the_categories(); ?><br /> <?php } ?> <?php if ( wptouch_has_tags() ) { ?> <?php _e( 'Tags', 'wptouch-pro' ); ?>: <?php wptouch_the_tags(); ?> <?php } ?> </div> <?php } ?> <?php if ( wptouch_has_tags() ) { ?> <?php } ?> <?php } ?> </div> </div> <?php } ?> 【adsenseの広告コード】 </div> <!-- content --> <?php get_template_part( 'nav-bar' ); ?> <?php get_template_part( 'related-posts' ); ?> <?php if ( comments_open() ) { ?> <div id="comments"> <?php comments_template(); ?> </div> <?php } ?> <?php get_footer(); ?>
[/dropdown_box]