投稿

月: 2020年4月

【EC-CUBE3】クーポンプラグインとヤマト決済プラグイン併用によるエラーの解決方法

EC-CUBE3系にて、クーポンプラグインと、クロネコヤマト決済プラグインを併用した際に起こるバグの解決方法です。
運用中の通販サイトでクーポンを導入したのですが、お客様からの指摘でクレカ決済画面に行こうとするとエラーになることが判明。
ログを確認すると「AuthenticationCredentialsNotFoundException」?なんじゃそりゃ!?
さすがに焦って祈る思いで検索すると、解決方法を載せてくれている方がいました。
が、、、
 

解決方法が掲載されていたが、実は未解決だった。

ECオープンプラットフォーム「EC-CUBE」開発コミュニティに質問している方がいて、
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=22681&forum=16
↓別の方が修正方法を掲載してくれているのですが、
https://github.com/EC-CUBE/coupon-plugin/pull/117
この修正方法を適用すると、会員時のエラーは解決しました。
ですが実は、非会員の状態で試すとエラーが出てしまうのです。
それは、前出の質問者の方も指摘しているのですが、未回答のままで終わっているので解決してなかったのです。
 

非会員でもAuthenticationCredentialsNotFoundExceptionの解決方法

ということで、仕方ないので解決方法を探りまして何とか解決できましたのでご紹介します。
解決方法は、最初に貼り付けたURLのなかの質問者と回答者のやりとりがヒントになりました。
要するに「$app->isGranted()」を使用しないようにすればよいのではないかと。
もう少し詳しく言うと、「$app->isGranted()」を使用している箇所をtry catch文にして「AuthenticationCredentialsNotFoundException」が発生したら、セッションから会員情報を取得するように切り替える。ということをやればよいのではないかと考えました。
「$app->isGranted()」が使われているのは3ファイル合計4箇所でした。
以下の3つのファイルに修正を入れて行きます。
 

修正の前に
※修正の前には必ずバックアップを取ってくださいね。
※動作を保証するものではありませんので、修正は自己責任で行ってください。
 

1. Event.phpの修正

まずは、掲載どおり「Event.php」の修正を行います。

Event.phpファイルの場所

app/Plugin/Coupon/Event/Event.php
※パスはEC-CUBE3のインストールフォルダからのパス
 

Event.phpの修正差分

わかりにくいかもしれませんが、ファイルを掲載すると長くなってしまうので修正差分だけ載せます。ごめんなさい。

 

2. CouponController.phpの修正

次に「$app->isGranted()」を使っている「CouponController.php」の修正を行います。

CouponController.phpファイルの場所

app/Plugin/Coupon/Controller/CouponController.php
※パスはEC-CUBE3のインストールフォルダからのパス
 

CouponController.phpの修正差分

これも修正差分だけ載せます。ごめんなさい。

 

3. CouponService.phpの修正

最後にこれも「$app->isGranted()」を使っている「CouponService.php」の修正を行います。

CouponService.phpファイルの場所

app/Plugin/Coupon/Service/CouponService.php
※パスはEC-CUBE3のインストールフォルダからのパス
 

CouponService.phpの修正差分

これも修正差分だけです。
このファイルでは2箇所「isGranted」を使用しているので、2箇所修正が入ります。

 

EC-CUBEのバージョンなど

EC-CUBE:3.0.18
クーポンプラグイン:2.0.1
クロネコヤマト カード・後払い一体型決済モジュール:1.1.4
 

最後に

上記のコード修正後、非会員の状態でも会員の状態でもカード決済で購入までできました。
カード以外の代引き、銀行振込でも問題なく購入できました。
コード的にはあまりイケてない気がしますが、まあ良しとします。
今のところ紹介したコードによる不具合は出ていないですが、致命的なバグをはらんでいる可能性もありますので、修正は自己責任でお願いいたします。
不具合が出たら追記します。

テレビ会議がうまくいかない・つながらない原因とトラブル対策

ネットワーク環境

