日々ろぐ

WordPress で $_POST[’name’] を使ったらダメよ

| 2012.05.15 |

田中です。
久々に派手にはまってしまったのでメモしておきます。

WordPress内で独自のフォームを作っていてハマりました。
$_POST[’name’] に値が入ると 404 エラーになります。

同じ目に遭っている人は発見したが原因がちゃんとわからなかったのでソース久々に一生懸命漁ったよ。
Be careful sending $_POST['name'] to WordPress | Peter Hartree – Freelance Web Developer

WordPress内では$_POSTから$wp_query->query_varsに値が渡っているのだけれどそこでこの’name’が使われているのだ

wp-includes/query.php内の3500行ぐらいに以下のがある。
$_POST[‘name’] に値が入っているとこのスラックのページを探してリダイレクトしちゃう。
そんなページはもちろんないので404というわけ。

print_r($wp_query->query_vars);
とかで観察してみると良いです。

独自で$_POST使うときは ‘name’ を ’trim_name’ とか競合しないようにしといたほうが良いかも。

query.php in tags/3.3.2/wp-includes – WordPress Trac

/**
 * Redirect old slugs to the correct permalink.
 *
 * Attempts to find the current slug from the past slugs.
 *
 * @since 2.1.0
 * @uses $wp_query
 * @uses $wpdb
 *
 * @return null If no link is found, null is returned.
 */
function wp_old_slug_redirect() {
	global $wp_query;

	if ( is_404() && '' != $wp_query->query_vars['name'] ) :
		global $wpdb;
//以下省略

このトラブル、何年かまえにも遭遇したこと思い出した。
その時は原因まで辿りつけなかったんだな。
少しは成長したかな?