बहु-आयामी सरणी में अद्यतन विकल्प संग्रहीत


15

मेरे पास wp_optionsवर्तमान में एक बहु-आयामी सरणी ( profile_element_order) के रूप में संग्रहीत तालिका में डेटा है :

a:12:{s:17:"img_base64_enable";s:1:"1";s:25:"moulding_combination_page";s:0:"";s:24:"moulding_collection_page";s:0:"";s:25:"idea_gallery_thumb_height";s:3:"200";s:24:"idea_gallery_thumb_width";s:3:"200";s:23:"collection_thumb_height";s:3:"200";s:22:"collection_thumb_width";s:3:"200";s:20:"profile_item_columns";s:1:"4";s:17:"idea_item_columns";s:1:"2";s:24:"collections_item_columns";s:1:"2";s:25:"combinations_item_columns";s:1:"4";s:21:"profile_element_order";a:5:{i:0;s:8:"Option 1";i:1;s:8:"Option 2";i:2;s:8:"Option 3";i:3;s:8:"Option 4";i:4;s:8:"Option 5";}}

मैं जो पूरा करने की कोशिश कर रहा हूं वह profile_element_orderविकल्प (उन विकल्पों के भीतर) को अपडेट करना है । यहां बताया गया है कि अब तक सब कुछ कैसा है:

function psort_save_order() {

    global $mouldings_options;

    $list = $mouldings_options['profile_element_order'];
    $new_order = $_POST['list_items'];
    $new_list = array();

    // update order
    foreach($new_order as $v) {
        if(isset($list[$v])) {
            $new_list[$v] = $list[$v];
        }
    }

    // save the new order
    update_option('profile_element_order', $new_list);

    die();
}
add_action('wp_ajax_psort_update_order', 'psort_save_order');

