<select>
フィールドにカスタムの分類用語を入力するためにwp_dropdown_categories()
を使用しています。
コードが以下のようなものであれば:
<?php
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'echo' => 1,
);
wp_dropdown_categories( $args );
それはうまく働いています。 jQueryを使ってフィールドを必須にすることができます。
$('#tax-type option:first').val(null);
$('#tax-type').attr('required', true);
それも働いています。しかし、JavaScriptを使わずにフィールドを必須にしたいと思います。私は'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;
なぜうまく動かないのかも理解できます。しかし、私はJavaScriptなしでそれを達成することができる方法はありますか?どんなフィルタ?ただ言わないでください。
コアからコピーしてそのオプションであなたの新しいものを作ってください。
そして私の2番目の質問は、none_optionの値が-1
なのはなぜですか?なぜ''
(null)じゃないの?
wp_categories_dropdown
を使用するたびにrequired
属性を適用したい場合は、他の回答で示唆されているようにwp_dropdown_cats
フィルターを使用してください。
add_filter( 'wp_dropdown_cats', 'wp_dropdown_categories_required' );
function wp_dropdown_categories_required( $output ){
return preg_replace(
'^' . preg_quote( '<select ' ) . '^',
'<select required ',
$output
);
}
特定の状況でのみrequired
属性を適用する場合は、echo
引数をfalse
に設定してwp_dropdown_categories
を使用し、返される文字列にrequired
属性を導入してから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;
あるいは、より良い方法として、カスタムの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;
}
そしてwp_dropdown_categories
を次のように使います。
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'required' => true,
);
wp_dropdown_categories( $args );
2番目の質問については、「スレッドごとに1つの質問」という規則があることを知っておく必要があります。今後の質問のためにそれを覚えておいてください。言われるより、-1
はoption_none_value
引数のデフォルト値です。この引数は文書化されていません(今では、 codex に追加しました)。次のように上書きすることができます。
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'option_none_value' => NULL,
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'echo' => false
);
PD:NULL
がoption
要素内のselect
に対して有効な値であるかどうかわかりません。また、''
(空の文字列)はNULL
と同じではありません。空の文字列は長さゼロの文字列データ型です。 NULL
は日付型ではなく、データプロパティもありません。何もありません。
WordPress 4.6から、 wp_dropdown_categories()
に直接 'required'属性を追加することができます。
<?php
$args = array(
'show_option_none' => __( 'Select one', 'text-domain' ),
'taxonomy' => 'my_tax',
'id' => 'tax-type',
'echo' => 1,
'required' => true
);
wp_dropdown_categories( $args );
出典:コアトラクトチケット
フィルタがあります - wp_dropdown_cats
(私の知る限り、どこにも文書化されていません。)
HTML文字列とwp_dropdown_categories
に与えられた引数の配列の2つのパラメータを与えます、そしてあなたは新しいHTMLを返す必要があります。
wp-includes/category-template.phpの関数を見てみるとわかるように、 'required'を組み込むためのオプションはありません。 $args['required']
が機能しないので別の方法 - あなたが知っているように。
フィルタ'wp_dropdown_cats'
が見つかります。これは、関数がこの出力を返す直前に出力を提供します。そのため、このフィルタを操作して"<select "
を"<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
);
}
あなたの2番目の質問に関して:
None_optionの値が-1なのはなぜですか?なぜそれが ''(null)ではないのですか?
これは標準値で、この関数は "none"オプションに追加します。この値は$ args ['option_none_value']で変更できます。だから、例えば:
$args = array(
'show_option_none' => 'test',
'option_none_value' => 'x'
);
wp_dropdown_categories( $args );
参照: https://codex.wordpress.org/Function_Reference/wp_dropdown_categories
特定の選択フィールドだけに「required」属性を追加したい場合は、自分で「required」属性を追加して、フィルタにチェックインすることができます。
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
);
}
ではごきげんよう。