web-dev-qa-db-fra.com

Comment remplacer un événement javascript select box on change with action of soumission of formulaire?

J'ai un petit problème qui a probablement une solution très simple. J'utilisais la fonction wp_get_archives() pour créer un formulaire de sélection déroulant. Voir le code complet ci-dessous:

<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>

J'aimerais que cela utilise le bouton d'envoi au lieu de l'événement onchange pour exécuter l'action. Évidemment, ce que je devrais faire est de supprimer l’élément onchange et d’ajouter une action de formulaire. J'ai essayé de le formater de la même manière que le menu déroulant de ma catégorie fonctionnelle.

<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>

Cependant, cela ne fonctionne pas. Je devine qu'il y a quelque chose qui ne va pas avec l'URL dans l'action de formulaire, car cela m'envoie simplement à la page d'accueil du site.

Quelqu'un a une idée sur la façon de passer de l'utilisation du bouton Go?

2
JCM

Cela ne fonctionne pas parce que:

  • Vous redirigez la maison
  • Vous n'écoutez pas la variable $_GET, le lien d'archive est simplement ajouté à votre URL personnelle.

Vous devez ajouter une fonction qui écoute cette variable $_GET.

ajoutez simplement ceci à votre fichier 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