Warning: Trying to access array offset on value of type bool in /home/hnakata/digitalestate.biz/public_html/wp-content/themes/luxeritas/inc/json-ld.php on line 120

WPMLとContact Form 7の不具合について(解決編)

2018年3月1日WordPress, 茶屋街

This post is also available in: English (英語) Français (フランス語)

WPML
他のページと同じように、会社情報と連絡方法というページを作った。いつもと同じくこのページにもそれぞれフランス語と英語のページを作った。

作り方は以下のようなやり方である。このページ「WPMLとContact Form 7の不具合について」を例示しよう。


まず、New pageあるいはNew postを作る。するとWPMLが予め決めてある他言語の関連ファイルの準備をする。

親子ページ

これが親ページ、親ポストになる。上の図の英語、フランス語の+をクリックすると子ページ、子ポストができる。

上の図ののマークがついているのは、すでに英語とフランス語の関連ファイルができていて、オリジナルの日本語ファイルが変更されていて、残りの2ファイルがアップデート待ちのマークである。

ページができると、実際には日本語ページでは以下のように他言語のページへのリンクが現れる。


Contact Form 7による連絡フォーム

さて、そのページには他のページとは違って連絡フォームをつけることにした。

連絡フォームは相手への確認メールを送るためにJetpackにあるフォームではなく、プラグインのContact Form 7を使うことにした。Contact Form 7で日本語のフォームをもとに、英語とフランス語のフォームも、ちょうどWPMLで多言語ページを作るようにコピーして表示するテキスト部分だけを英語・フランス語に翻訳して貼り付けた。

日本語のページにつけた日本語のフォームは問題なく動作するが、英語とフランス語のページにつけたフォームはどちらも動作しない。Contact Form 7をいくらいじってもうまくいかない。もうお手上げ状態だった。

独立ページを作って解決

もしかしたら親ページの日本語のフォームと子ページの英語・フランス語のフォームとが競合して不具合になるのかもしれないと考えた。解決法としてそれぞれ別のページを作った。つまり3つのページがそれぞれ親ページになるということだ。案の定、問題は解決した。つまり、どのページもそれぞれフォームが動作したのである。こうして会社情報と連絡方法というページは親子関係のない独立した3つのページになったのである。

今日、別のページで確認したが、やはり親ページなら問題なく動作した。


その後、WPML.orgのエラー報告のサイトで以下の解決策を発見した。残念ながら日本語のフォーラムはなく、英語のフォーラムしかないので以下に原文をそのまま掲載する。原文の下に翻訳を掲載する。

Symptoms

Submitting the form in the secondary language fails. This producess (produces?) the below console error:
xxxxx/wp-json?lang=es/contact-form-7/v1/contact-forms/XXX/feedback 404 (Not Found)

This issue occurs only when setting the language URL format to “Language name added as a parameter“.

Workaround

Add this code to the theme’s functions.php file, found in the ../wp-content/themes/theme-name/folder:

1
add_filter( 'wpcf7_load_js', '__return_false' );
症状
セカンダリ言語でフォームを送信すると失敗します。以下のコンソールエラーが発生します。
xxxxx / wp-json?lang = es / contact-form-7 / v1 / contact-forms / XXX / feedback 404 (Not Found)
この問題は言語URL形式を「パラメータとして追加された言語名」に設定する場合にのみ発生します。
回避策
このコードを../wp-content/themes/theme-name/フォルダにあるテーマのfunctions.phpファイルに次の文字列を追加します。
1
add_filter( 'wpcf7_load_js''__return_false' );
 おかげさまで解決しました。ありがとうございました。