it-swarm.com.de

Zählen Sie, wie oft die Suchformularvorlage auf einer Seite enthalten ist

Ich habe eine Vorlage, die an mehreren Stellen ein Suchformular enthält. Jedes Suchformular ist identisch und enthält eine Texteingabe, zwei Optionsfelder, zwei den Optionsfeldern zugeordnete Beschriftungen und ein Senden-Symbol. Dies funktioniert gut für den ersten Aufruf von get_search_form(), aber bei nachfolgenden Aufrufen wird durch Klicken auf die Bezeichnungen die erste Eingabe anstelle der Eingabe für das aktuelle Formular geändert.

Die Eingaben sind im Wesentlichen so:

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

Wie Sie vielleicht bereits herausgefunden haben, liegt das Problem darin, dass die Beschriftungen auf bestimmte IDs abzielen. Da diese IDs mehrmals auf einer Seite angezeigt werden, treten Probleme auf.

Die Lösung wäre, es so zu ändern, dass bei jedem Aufruf von get_search_form() eine Nummer wie folgt an die IDs angehängt wird:

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

Momentan funktioniert dies über eine Sitzungsvariable, aber ich mag es nicht, dass sich die Nummer ändert, wenn der Benutzer auf der Seite navigiert. Ich habe festgelegt, dass der Sitzungsvariablen jedes Mal, wenn das Formular aufgerufen wird, eine hinzugefügt wird, damit die Eingabe-IDs beim Navigieren durch die Site kontinuierlich erhöht werden, bis die Sitzung endet.

Ich würde sie viel lieber auf jeder Seite gleich nummerieren lassen. Gibt es eine andere Möglichkeit, eine Variable zu speichern, die für eingeschlossene Vorlagen beibehalten wird und die zwischen den Seitennavigationen nicht beibehalten wird?

1
JacobTheDev

Nur ein paar einfache Ideen:

A) Hier ist ein Vorschlag, den Filter get_search_form mit einer statischen Variablen für die Instanzzählung zu verwenden:

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) Ein weiterer Workaround wäre das Hinzufügen

$instance = apply_filters( 'wpse_search_instance', 0 );

zu Ihrer searchform.php-Datei, in der Sie Folgendes zu Ihrer functions.php-Datei hinzufügen:

add_filter( 'wpse_search_instance', function( $count )
{
    static $instance = 0;
    return ++$instance; 
} );

aber andererseits könnte diese Art der Instanzzählung durch einen anderen Filter-Callback geändert werden ;-)

C) Dann könnten wir es auch so in Ihrer searchform.php-Datei machen:

do_action( 'wpse_search_instance' );

$instance = did_action( 'wpse_search_instance' );

die Instanzzählung zu behandeln. Dies setzt voraus, dass Sie die Aktion wpse_search_counting nicht an anderer Stelle ausführen.

D) Wir können den folgenden Haken in der Funktion get_search_form() finden:

 do_action( 'pre_get_search_form' );

wir müssten also nur anrufen:

$instance = did_action( 'pre_get_search_form' );

innerhalb des searchform.php. Ich denke, dies ist die bisher einfachste Problemumgehung.

2
birgire