J'ai un modèle qui a un formulaire de recherche à plusieurs endroits. Chaque formulaire de recherche est identique et contient une entrée de texte, deux boutons radio, deux étiquettes associées aux boutons radio et un bouton de soumission. Cela fonctionne bien pour le premier appel à get_search_form()
, mais lors des appels suivants, un clic sur les étiquettes modifie la première entrée au lieu de celle du formulaire actuel.
Les entrées sont essentiellement comme suit:
<input type="radio" name="example" id="firstOption" />
<label for="firstOption">First Option</label>
<input type="radio" name="example" id="secondOption" />
<label for="secondOption">Second Option</label>
Comme vous l'avez peut-être déjà compris, le problème est que les étiquettes ciblent des identifiants spécifiques et que ces identifiants apparaissent plusieurs fois sur une page, des problèmes se posent.
La solution serait de le changer de sorte que, à chaque appel de get_search_form()
, un numéro soit ajouté aux identifiants, comme suit:
<!-- first call... -->
<input type="radio" name="example" id="firstOption0" />
<label for="firstOption0">First Option</label>
<input type="radio" name="example" id="secondOption0" />
<label for="secondOption0">Second Option</label>
<!-- second call... -->
<input type="radio" name="example" id="firstOption1" />
<label for="firstOption1">First Option</label>
<input type="radio" name="example" id="secondOption1" />
<label for="secondOption1">Second Option</label>
Je travaille actuellement via une variable de session, mais je n'aime pas que le nombre change lorsque l'utilisateur navigue sur la page. Je l'ai configuré pour en ajouter un à la variable de session chaque fois que le formulaire est appelé. Ainsi, lorsque l'utilisateur navigue sur le site, les ID d'entrée augmentent continuellement jusqu'à la fin de la session.
Je préférerais de beaucoup avoir le même numéro sur chaque page. Existe-t-il un autre moyen de stocker une variable qui persiste dans les modèles inclus, qui ne persiste pas entre les navigations de page?
Juste quelques idées simples:
A) Voici une suggestion utilisant le filtre get_search_form
avec une variable statique pour gérer le comptage d'instances:
add_filter( 'get_search_form', function( $form )
{
static $instance = 0;
$instance++;
// Setup your form here with the $instance variable as needed:
$form = '<form>...</form>';
return $form;
} );
B) Une autre solution consiste à ajouter
$instance = apply_filters( 'wpse_search_instance', 0 );
dans votre fichier searchform.php
, où vous ajoutez les éléments suivants à votre fichier functions.php
:
add_filter( 'wpse_search_instance', function( $count )
{
static $instance = 0;
return ++$instance;
} );
mais là encore, ce type de comptage d'instances pourrait être modifié via un autre rappel de filtre ;-)
C) Nous pourrions aussi le faire comme ceci dans votre fichier searchform.php
:
do_action( 'wpse_search_instance' );
$instance = did_action( 'wpse_search_instance' );
pour gérer le nombre d'instances. Cela suppose que vous ne lancez pas l'action wpse_search_counting
ailleurs.
D) Nous pouvons trouver le hook suivant dans la fonction get_search_form()
:
do_action( 'pre_get_search_form' );
il suffirait donc d'appeler:
$instance = did_action( 'pre_get_search_form' );
dans le searchform.php
. Je pense que c'est la solution la plus facile à ce jour.