テレビ会議のトラブルで意外に多いのが回線トラブルではないでしょうか。
テレビ会議において、ネットワーク環境はとても重要です。回線が遅いと中継ができずに一向に会議が進みません。
最近もある仕事の打ち合わせでテレビ会議を行って、半分以上の時間を接続に費やしたあげく、最終的にテレビ会議をあきらめて、携帯電話をスピーカーに切り替えてテーブルの真中に置いて会議をやったということがありました。
当たり前ですが、インターネット回線は光回線が望ましいです。
あと、ネットワーク関連で意外に重要なのがルーターの性能です。
有線LANならまだしも、無線LANで行う場合は業務用の無線LANルーターが望ましいです。

チェックポイント
・インターネット回線:光回線を推奨
・ルーター:業務用ルーターを推奨
 

マイクスピーカー

マイクスピーカーのトラブルもテレビ会議で多いトラブルのひとつではないでしょうか。
・声が聞こえない(相手の声は聞こえるが、こちらの声が届いてないなど)
・ハウリング、エコー
ハウリングやエコーの原因は、「スピーカーから出た音をマイクで拾って、またスピーカーから出してマイクで拾って」というループで起こるので、マイクとスピーカーが分離していればそれらの距離を離せばよいのですが、マイクスピーカーはそうも行きません。
マイクスピーカーは、マイクとスピーカーが一体になっていますので、構造的にハウリングやエコーが起こりやすいのではないでしょうか。
ですから、安いからといって訳のわからないメーカーのものを買うと痛い目にあいます。
マイクスピーカーを買うならYAMAHA(ヤマハ)製がおすすめです。少し高いと感じるかもしれませんが信頼性は抜群です。
会議の規模によってさまざまな機種がありますので、用途に応じて選択してください。

チェックポイント
・マイクスピーカーの性能
おすすめはYAMAHA(ヤマハ)製
 

パソコンの性能

パソコンの性能に関しては、導入するテレビ会議のシステムによって推奨環境というものが提示されていると思いますので、具体的には書きません。
でも単純に考えると、映像+音声の入出力を行うわけですから動画を視聴するのがつらいパソコンではダメだということはわかりますね。
ネットワークを絡めて考えると、YouTubeの高画質動画を視聴しつつ、他のソフトでの作業も快適にできる程度のパソコンの性能は必要だと思います。
 

【WordPress】Warning: urlencode() expects parameter 1 to be string, array givenの解決方法

WordPressでURLのgetパラメータに配列を使って処理する機能を追加したら以下の警告が出ました。
意図した動作はするのですが、気持ち悪いのでこの警告を消したいと思って調べましたが、解決方法があまり見つからなかったので書いておきます。
 

警告が出る原因

この警告の原因は、文字列を前提にしているところに配列が渡してしまっているからです。

 

解決方法

以下のコードをfunctions.phpに貼り付ければOKです。
パラメータが配列だったら文字列に変換しています。

 

参考URL

https://stackoverflow.com/questions/54407997/wordpress-warning-urlencode-expects-parameter-1-to-be-string-array-given-i
 

Contact Form 7で確認画面・完了画面・サンクスメール付きお問い合わせフォーム作成手順

企業様のホームページ案件ではほぼお問い合わせフォームを付けることになりますが、毎回どうだったけ?と思い出しながらやってしまうので、お決まりの手順を書いておきます。

Contact Form 7を使ったお問い合わせフォームに確認画面、完了画面、サンクスメールを付けていきます。

他にも、データベースにためてcsv出力とか、条件分岐でフォームを出し分けるとかありますが、とりあえず基本形を。

CSSはサイトによって変わってくるでしょうから、省きます。

Contact Form 7の説明と言うより、やることリストみたいな感じなのでContact Form 7を使い慣れていない方には少し不親切な内容かもしれませんので、ご注意ください。

記事作成当時のWordPressのバージョンは5.4

※Contact Form 7 add confirmは現在更新が止まっていて、Contact Form 7の5.4以降では動作しなくなっているようですので、対処方法を記事の最下部に追加していますので、参考までに。

 

