システム開発・構築の神様

新しいサービスや技術を使った開発や構築。その他不具合解決など

Wordpress Biz Calendarのウィジェットを直接表示するのと2ヶ月表示に対応させてみました

クライアント様から、Wordpress のサイドバーに営業日カレンダー(Biz Calendar)を表示させたいと言う要望をいただいたので、いつもどおりサクッとBiz Calendarプラグインを使う事にしました。

 

が・・・

 

どうやらサイドバーは独自のコーディングをしているので、ウィジェット部分だけを最小限で出力しないと、デザインの変更が大変らしい・・・

 

あと、カレンダーは2ヶ月分表示させたい・・・

 

簡単に引き受けたので、完全に意表を突かれるかたちになってしまいました。

 

サイドバーのテーマファイルから、Biz Calendarのウィジェットコードを出力する

 

<?php the_widget( 'bizcalendarwidget', $instance, $args ); ?>

 

2ヶ月分のカレンダーを表示させる

 

下記のサイト様のコードを参考にさせていただきました。

securavita.net

 

ただ、最新のBiz Calendarとでは、jsがクラス化に変更されているため、微妙に扱い方がことなりますが、ニュアンスはそっくりなので、新しい呼び出し方に一部変更することで問題無く対応することができました。

 

(PHPファイルとcssファイルはそのまま変更。jsだけを微調整で変更しました)

 

Biz Calendarは必要最低限の機能しかありませんが、シンプルなので重宝しています。

wordpressのwp_handle_upload関数を使ってローカルファイルをメディアへアップロードする

wordpressの管理画面を使わずに、自前で投稿処理ができると、フロントエンド開発が楽しくなってきます。

 

フロントエンドのajaxから、wordpressへのログイン認証、投稿のpostなどは比較的簡単に行えるのですが、メディア投稿に関してはちょっとだけ癖がありましたので、その時のメモです。

 

基本的には

 

wp_insert_attachment

wp_generate_attachment_metadata

wp_update_attachment_metadata

 

の関数を使えば、メディアへの登録は完了できますが、元となるファイルを指定する方法がちょっと戸惑いました。

 

メディアへ登録するファイルは、wordpressの現在のアップロード先に存在していないと駄目でした。

 

サーバー内(ローカルストレージ)の画像ファイルの場合、事前にwordpressのアップロードフォルダへ移動させていないといけません。

 

これを知らずに、画像がコピーできていない・・・っというトラブルに悩まされてしまいました。

 

で、事前にwordpressのアップロードフォルダへ移動させれば良い!っと単純なものでもありません。ユニークなファイル名で移動しておかなければならないので

 

自前でやる場合は

 

そのユニークなファイル名の確認やリネーム処理を自前で対応していないといけません。

 

面倒・・・

 

wp_handle_uploadを使えば、それらの処理をwordpress側に任せると分かりコードをプログラムするも・・・

 

エラーで動作しない・・・

 

どうやらwp_handle_uploadは、HTML Formからマルチパートで送信されてくるのを前提にしているようです。

 

wp_handle_uploadはローカルファイルの指定ができないのか?

 

そう思って諦めかけていたとき・・・解決方法を見つけました。

 

wp_handle_upload( $upload_file, array( 'test_form' => FALSE, 'action' => 'local' ) );

 

test_formをFALSEにして、actionを任意の文字列にすることで、フォームからの送信確認をスキップするようになります。

 

やったね。

 

これで、Ajaxからオリジナルのあらゆるタイプの投稿がガンガン行えるようになりました。

 

来年くらいからは、フロントエンドはHTMLで、バックエンドはWordpressで開発・構築するのが当たり前になるのだろうか?

 

余談

 

アイキャッチ画像の登録は

set_post_thumbnail( $post_id, $attach_id );

 

Advanced Custom Fieldsの画像(オブジェクト)へ登録は

update_field( 'img', $attach_id, $post_id );

 

で問題なく動作しました。