Contact Form 7 1.7.5

Contact Form 7 / Download

Two fixes and one enhancement. 1) The SEO issue reported by Dexter has been fixed (I believe). 2) For wpautop() haters, hook function adding logic changed. 3) New include_blank option added to form tag of drop-down menus.

SEO issue

Dexter and some people told me that there seems be a SEO issue in Contact Form 7.

The “?wpcf7=json” code is used by Contact Form 7 only in AJAX submitting (POST) process. I wonder why Google indexed such URLs even now. Anyway, I worked around the issue.

Now Contact Form 7 doesn’t use “?wpcf7=json”, so I believe that kind of problem is fixed. But Google’s existing indexes are still there, I can’t do anything for that.

If you hate wpautop()

wpautop() is a WordPress’s built-in filter which automatically surrounds a paragraph with <p></p> tag. It’s useful and I like it, while I know some users hate it.

Some users remove the filter by commenting out a line in wp-includes/default-filters.php like below.

//add_filter('the_content', 'wpautop');

# Well, this is just an example. I don’t suggest that.

But when you are using Contact Form 7, this hack doesn’t work.

wpautop() is clever, but it doesn’t correctly treat form control elements. See this ticket. It’s a big issue for Contact Form 7. So Contact Form 7 removes original wpautop() filter, and adds patched one.

Due to this, if you want to remove wpautop() filtering, you need to hack codes in Contact Form 7 so far. It was sometimes confusing for the anti-autop hackers who didn’t know Contact Form 7 is doing such replacing.

In this release, I changed the replacing logic. Now it replaces wpautop() only if original wpautop() is registered on the filters array. So if you hate wpautop(), you can remove it by just editting wp-includes/default-filters.php.

New include_blank option for drop-down menu

If include_blank option is set, drop-down menu inserts a blank item “—” into the top of it. So this tag

[select your-menu "---" "a" "b" "c"]

and this tag

[select your-menu include_blank "a" "b" "c"]

have the same semantics.

I recommend you to use this option because it seems that some browsers don’t submit first option’s value in a menu, even if they shows the first one as selected by default. See also the HTML spec.


(In Japanese from here.)

修正が2つ、機能追加が1つあります。1) Dexter さんから報告された SEO 関連の問題が修正されました(と、思います)。2) wpautop() を毛嫌いする人のためにフック関数まわりのロジックが変更されました。3) 新たに include_blank オプションがドロップダウンメニューのタグに追加されました。

SEO 関連の問題

Dexter さんそのほかの方から Contact Form 7 に SEO 上の問題があるようだとの報告が寄せられました。

“?wpcf7=json” というコードは Contact Form 7 が AJAX での送信 (POST による) に限って使用しているものです。なぜそんな URL を Google はインデックスしたのか、いまだによくわかっていません。ともかく、対策を講じることにしました。

今回のリリースから Contact Form 7 は “?wpcf7=json” を使いません。これでこの手の問題は解決されたものと思います。ただしすでに Google にインデックスされているものはそのままなので、これについてはどうしようもありません。

wpautop() がお嫌いなら

wpautop() は WordPress のビルトイン・フィルタで、パラグラフを自動的に <p></p> タグで囲みます。便利な機能ですがこれが嫌いだというユーザもいるようです。

一部のユーザはこのフィルタを無効にするために wp-includes/default-filters.php の一行を以下のようにコメントアウトして使っています。

//add_filter('the_content', 'wpautop');

# これは単に例として示しているだけで、別に勧めているわけではありません。

ところが、Contact Form 7 を使っているとこのハックが機能しません。

wpautop() は賢いのですが、困ったことにフォーム関連の要素を間違って扱ってしまいます(Trac #4605 を参照)。これは Contact Form 7 にとっては重大な問題なので、Contact Form 7 ではいったん元の wpautop() を削除して、代わりにパッチが当てられた修正版の wpautop() を追加することで回避しています。

このため、もし wpautop() のフィルタを無効にしたいなら、Contact Form 7 のファイルに手を入れる必要がありました。このことは Contact Form 7 がそのような置換をしていることを知らないアンチ wpautop() なユーザにとって困惑の種だったようです。

今回のリリースからは、この置換のロジックを変更し、オリジナルの wpautop() が適用フィルタの配列に登録されている場合に限定して修正版への置換を行うようにしました。これにより wp-includes/default-filters.php の編集で wpautop() のフィルタを無効化できるようになっています。

ドロップダウンメニューのための include_blank オプション

include_blank オプションがセットされていると、ドロップダウンメニューは空の項目 “—” を先頭に挿入します。ですから次のタグ

[select your-menu "---" "a" "b" "c"]

と、次のタグ

[select your-menu include_blank "a" "b" "c"]

は意味的に同じです。

一部のブラウザでは、たとえ先頭の項目をデフォルトの選択オプションとして表示されている場合であっても、その先頭の項目の値は送信しないようなので、include_blank オプションの使用を推奨します。関連する HTML の仕様がこちら

4 thoughts on “Contact Form 7 1.7.5

  1. This issue may be more complex that people think. I have tried the following with no results in removing the “?wpcf7=json” from wordpress and it affects all posts on your blog:

    1. I removed the Contact 7 plugin. No effect.
    2. I removed from my header file. No effect.
    3. I installed the updated 7.1.7.5 plugin. Again, no effect. That query string still exists on every post on at least 2 of my blogs that I have checked so far!

    However, I also do not see evidence that Google is either indexing these pages or counting them as “duplicate” content as both of these sites are indexing fine and have excellent SERPs.

    If anybody can shed more light on how to eliminate this problem I would love to hear from them!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s