お問い合わせフォーム作成に必要なプラグイン

  • Contact Form 7(バージョン 5.1.7)
    フォームプラグイン
  • Contact Form 7 add confirm(バージョン 5.1)
    Contact Form 7に確認画面を付けるプラグイン

お問い合わせフォーム作成に必須ではないが、あったら便利なプラグイン

  • WP Mail SMTP
    localhostでメールの送信テストまでやりたい場合
  • Contact Form 7 Conditional Fields
    selectなどの選択内容によって処理を分岐させたい場合
  • Contact Form DB
    受信したお問い合わせ内容をデータ保存したい場合

Contact Form 7 の設定

Contact Form 7の一覧にはデフォルトで下のように「コンタクトフォーム1」というフォームのサンプルがあるので、これを使っていきましょう。

「コンタクトフォーム1」の編集をクリックして、コンタクトフォームの編集画面に行きます。

そしてまずタイトルを「お問い合わせ」に変更して、入力フォームの作成などを行っていきます。

入力フォームの作成

コンタクトフォームの編集画面のフォームタブで行う作業です。

下は一般的なフォームの内容で、あくまで雛形です。

htmlのタグやclass名などは適当につけていますので、適宜書き換えてください。

 

通知メール&サンクスメール本文の作成

コンタクトフォームの編集画面のメールタブで行う作業です。

運営者宛て通知メール

まずは運営者宛てメールの設定です。

自分の環境に合わせて設定していきます。

メール本文以外の設定項目
送信先:運営者メールアドレス
送信元:[your-name] <[your-email]>
題名:お問い合わせがありました(自動配信メール)
追加ヘッダー:Reply-To: [your-email] 「空のメールタグを含む行を出力から除外する」にチェックする
メール本文

あくまで雛形ですので、用途に合わせて書き換えてください。

 

お客様宛てサンクスメール

「メール (2) を使用」にチェックすると、もう1パターンのメール設定を行うことができるようになります。

これをお客様宛てのサンクスメールの設定として使用します。

メール本文以外の設定項目
「メール (2) を使用」にチェックする
送信先:[your-email] 送信元:株式会社○○ <運営者メールアドレス>
題名:お問い合わせ内容のご確認(自動配信メール)
追加ヘッダー:Reply-To: 運営者メールアドレス
「空のメールタグを含む行を出力から除外する」にチェックする
メール本文

これもあくまで雛形ですので、用途に合わせて書き換えてください。

 

固定ページの作成

お問い合わせフォームのページと送信完了ページを固定ページで作成していきます。

ここも雛形を書いてますので、用途に合わせて書き換えてください。

お問い合わせフォームを表示するページの作成

ページタイトル:お問い合わせ

ページスラッグ:contact

11行目のショートコードを自分が作成したフォームのショートコードに置き換えてください。

ショートコードはContact Form 7 の設定画面の方で確認できます。

送信完了ページの作成

ページタイトル:お問い合わせの送信が完了しました

ページスラッグ:contact-complete

8行目のhttps://fixcode.jpというショートコードは、以下のページで紹介したサイトのURLを表示するショートコードです。

仕事で使える便利なWordPressショートコード集

送信完了画面の表示

フォーム送信後に完了画面を表示するためのJavaScriptです。
footer.phpに書いてください。

もしこのコードをfooter.phpではなくjsファイルに書く場合は8行目のphpコードをサイトのURLに書き換えて、<script></script>タグも消してください。

最後に

フォーム系のプラグインはクラッカーに狙われやすいです。

常に最新版のプラグインにアップデートするようにしてください。

SSLも付けたほうが良いです。というか付けるべきです。

「フォームを付けるなら、セキュリティが~」と言えばクライアントも納得してくれることが多いと思います。

行く行くはMW WP Formを使ったもっと高機能なフォームの作成方法もご紹介したいと思っています。

 

確認画面(Contact Form 7 add confirm)が動作しない場合の対処方法

