SEARCH

CATEGORY

WordPressでdo_shortcodeでフォームを読み込むとzipaddr-jpが動かない原因と対処法

zipaddr-jp は、郵便番号から住所を自動入力できる便利なJavaScriptライブラリです。
Contact Form 7 などのフォームと組み合わせて使用している方も多いのではないでしょうか。

しかし、WordPressのテンプレートファイル(single.php など)で PHPでショートコードを直接読み込んだ場合、zipaddr-jp が正常に動作しないことがあります。

この記事では、

  • WordPressでzipaddr-jpが動かない状況
  • その原因
  • functions.php を使った対処方法

について解説します。

zipaddr-jpが機能しない状況

zipaddr-jp を使用したフォームを WordPress に設置している場合、通常は郵便番号を入力すると住所が自動入力されます。

しかし、以下のように PHPでショートコードを直接読み込んだ場合、zipaddr-jp が動作しないことがあります。

例えば、single.php や固定ページテンプレートなどで以下のようにフォームを表示しているケースです。

原因:zipaddr-jpのスクリプトが読み込まれていない

zipaddr-jp の JavaScript がページに正常に読み込まれている場合は、ソース内に以下のような記述が見つかります。

しかし、テンプレートファイルから do_shortcode() でフォームを直接表示した場合、スクリプトの読み込み処理が正しく実行されないケースがあります。

その結果、zipaddr-jp の住所自動入力機能が動作しなくなります。

対処法1:記事本文内にショートコードを記述する

最もシンプルな方法は、記事本文内にフォームのショートコードを記述する方法です。

記事内にフォームのショートコードを記述

固定ページや投稿ページの本文に、フォームのショートコードをそのまま記述します。

テンプレートファイルに the_content() を記述

そして、テンプレートファイル(例:single.php)に以下のコードを記述します。

この方法でフォームを表示すると、WordPressの通常の投稿処理を通るため、Contact Form 7 や zipaddr-jp のスクリプトが正しく読み込まれるようになります。

テンプレートファイルから do_shortcode() を直接呼び出すよりも、WordPressの標準的な実装に近い方法です。

対処法2:functions.php にフックを記述してスクリプトを読み込む

テンプレートファイル側で直接フォームを表示する必要がある場合は、
functions.php に zipaddr-jp のスクリプトを読み込む処理を追加することで対応できます。

functions.php の記述例

解説

このコードでは、WordPressの wp_enqueue_scripts フックを利用して、
zipaddr-jpプラグインを使用せずに ZipAddr の JavaScript(zipaddrx.js)を直接読み込んでいます。

is_singular('contact') を指定することで、特定の投稿タイプ(contact)の詳細ページのみでスクリプトを読み込む設定になっています。

if (is_singular('contact'))'contact' 部分は、使用している 投稿タイプのスラッグ名に変更してください。

※ 特定の single.php ではなく、固定ページ(page)で使用したい場合は、次のように is_page() を使用します。

※ すべてのページで zipaddr-jp を使用する場合は、条件分岐を削除してスクリプトを読み込むことも可能です。

まとめ

WordPressで zipaddr-jp が機能しない場合は、JavaScriptが正しく読み込まれていないことが原因であるケースが多くあります。

特に、テンプレートファイルから do_shortcode() を利用してフォームを表示している場合は注意が必要です。

対処方法としては、次の2つがあります。

  • 記事本文にショートコードを記述し、the_content() で表示する
  • functions.php にフックを追加して zipaddr-jp のスクリプトを読み込む

用途に応じて、適切な方法を選択しましょう。