webentwicklung-frage-antwort-db.com.de

Wie füge ich wp_dropdown_categories () das HTML5-Attribut 'required' ohne JavaScripts hinzu?

Ich verwende wp_dropdown_categories() zum Ausfüllen des <select>-Felds mit benutzerdefinierten Taxonomiebedingungen.

Wenn der Code wie folgt lautet:

<?php
$args = array(
    'show_option_none'   => __( 'Select one', 'text-domain' ),
    'taxonomy'           => 'my_tax',
    'id'                 => 'tax-type',
    'echo'               => 1,
);
wp_dropdown_categories( $args );

Es funktioniert gut. Ich kann das Feld mit jQuery obligatorisch machen:

$('#tax-type option:first').val(null);
$('#tax-type').attr('required', true);

Es funktioniert auch. Aber ich möchte das Feld ohne JavaScripts obligatorisch machen. Ich habe versucht, Folgendes hinzuzufügen, indem ich den 'echo' zu 0 gemacht habe:

$new = array();
$new['required'] = true;
$mrg = array_merge($args, $new);
var_dump($mrg); //outputs 'required'=>1
$dd = wp_dropdown_categories( $mrg );
echo $dd;

Ich kann auch verstehen, warum es nicht funktioniert. Aber gibt es eine Möglichkeit, dies ohne JavaScripts zu erreichen? Irgendein Filter? Bitte sagen Sie nicht nur:

Kopieren Sie aus dem Kern und machen Sie Ihre neue mit dieser Option.

Und meine zweite Frage ist: Warum ist der Wert von none_option -1? Warum ist es nicht ein '' (null)?

1
Mayeenul Islam

Wenn Sie das Attribut required bei jeder Verwendung von wp_categories_dropdown anwenden möchten, verwenden Sie den Filter wp_dropdown_cats wie in den anderen Antworten vorgeschlagen:

add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required' );
function wp_dropdown_categories_required( $output ){
    return preg_replace( 
        '^' . preg_quote( '<select ' ) . '^', 
        '<select required ', 
        $output 
    );
}

Wenn Sie das Attribut required nur in bestimmten Situationen anwenden möchten, können Sie wp_dropdown_categories mit dem Argument echo auf false verwenden, das Attribut required in die zurückgegebene Zeichenfolge einfügen und dann echo:

$args = array(
    'show_option_none'   => __( 'Select one', 'text-domain' ),
    'taxonomy'           => 'my_tax',
    'id'                 => 'tax-type',
    'echo'               => false,
);

$cat_dropdown = wp_dropdown_categories( $args );

$cat_dropdown = preg_replace( 
        '^' . preg_quote( '<select ' ) . '^', 
        '<select required ', 
        $cat_dropdown
    );

echo $cat_dropdown;

Oder wenden Sie besser den Filter in Kombination mit einem benutzerdefinierten Attribut required an:

add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required', 10, 2 );
function wp_dropdown_categories_required( $output, $args ){

    if( isset( $args['required'] ) && $args['required'] ) {

       $output = preg_replace( 
            '^' . preg_quote( '<select ' ) . '^', 
            '<select required ', 
            $output 
       );

    }

    return $output;

}

Und dann benutze wp_dropdown_categories so:

$args = array(
    'show_option_none'   => __( 'Select one', 'text-domain' ),
    'taxonomy'           => 'my_tax',
    'id'                 => 'tax-type',
    'required'           => true,
);

wp_dropdown_categories( $args );

Zu der zweiten Frage sollten Sie wissen, dass es eine Regel "eine Frage pro Thread" gibt. Denken Sie daran für zukünftige Fragen. -1 ist der Standardwert für das Argument option_none_value. Dieses Argument wurde nicht dokumentiert (jetzt habe ich es zu codex hinzugefügt). Sie können es wie folgt überschreiben:

$args = array(
    'show_option_none'   => __( 'Select one', 'text-domain' ),
    'option_none_value'  => NULL,
    'taxonomy'           => 'my_tax',
    'id'                 => 'tax-type',
    'echo'               => false
);

PD: Ich bin nicht sicher, ob NULL ein gültiger Wert für eine option in einem select-Element ist. Beachten Sie außerdem, dass '' (leere Zeichenfolge) nicht mit NULL identisch ist. Ein leerer String ist ein String-Datentyp mit der Länge Null. NULL ist kein Datumstyp und hat keine Dateneigenschaften, es ist nichts.

7
cybmeta

Update: WordPress 4.6

Ab WordPress 4.6 können wir ein 'erforderliches' Attribut direkt zu wp_dropdown_categories() hinzufügen.

<?php
$args = array(
    'show_option_none'   => __( 'Select one', 'text-domain' ),
    'taxonomy'           => 'my_tax',
    'id'                 => 'tax-type',
    'echo'               => 1,
    'required'           => true
);
wp_dropdown_categories( $args );

Quelle:Core Tract Ticket

3
Mayeenul Islam

Es gibt einen Filter - wp_dropdown_cats (meines Wissens nirgends dokumentiert)

Es gibt Ihnen zwei Parameter, die HTML-Zeichenfolge und ein Array der Argumente, die an wp_dropdown_categories übergeben werden, und Sie müssen den neuen HTML-Code zurückgeben.

1
William Turrell

Wenn Sie einen Blick in die Funktion in wp-includes/category-template.php werfen, werden Sie sehen, dass es keine Option für 'erforderliches' Einbauen gibt. Deshalb müssen wir seitdem einen anderen Weg wählen $args['required'] funktioniert nicht - wie Sie wissen.

Wir finden den Filter 'wp_dropdown_cats', der uns die Ausgabe liefert, kurz bevor die Funktion diese Ausgabe zurückgibt. Wir könnten also mit diesem Filter arbeiten und "<select " in "<select required " ändern:

add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required' );
function wp_dropdown_categories_required( $output ){
    return preg_replace( 
        '^' . preg_quote( '<select ' ) . '^', 
        '<select required ', 
        $output 
    );
}

Zu Ihrer zweiten Frage:

Warum ist der Wert von none_option -1? Warum ist es nicht ein '' (null)?

Dies ist der Standardwert, den die Funktion zur "none" -Option hinzufügt. Sie können diesen Wert mit $ args ['option_none_value'] ändern. Also zum Beispiel:

$args = array(
    'show_option_none'   => 'test',
    'option_none_value'  => 'x'
);
wp_dropdown_categories( $args );

Referenz: https://codex.wordpress.org/Function_Reference/wp_dropdown_categories

Wenn Sie das "Erforderliche" -Attribut nur einem bestimmten Auswahlfeld hinzufügen möchten, können Sie sich ein "Erforderliches" -Attribut hinzufügen, das Sie im Filter überprüfen:

    function show_pages(){
    $args = array(
        'show_option_none'   => 'test',
        'option_none_value'  => 'x',
        'required'           => true
    );
    wp_dropdown_categories( $args );
    }

    add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required', 10, 2 );
    function wp_dropdown_categories_required( $output, $args ){
        if( ! isset( $args['required'] ) || $args['required'] != true )
            return $output;

        return preg_replace( 
            '^' . preg_quote( '<select ' ) . '^', 
            '<select required ', 
            $output 
        );
    }

Alles Gute.

1
websupporter