web-dev-qa-db-ja.com

JavaScriptのセレクトボックスのonchangeイベントをフォームの送信アクションに置き換える方法は?

私はおそらく非常に簡単な修正を持っている小さな問題があります。ドロップダウン選択フォームを作成するために wp_get_archives() 関数を使用しています。下記の完全なコードを参照してください。

<form id="side-Arch">
     <select name="archive-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
          <option value=""><?php echo esc_attr( __( 'Select Month' ) ); ?></option> 
          <?php wp_get_archives( array( 'type' => 'monthly', 'format' => 'option', 'show_post_count' => 1 ) ); ?>
     </select>
     <input type="submit" value="Go" id="submit" />
</form>

アクションを実行するためにonchangeイベントの代わりに送信ボタンを使用するようにしたいです。明らかに、私がすべきことはonchange要素を削除してフォームアクションを追加することです。機能カテゴリのドロップダウンと同じようにフォーマットしてみました。

<form id="side-Arch" action="<?php echo esc_url( home_url( '/' ) ); ?>" method="get">
     <select name="archive-dropdown">
          <option value=""><?php echo esc_attr( __( 'Select Month' ) ); ?></option>
          <?php wp_get_archives( array( 'type' => 'monthly', 'format' => 'option', 'show_post_count' => 1 ) ); ?>
     </select>
     <input type="submit" value="Go" id="submit" />
</form>

ただし、これは機能しません。フォームアクションのURLに問題があると思われます。これは、サイトのホームページに送信されるだけです。

これをGoボタンの使用に切り替える方法について何かアイデアがありますか?

2
JCM

それはうまくいきません。

  • あなたは家を向け直しています
  • アーカイブリンクがあなたの自宅のURLに追加されているだけなので、$_GET変数をリッスンしません。

その$_GET変数をリッスンする関数を追加する必要があります。

これをfunctions.phpファイルに追加するだけです。

add_action( 'template_redirect', 'wpse_archive_select' );
function wpse_archive_select(){

  if( isset( $_GET[ 'archive-dropdown' ] ) ){
    die( wp_safe_redirect( $_GET[ 'archive-dropdown' ] ) );
  }
}
2
bynicolas