CF7 add confirmは現在更新が止まっていて、CF7の5.4以降では動作しなくなっているようです。

ネットで調べたところ軽微なコード修正で動くようになりましたので、紹介します。

参考にしたサイトはこちら

 

修正するファイル(1つ)

contact-form-7-add-confirm/includes/js/scripts.js

※パスはWordPressのプラグインフォルダからのパス

 

修正コード(3箇所)

80行目に以下を追加

 

223、226行目は変数の置き換え

 

scripts.jsの修正差分(diff)

 

ドメイン取ったらまずやること~WordPressサイト公開までの流れ

WordPressのサイト開発が終わっていざ公開というときに、意外と手順が多くてモタつくことがあるので一度まとめておこうと思います。
いつもドメインを取得して安心してしまうので、ドメインの取得からWordPressのサイト公開までパパッと終わらせるための手順を書いておきます。
WordPressのサイトをローカルの開発環境で制作し、独自ドメインを取得して、レンタルサーバーで公開するという前提で書きます。

豆知識
ドメインにはドメイン管理のツール、サーバーにはサーバー管理のツールという風にだいたい別々のツールとなっていることが多いです。
 

その1. ネームサーバーの設定

まずはネームサーバーの設定を行います。
ネームサーバーの設定とは簡単に言うと、ドメインとサーバーを連携させる作業です。
この設定を1番にやる理由は、インターネットに反映されるまでにはタイムラグがあるからです。ドメインを取得したらすぐに行うことをおすすめします。
この作業はドメインの管理ツールで行います。
レンタルサーバーには必ずネームサーバーがあり、ドメインにはネームサーバーを設定する項目があります。
ネームサーバーは複数あることがほとんどで、Googleなどで「エックスサーバー ネームサーバー」とかで調べたら出てきます。
 

その2. ドメイン設定【サーバー管理ツール】

サーバーにドメインを認識させる設定です。
これはサーバー管理ツールで行います。
「ドメインの追加」みたいな項目がどこかにあるので、そこで取得したドメインを追加します。
ほとんどのレンタルサーバーでは、このドメインの追加処理を行うと、このドメイン用のフォルダを作成してくれます。
アクセスURLはどれで、FTP先はどこどこですと表示してくれるところもあります(エックスサーバーなど)。
最終的にこのドメイン用のフォルダにFTPなどでファイルをアップロードしてWEBサイトを公開することになりますので、このフォルダのパスをメモしておきます。
 
とりあえずここまでがドメイン取ったらまずやること。以降は引き続きWEBサイト公開の流れです。
 

3. データベースの作成とインポート

WordPressは、データベースを作成する必要があります。
この作業もサーバー管理ツールで行えるようになっているところがほとんどです。

データベースに必要な情報

データベースを作成したときの情報はメモしておきます。
あとで、wp-config.phpを編集するときに使います。

  • データベース名
  • データベースのユーザー名
  • データベースのパスワード
  • データベースのホスト名(IPアドレス)
 

データベースインポート

あらかじめ公開予定のデータベースを開発環境からエクスポートしておきます。
ほとんどのレンタルサーバーでphpMyAdminが使えると思いますので、公開予定のデータベースをインポートします。
 

データベースインポート後に行う作業

データベースインポート後には、以下の作業を行います。

  • wp_options(※1)テーブルのsiteurlとhomeを本番用に書き換える。
※1:データベーステーブルの接頭辞「wp_」はWordPressのデフォルトなので、自分のものに置き換えてください。
 

4. WordPressファイルの配置

WordPressのファイルを配置していよいよWEBサイトの公開となります。

本番用のwp-config.phpを準備

本番用のwp-config.phpファイルを開き「3. データベースの作成とインポート」で作成したデータベースの情報に書き換えます。

  • define(‘DB_NAME’, ‘データベース名’);
  • define(‘DB_USER’, ‘データベースのユーザー名’);
  • define(‘DB_PASSWORD’, ‘データベースのパスワード’);
  • define(‘DB_HOST’, ‘データベースのホスト名(IPアドレス)’);
 

