Bir eklenti seçenekleri sayfası için ayarlar API'sı ile birden fazla seçme dizisini nasıl kaydedebilirim?


10

Bu benim ayarları API benim kullanımı yerine benim PHP ile ilgili bir sorun olabilir düşünüyorum, ama çok seçim kutusu için bir dizi veri kaydetmek için Wordpress alamıyorum görünmüyor.

Çoklu seçim kutusu özel bir meta alana karşılık gelir ve seçim seçenekleri, bu meta alanını görüntüleyecek özel yayın türleridir.

Ekran kodu:

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 burada "seçenekler" olarak tanımlanır:

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

Ve doğrulama kodu:

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; 

Şu anda, çoklu seçim alanından birden fazla değer seçersem, WP yalnızca bir değer kaydeder (genellikle ilk alfabetik değer). Dizide birden fazla değer kaydetmek gerekiyor.

[]Sonuna eklemek [$id]yardımcı olabilir diye düşündüm , ama hayır.


Nedir $id? Ve neden print_ratama bağlamında kullanıyorsunuz?
TheDeadMedic

$idaynıdır "id" => BUDDHA_SHORTNAME . "_meta_email", başka bir işlevde tanımladı. Ve neden print_rorada yaptığımı gerçekten bilmiyorum , pek mantıklı değil mi?
Spartacus

İşe yaradı mı? Öznitelik []sonunda Addin namebana yardımcı oldu. Name niteliğini iki kez kontrol edin. MySQL db hangi ayarların saklandığını kontrol ediyor musunuz?
Radek

Sorunuzla alakasız: Sanırım kafanız karıştı esc_html()ve esc_html__()ekran kodunuzda. İlki sadece bir argümanı kabul eder; ikincisi ikinci bir argümanı, metin alanını kabul eder.
Pat J

Yanıtlar:


1

Yani, burada iki şey oluyor gibi görünüyor:

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

@Radek tarafından belirtildiği gibi, olabilir kullanarak seçme kutusunun adını bir dizi yaptık []mesela - name="my_option_name[]"- Bu dosyalanmış sonuçlanacaktır $_POST['my_option_name']sonra saklayabilir seçili seçenekler dizisi olma.

Kodunuza daha yakından bakmak beni çok şaşırttı:

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

Şimdiye kadar yalnızca bir değer kaydedersiniz $valid_input[$option['id']]- switchifadeniz bir döngü içinde mi? Öyleyse, son satırı şu şekilde değiştirmeyi deneyin:

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

[]Atama işleminden önce olanı not edin . Kaydettiğinizde $valid_input, değeri $valid_input[$option['id']]bir dizi olarak ele alınmalıdır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.