Bagaimana saya bisa menyimpan beberapa array pilihan dengan API pengaturan untuk halaman opsi plug-in?


10

Saya pikir ini mungkin lebih merupakan masalah dengan PHP saya daripada penggunaan saya pengaturan API, tapi sepertinya saya tidak bisa mendapatkan Wordpress untuk menyimpan array data untuk kotak multi-pilih.

Kotak multi-pilih berhubungan dengan bidang meta khusus, dan opsi pilih adalah tipe posting khusus yang akan menampilkan bidang meta itu.

Berikut adalah kode tampilan:

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 didefinisikan di sini sebagai 'pilihan':

$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" )  
);

Dan kode validasi:

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; 

Saat ini, jika saya memilih lebih dari satu nilai dari bidang multi-pilih, WP hanya akan menyimpan satu nilai (biasanya nilai alfabet pertama). Saya membutuhkannya untuk menyimpan lebih dari satu nilai dalam array.

Saya pikir menambahkan []pada akhir [$id]mungkin membantu, tetapi tidak.


Apa $id? Dan mengapa menggunakan print_rdalam konteks penetapan?
TheDeadMedic

$idsama dengan "id" => BUDDHA_SHORTNAME . "_meta_email", itu didefinisikan dalam fungsi lain. Dan saya tidak benar-benar tahu mengapa saya melakukannya di print_rsana, tidak masuk akal kan?
Spartacus

Apakah Anda membuatnya bekerja? Addin []di akhir nameatribut membantu saya. Periksa atribut nama. Apakah Anda memeriksa pengaturan mySQL db apa yang disimpan?
Radek

Tidak terkait dengan pertanyaan Anda: Saya pikir Anda bingung esc_html()dan esc_html__()kode tampilan Anda. Yang pertama hanya menerima satu argumen; yang terakhir menerima argumen kedua, domain teks.
Pat J

Jawaban:


1

Jadi, sepertinya ada dua hal yang terjadi di sini:

echo "<select id='$id' style='width:15em;height:10em;' class='select$field_class' name='" . $buddha_option_name . "[$id]' multiple>";  

Seperti dicatat oleh @Radek, Anda bisa membuat nama kotak pilih menjadi array dengan menggunakan []- misalnya name="my_option_name[]"- ini akan menghasilkan arsip yang diajukan $_POST['my_option_name']sebagai array dari opsi yang dipilih yang kemudian dapat Anda simpan.

Melihat lebih dekat pada kode Anda membuat saya bingung:

$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']] : '' ); 

Anda hanya menyimpan satu nilai saja $valid_input[$option['id']]- apakah switchpernyataan Anda dalam satu lingkaran itu sendiri? Jika demikian, coba ubah baris terakhir ke ini:

$valid_input[$option['id']][] = (in_array( $input[$option['id']], $select_values) ? $input[$option['id']] : '' );

Catat []sebelum operator penugasan. Saat Anda menyimpan $valid_input, itu harus memperlakukan nilai $valid_input[$option['id']]sebagai array.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.