मैं प्लग-इन विकल्प पृष्ठ के लिए सेटिंग्स एपीआई के साथ एक से अधिक चयन सरणी कैसे बचा सकता हूं?


10

मैं सोच रहा हूं कि सेटिंग्स एपीआई के मेरे उपयोग के बजाय मेरे 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 केवल एक मान (आमतौर पर पहला वर्णमाला मान) बचाएगा। मुझे इसे सरणी में एक से अधिक मान सहेजने की आवश्यकता है।

मैंने सोचा []कि अंत में [$id]मदद मिल सकती है, लेकिन नहीं।


क्या है $id? और print_rएक असाइन संदर्भ में क्यों उपयोग कर रहे हैं ?
TheDeadMedic

$idजैसा है "id" => BUDDHA_SHORTNAME . "_meta_email", इसे किसी अन्य फ़ंक्शन में परिभाषित किया गया है। और मैं वास्तव में नहीं जानता कि मैंने print_rवहाँ क्यों किया , इसका कोई मतलब नहीं है?
स्पार्टाकस

क्या आपने इसे काम किया? विशेषता []के अंत में Addin nameने मेरी मदद की। नाम विशेषता को दोबारा जांचें। क्या आप mySQL db की जाँच करते हैं कि कौन सी सेटिंग्स संग्रहीत हैं?
Radek

आपके प्रश्न से असंबंधित: मुझे लगता है कि आप उलझन में हैं esc_html()और esc_html__()आपके प्रदर्शन कोड में हैं। पूर्व केवल एक तर्क को स्वीकार करता है; बाद वाला दूसरा तर्क, पाठ डोमेन स्वीकार करता है।
Pat J

जवाबों:


1

इसलिए, ऐसा लगता है कि दो चीजें यहां चल रही हैं:

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

जैसा कि @Radek द्वारा उल्लेख किया गया है, आप चुनिंदा बॉक्स का नाम बनाकर एक सरणी बना सकते हैं []- उदाहरण के लिए name="my_option_name[]"- इसके परिणामस्वरूप $_POST['my_option_name']चयनित विकल्पों की एक सरणी दर्ज की जाएगी, जिसे आप तब स्टोर कर सकते हैं।

आपके कोड पर एक नज़दीकी नज़र ने मुझे रोक दिया:

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

आप केवल कभी भी एक मान बचा रहे हैं $valid_input[$option['id']]- क्या आपका switchकथन स्वयं एक लूप में है? यदि हां, तो अंतिम पंक्ति को इसमें बदलने का प्रयास करें:

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

[]असाइनमेंट ऑपरेटर से पहले ध्यान दें । जब आप सहेजते हैं $valid_input, तो इसे $valid_input[$option['id']]एक सरणी के रूप में मान लेना चाहिए ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.