डेटा सही ढंग से DB तालिका में पोस्ट कर रहा है (जैसा कि मैं अपने कुछ असफल प्रयासों को नए विकल्प प्रविष्टियों के रूप में देख सकता हूं, जैसे mouldings_settings->profile_element_order) - मुझे update_option()बस उस विशिष्ट विकल्प के लिए सिंटैक्स का पता लगाने में मुश्किल समय आ रहा है। मैंने ऐसी चीज़ों की कोशिश की है (मन में धारण करना `mouldings_settings वास्तविक विकल्प नाम है):

mouldings_settings['profile_element_order']
$mouldings_options['profile_element_order']
profile_element_order

लेकिन फिलहाल कोई पासा नहीं। किसी भी प्वाइंटर की अत्यधिक सराहना की जाएगी! धन्यवाद!

अपडेट यह वही है जो मेरे पास है - अजाक्स कार्रवाई ठीक सहेजती है, लेकिन जब मैं प्लगइन विकल्पों को सहेजता हूं, तो यह डेटाबेस में विकल्पों को डुप्लिकेट करता है और पहले की तरह ही त्रुटि फेंकता है:

a:17:{s:17:"img_base64_enable";s:1:"1";s:25:"moulding_combination_page";s:0:"";s:24:"moulding_collection_page";s:0:"";s:25:"idea_gallery_thumb_height";s:3:"200";s:24:"idea_gallery_thumb_width";s:3:"200";s:23:"collection_thumb_height";s:3:"200";s:22:"collection_thumb_width";s:3:"200";s:20:"profile_item_columns";s:1:"4";s:17:"idea_item_columns";s:1:"2";s:24:"collections_item_columns";s:1:"2";s:25:"combinations_item_columns";s:1:"4";s:21:"profile_element_order";a:5:{i:4;s:8:"Option 5";i:0;s:8:"Option 1";i:1;s:8:"Option 2";i:3;s:8:"Option 4";i:2;s:8:"Option 3";}i:0;s:8:"Option 5";i:1;s:8:"Option 1";i:2;s:8:"Option 2";i:3;s:8:"Option 4";i:4;s:8:"Option 3";}

समारोह:

function psort_save_order() {

    global $mouldings_options;

    $list = $mouldings_options['profile_element_order'];
    $new_order = $_POST['list_items'];
    $new_list = array();

    // update order
    foreach($new_order as $v) {
        if(isset($list[$v])) {
            $new_list[$v] = $list[$v];
        }
    }

    $mouldings_options['profile_element_order'] = $new_list;
    $mouldings_options = array_merge($mouldings_options,$mouldings_options['profile_element_order']);

    // save the new order
    update_option('mouldings_settings', $mouldings_options);

    die();
}
add_action('wp_ajax_psort_update_order', 'psort_save_order');

जवाबों:


36

जहाँ तक वर्डप्रेस का सवाल है - आपका बहुआयामी सरणी एक विकल्प है।

पूरे सरणी को पुनः प्राप्त करने के लिए बहुआयामी सरणी के बस भाग को अपडेट करने के लिए, उसके अनुसार इसे बदल दें और फिर पूरे सरणी को अपडेट करें।

मान लीजिए कि आपका बहुआयामी सरणी इस प्रकार है:

my_options = array(
  'option_a'=>'value_a',
  'option_b'=>'value_b',
  'inner_array'=>array(
       'foo' => 'bar',
       'hello' => 'world',
   ),
  'option_c'=>'value_c'
)

और मान लें कि आप 'हैलो' विकल्प का मान 'दुनिया' से 'चंद्रमा' तक अपडेट करना चाहते हैं

//Get entire array
$my_options = get_option('my_options');

//Alter the options array appropriately
$my_options['inner_array']['hello'] = 'moon';

//Update entire array
update_option('my_options', $my_options);

1
हाय स्टीवन - मैंने अपने मूल प्रश्न को अपडेट कर दिया है कि मेरे पास अब क्या है और यह अजाक्स के साथ काम करता है (जब मैं रिफ्रेश होने पर स्थिति बचाता है) एक बार जब मैं प्लगइन सेटिंग्स को सहेजता हूं और ताज़ा करता हूं, तो डीबी तालिका में विकल्प थोड़ा गड़बड़ हो जाता है ( डुप्लिकेट दिखता है) जो कि एक त्रुटि है - क्या मैं अभी भी उस गलत तरीके से आ रहा हूं? धन्यवाद।
Zach

क्या आप कह रहे हैं कि पंक्ति अपने आप नकल जाती है? या आपके विकल्प पंक्ति के अंदर डुप्लिकेट दिखाई देते हैं? विकल्प को हटाने और फिर से प्रयास करने का प्रयास करें - यह हो सकता है कि आप केवल अपने पिछले प्रयासों से डुप्लिकेट रख रहे हैं।
स्टीफन हैरिस

हाय स्टीफन - इस मुद्दे को पुन: पेश करने के लिए मेरे कदमों का एक पेस्टबिन बनाया: pastebin.com/YHg1i7HR धन्यवाद!
जाच

अपने को हटाने का प्रयास करें array_merge। यही नकल का कारण बन रहा है। आप एक सरणी को उप-सरणी के साथ विलय कर रहे हैं (उप-सरणी को डुप्लिकेट करने के लिए)।
स्टीफन हैरिस

हाय स्टीफन - मुझे लगता है कि मैं सिर्फ इस बारे में अनिश्चित हूं कि उसे कैसे लिखा जाए - मेरे पास $mouldings_options['profile_element_order'] = $new_list;update_option('mouldings_settings', mouldings_options);अभी वही है जिसमें दोहराव नहीं है (और डीबी को सही तरीके से लिखता है जो अच्छा है) - लेकिन पेज-सेव (प्लगइन सेटिंग्स सेव) पर प्लगइन सेटिंग को अभी भी डेटाबेस से हटा दिया जाता है (जैसा कि उस पास्टबिन का अंतिम भाग करता है)।
मच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.