これは、設定APIの使用ではなく、私のPHPの問題のほうが多いと思いますが、Wordpressで複数選択ボックスのデータの配列を保存することができません。
複数選択ボックスはカスタムメタフィールドに対応し、選択オプションはそのメタフィールドを表示するカスタム投稿タイプです。
表示コードは次のとおりです。
case 'select2':
echo "<select id='$id' style='width:15em;height:10em;' class='select$field_class' name='" . $buddha_option_name . "[$id]' multiple>";
foreach($choices as $item) {
$item = explode("|",$item);
$item[0] = esc_html($item[0], 'buddha_textdomain');
$selected = ($options[$id]==$item[1]) ? 'selected="selected"' : '';
echo "<option value='$item[1]' $selected>$item[0]</option>";
}
echo "</select>";
echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : "";
break;
$choices
ここでは「選択肢」として定義されています。
$options[] = array(
"section" => "custom_meta",
"id" => BUDDHA_SHORTNAME . "_meta_email",
"title" => __( 'Email Meta Box', 'buddha_textdomain' ),
"desc" => __( 'Select post types to have custom email meta box.', 'buddha_textdomain' ),
"type" => "select2",
"std" => print_r($buddha_option_name[$id]),
"choices" => array( __('Posts','buddha_textdomain') . "|post", __('Pages','buddha_textdomain') . "|page", __('Faculty/Staff','buddha_textdomain') . "|staff", __('FAQ','buddha_textdomain') . "|faq", __('Documents','buddha_textdomain') . "|docs", __('Courses','buddha_textdomain') . "|courses" )
);
そして検証コード:
case 'select2':
// process $select_values
$select_values = array();
foreach ($option['choices'] as $k => $v) {
// explode the connective
$pieces = explode("|", $v);
$select_values[] = $pieces[1];
}
// check to see if selected value is in our approved array of values!
$valid_input[$option['id']] = (in_array( $input[$option['id']], $select_values) ? $input[$option['id']] : '' );
break;
現在、複数選択フィールドから複数の値を選択すると、WPは1つの値(通常は最初のアルファベット順の値)のみを保存します。配列に複数の値を保存する必要があります。
[]
末尾に追加すると[$id]
役立つかもしれないと思いましたが、違います。
$id
と同じですが、"id" => BUDDHA_SHORTNAME . "_meta_email"
別の関数で定義されています。そしてprint_r
、なぜ私がそこにいたのか本当にわかりません、あまり意味がありませんか?
機能させましたか?属性
—
Radek
[]
の最後にあるアドインが役に立ちname
ました。名前属性を再確認してください。保存されている設定をmySQL dbで確認しますか?
あなたの質問とは関係ありません:あなたは混乱
—
Pat J
esc_html()
しesc_html__()
ていて、表示コードが間違っていると思います。前者は引数を1つだけ受け入れます。後者は2番目の引数、テキストドメインを受け入れます。
$id
?そして、なぜprint_r
割り当てコンテキストで使用していますか?