はじめに

WoprdPressで、問い合わせフォームを作成しているのですが、入力に不備があった場合に「未入力です」などと出力したいと思い、いろいろやっていました。

方法としては、ページのPHPファイルのはじめに、入力データがある場合のエラーチェック文を書き、formのactionで入力されたデータを同ページに渡し、PHPでエラーチェックを行うという流れですが、どうしてもactionで404ページに飛ばされるという事態で躓きました。

その解決方法を、忘れないように残しておきます。

Contents

ずばり原因

フォームの項目の「nameにwp-includes/classess.phpの$public_query_varsの配列で使われているものを使用していた」ことが、原因だったようです。私の場合、「name=name」というように、項目名に「name」を使用していました。

このように、予約語を使用すると404ページへ飛ばされるようです。

解決方法

解決方法は、言うまでもないですが、nameを変更してあげればOKです♪

自分に該当しなかった解決方法

最後に、せっかくなので、上記の原因にたどり着くまでに試したことも書いておきましょう。

基本的には、ずっと「action=””」の部分で、URLの取得がおかしいのかと悩んでいました。

同ページへのactionということで、はじめはこの状態。

<form action="" method="post">

ここからが迷走ですが、様々な関数でURLを出力しようとしたので、整理を兼ねて、その関数をまとめておきます。

<?php the_permalink(); ?> 記事のパーマリンクを出力。
<?php $link = get_permalink(id); ?> 記事のパーマリンクを取得。実際に出力するのではなく、PHPの値として返す。
<?php $url = get_bloginfo(url); ?> ブログのアドレスを取得。
<?php $style_path = get_stylesheet_directory(); ?> 現在のテーマのパス名を取得。
<?php $style_path = get_stylesheet_directory_uri(); ?> 現在のテーマのURLを取得。
<?php $path = get_template_directory(); ?> 現在のテーマのパス名を取得。
<?php $template_uri = get_template_directory_uri(); ?> 現在のテンプレートのパス名を取得。

参考サイト