WordPressファイルのアップロード

2. ドメイン設定」で作成されたフォルダにFTPでもGitでも良いのでファイルをアップロードします。
wp-config.phpファイルは本番用に作成したものをアップロードしてください。
 

5. WordPress公開後の作業

管理画面での作業

  • パーマリンク設定の更新(これをやらないと、下層ページが閲覧できません)
  • 検索エンジンがサイトをインデックスしないようにするのチェックをはずす。
  • お客様用アカウントでログインして問題なく作業できるか。
 

WEBサイト確認作業

  • サイトが正常に閲覧できるか。トップページ、下層ページ。PC、スマホ、タブレット。
  • SSLを付けた場合、「https://」となっているか。
  • お問い合わせフォームがある場合は、メールが想定どおりに送信されるか。
 

その他の作業

  • Googleアナリティクスの設定
  • Googleサーチコンソールの設定

仕事で使える便利なWordPressショートコード集

個人的によく使うWordPressのショートコードをまとめてご紹介します。

ショートコードを上手に使うと、プログラムを意識せずに複雑な処理を一行で呼び出したり、良く使う処理を使い回したりできるようになります。

あと業務上、開発効率を上げるために本番環境と開発環境のURLの差異を吸収するために使ったりもしています。

ショートコードとは?的な説明はありせんので、ご了承ください。

以下で紹介するコード全部「functions.php」に貼り付けておけば基本的に使えると思います。

自分は、「functions.php」のコードが膨大になるとメンテナンス性が落ちるので、shortcode.phpというファイルを作成してそちらに書いてます。

もちろんshortcode.phpはfunctions.phpから読み込んで使ってくださいね。「require_once(get_template_directory().’/shortcode.php’);」

よく使うショートコード

まずは、WordPress案件でいつも登録しているショートコードをご紹介します。

使い方はコード中のコメントに書いてます。

改めて見ると、全部パス取得系ですね。

固定ページなどをコーディングするときに絶対パスで指定してしまうと、本番公開のときに全部書き換えないといけなくなるので、手間だし間違いの元ですよね。

それを上のショートコードで書いておけばそのまま本番公開できます。

とりあえずこれを書いておけば、開発効率がグッと上がります。

コードの説明はとくに必要ないと思いますが、強いて説明するなら2番目のショートコード(サイトのURLパス(httpを削除))は、カスタムメニュー(外観>メニューのこと)のカスタムリンクを設定するときに使っています。

なぜかというと、カスタムリンクを設定すると勝手にスキーム「http://」の文字列が追加されるので、それを省いたパス部分のみを取得するためです。

その他便利なショートコード

任意の固定ページを呼び出す関数&ショートコード

このショートコード使い方

このショートコードの一番簡単な使い方は、
[get_post_content page_path=”固定ページのスラッグ名”] です。
パラメータは、get_page_by_pathと同じです。ですので、固定ページ以外にも使えます。
例えば、カスタム投稿タイプのページを呼び出したい場合は、
[get_post_content page_path=”カスタム投稿ページのスラッグ名” post_type=”カスタム投稿タイプ名”] と言う感じで、パラメータを変えることで任意のページを呼び出すことができますので、とても便利です。
自分は、同じ情報を複数の箇所に書くのとかが嫌なので、使い回す情報は1ページにまとめておいて使ったりしています。

テンプレートを呼び出すショートコード

このショートコード使い方

このショートコードの使い方は、
[get_template_part slug=”テンプレートのスラッグ名” name=”テンプレートの名前”] です。WordPress関数のget_template_partと同じですね。
固定ページなどからphpテンプレートを呼び出すことができるので、複雑な処理はphpのプログラミングで書いておいて、管理画面からは呼び出すだけにしておけばMVCとまでは言いませんが、役割を切り分けることができて、メンテナンス性が上がります。

投稿以外の場所でもショートコードを使えるようにする

テキストウィジェットやカスタムメニューでショートコードが使えたらなお便利ですよね。
以下のコードを書いておけば、使えるようになります。