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)?
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.
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
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.
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.