
& は WordPress が & を変えた形
& は文字コードが UTF-8 でも Shift_JIS でも同じ 1 バイトの文字なので、文字コードで & に変わることはありません。HTML の中(a タグの href など)に出すときは & のままでよく、ブラウザが & に戻します。困るのは、HTML ではないところ(JavaScript の中・リダイレクト・API に送る URL など)に esc_url() の結果を使ったときです。その場合は esc_url_raw() を使います。
functions.php
// HTML の属性に出すとき(& は & になるが、ブラウザが & に戻す) echo '<a href="' . esc_url( $url ) . '">リンク</a>'; // リダイレクト・JavaScript・API など、HTML ではないところで使うとき(& のまま) wp_redirect( esc_url_raw( $url ) ); exit;
& のあとのパラメーターが「&」に変わって、正しく動かなかったときに対応した記録です。ファイルの文字コードを UTF-8 にそろえておくこと自体はよいことですが、& になる原因は別のところ(どの関数で URL を出しているか)にあります。

