প্লাগ-ইন বিকল্পগুলির পৃষ্ঠার জন্য সেটিংস এপিআই দিয়ে আমি কীভাবে একাধিক নির্বাচন অ্যারে সংরক্ষণ করতে পারি?


10

আমি ভাবছি এটি আমার পিএইচপিগুলির সাথে আমার সেটিংস এপিআই ব্যবহারের চেয়ে আরও বেশি সমস্যা হতে পারে তবে আমি মাল্টি-সিলেক্ট বাক্সের জন্য ডেটার অ্যারের সংরক্ষণ করতে ওয়ার্ডপ্রেস পেতে পারি না।

মাল্টি-সিলেক্ট বক্সটি একটি কাস্টম মেটা ক্ষেত্রের সাথে সামঞ্জস্য করে এবং নির্বাচন বিকল্পগুলি হ'ল কাস্টম পোস্ট প্রকার যা সেই মেটা ক্ষেত্রটি প্রদর্শন করবে।

এখানে প্রদর্শন কোডটি রয়েছে:

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; 

বর্তমানে, আমি একাধিক-নির্বাচন ক্ষেত্র থেকে একাধিক মান নির্বাচন করি, ডব্লিউপি কেবলমাত্র একটি মান (সাধারণত প্রথম বর্ণানুক্রমিক মান) সংরক্ষণ করবে। অ্যারেতে একাধিক মান সংরক্ষণ করার জন্য আমার এটি দরকার।

আমি ভেবেছিলাম []শেষ পর্যন্ত যোগ [$id]সাহায্য করতে পারে, কিন্তু না।


কি $id? এবং কেন print_rএকটি নির্ধারিত প্রসঙ্গে ব্যবহার করছেন ?
TheDeadMedic

$idএকই হিসাবে "id" => BUDDHA_SHORTNAME . "_meta_email"এটি অন্য ফাংশনে সংজ্ঞায়িত করা হয়। এবং আমি সত্যিই জানি না কেন আমি print_rসেখানে ছিলাম, তা বোঝায় না?
স্পার্টাকাস

আপনি কি এটি কাজ করেছেন? বৈশিষ্ট্যের []শেষে অ্যাডিন nameআমাকে সাহায্য করেছিল। নামের গুণটি ডাবল চেক করুন। আপনি কি মাইএসকিউএল ডিবি পরীক্ষা করে থাকেন যে কোন সেটিংস সংরক্ষণ করা হয়?
রাদেক

আপনার প্রশ্নের সাথে সম্পর্কিত নয়: আমি মনে করি আপনি বিভ্রান্ত হয়ে পড়েছেন esc_html()এবং esc_html__()আপনার ডিসপ্লে কোডে। প্রাক্তন কেবল একটি যুক্তি গ্রহণ করে; পরেরটি দ্বিতীয় যুক্তি, পাঠ্য ডোমেন গ্রহণ করে।
প্যাট জে

উত্তর:


1

সুতরাং, দেখে মনে হচ্ছে এখানে দুটি জিনিস চলছে:

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

@ রাাদেক দ্বারা উল্লিখিত হিসাবে, আপনি নির্বাচিত বাক্সটির নামটি ব্যবহার করে একটি অ্যারে তৈরি করতে পারতেন[] - উদাহরণস্বরূপ 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']]অ্যারের মান হিসাবে আচরণ করবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.