J'utilise wp_dropdown_categories()
pour renseigner le champ <select>
avec des termes de taxonomie personnalisés.
Si le code est comme ci-dessous:
<?php
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'echo' => 1,
);
wp_dropdown_categories( $args );
Cela fonctionne très bien. Je peux rendre le champ obligatoire avec jQuery:
$('#tax-type option:first').val(null);
$('#tax-type').attr('required', true);
Ça marche aussi. Mais, je veux rendre le champ obligatoire sans JavaScripts. J'ai essayé d'ajouter ce qui suit en faisant le 'echo'
à 0
:
$new = array();
$new['required'] = true;
$mrg = array_merge($args, $new);
var_dump($mrg); //outputs 'required'=>1
$dd = wp_dropdown_categories( $mrg );
echo $dd;
Je peux aussi comprendre pourquoi ça ne marche pas. Mais y a-t-il moyen de réaliser cela sans JavaScripts? Un filtre? S'il vous plaît ne dites pas simplement:
copier du noyau et faire votre nouveau avec cette option.
Et ma deuxième question est la suivante: pourquoi la valeur de none_option est -1
? Pourquoi pas c'est un ''
(null)?
Si vous souhaitez appliquer l'attribut required
chaque fois que vous utilisez wp_categories_dropdown
, utilisez le filtre wp_dropdown_cats
comme suggéré dans les autres réponses:
add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required' );
function wp_dropdown_categories_required( $output ){
return preg_replace(
'^' . preg_quote( '<select ' ) . '^',
'<select required ',
$output
);
}
Si vous souhaitez appliquer l'attribut required
uniquement dans des situations spécifiques, vous pouvez utiliser wp_dropdown_categories
avec un argument echo
défini sur false
, introduisez l'attribut required
dans la chaîne renvoyée, puis 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;
Ou mieux, appliquez le filtre associé à un attribut personnalisé required
:
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;
}
Et utilisez ensuite wp_dropdown_categories
comme ceci:
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'required' => true,
);
wp_dropdown_categories( $args );
À propos de la deuxième question, vous devez savoir qu’il existe une règle "une question par fil". Rappelez-vous cela pour les questions futures. -1
est la valeur par défaut pour l'argument option_none_value
. Cet argument n'a pas été documenté (maintenant, je l'ai ajouté à codex ). Vous pouvez le remplacer comme suit:
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'option_none_value' => NULL,
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'echo' => false
);
PD: Je ne sais pas si NULL
est une valeur valide pour un option
dans un élément select
. De plus, notez que ''
(chaîne vide) n'est pas identique à NULL
. Une chaîne vide est un type de données de chaîne de longueur nulle; NULL
n'est pas un type de date et n'a pas de propriétés de données, ce n'est rien.
À partir de WordPress 4.6, nous pouvons ajouter un attribut "requis" directement à wp_dropdown_categories()
.
<?php
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'echo' => 1,
'required' => true
);
wp_dropdown_categories( $args );
Source:Billet d’essai
Il y a un filtre - wp_dropdown_cats
(non documenté pour autant que je sache.)
Il vous donne deux paramètres, la chaîne HTML et un tableau des arguments fournis à wp_dropdown_categories
, et vous devez renvoyer le nouveau code HTML.
Si vous regardez la fonction dans wp-includes/category-template.php, vous verrez qu'il n'y a pas d'option pour la construction 'obligatoire'. Nous devons donc choisir un autre moyen, $args['required']
ne fonctionne pas - comme vous le savez.
Nous trouvons le filtre 'wp_dropdown_cats'
, qui nous fournit la sortie juste avant que la fonction ne renvoie cette sortie. Nous pourrions donc utiliser ce filtre et modifier "<select "
en "<select required "
:
add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required' );
function wp_dropdown_categories_required( $output ){
return preg_replace(
'^' . preg_quote( '<select ' ) . '^',
'<select required ',
$output
);
}
Concernant votre deuxième question:
Pourquoi la valeur de none_option est -1? Pourquoi pas c'est un '' (null)?
C'est la valeur standard que la fonction ajoute à l'option "none". Vous pouvez modifier cette valeur avec $ args ['option_none_value']. Donc par exemple:
$args = array(
'show_option_none' => 'test',
'option_none_value' => 'x'
);
wp_dropdown_categories( $args );
Référence: https://codex.wordpress.org/Function_Reference/wp_dropdown_categories
Si vous souhaitez ajouter l'attribut "requis" uniquement à un champ de sélection spécifique, vous pouvez ajouter vous-même un attribut "requis", que vous activez dans le filtre:
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
);
}
Bonne chance.