2012-09-22 6 views
5

मैं अपनी प्लगइन के लिए एक कस्टम विजेट बनाने और the codex का पालन करने की कोशिश कर रहा हूं।क्या get_field_id() वर्डप्रेस विजेट एपीआई में दर्ज फॉर्म के लिए आवश्यक है?

यह मेरे पास अब तक है। यह काम कर रहा है और बचाया विकल्प मूल्य बचाता है और प्रदर्शित करता है।

  1. क्या के लिए है:

    <?php 
    /** 
    * Plugin Name: Sample Widget 
    */ 
    
    $colors = array('red', 'blue', 'yellow'); 
    update_option('sample_widget', $colors); 
    
    add_action('widgets_init', create_function('', 'register_widget("Sample_Widget");')); 
    class Sample_Widget extends WP_Widget { 
    
        public function __construct() { 
         parent::__construct(
          'foo_widget', 
          'Sample Widget', 
          array('description' => __('This is a description of the sample widget', 'text_domain'),) // Args 
         ); 
        } 
    
        public function widget($args, $instance) { 
         extract($args); 
         $title = apply_filters('widget_title', $instance['title']); 
         $color = apply_filters('widget_title', $instance['color']); 
    
         echo $before_widget; 
         if (! empty($title)) 
          echo $before_title . $title . $after_title; 
         echo 'the selected color is ' . $color . '<br />'; 
         echo $after_widget; 
        } 
    
        public function update($new_instance, $old_instance) { 
         $instance = array(); 
         $instance['title'] = strip_tags($new_instance['title']); 
         $instance['color'] = $new_instance['color']; 
         return $instance; 
        } 
    
        public function form($instance) { 
         if (isset($instance[ 'title' ])) { 
          $title = $instance[ 'title' ]; 
         } 
         else { 
          $title = __('New title', 'text_domain'); 
         } 
         if (isset($instance[ 'color' ])) { 
          $selected_color = $instance[ 'color' ]; 
         } 
         $colors = get_option('sample_widget'); 
         ?> 
         <p> 
          <label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label> 
          <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /> 
         </p> 
         <p> 
          <select name="<?php echo $this->get_field_name('color'); ?>" id="<?php echo $this->get_field_id('color'); ?>"> 
           <option value="">Select...</option> 
           <?php foreach($colors as $color) echo '<option value="' . esc_attr($color) . '" ' . ($color == $selected_color ? 'selected="Selected"' : '') . '>'. $color .'</option>'; ?> 
          </select> 
         </p> 
         <?php 
        } 
    } 
    

    मैं दो प्रश्न हैं? मैंने लाइन के इस भाग को हटा दिया और ऐसा लगता है कि यह ठीक काम करता है। मैंने इसे कोडेक्स वर्किंग कोड की प्रतिलिपि बनाने के लिए रखा है।

  2. कन्स्ट्रक्टर में, parent::__construct() में पहला पैरामीटर बेस आईडी है। क्या यह कोई स्ट्रिंग मान हो सकता है? मैंने इसे foo_widget से कुछ और में बदल दिया और ऐसा लगता है कि यह काम करता है।

आपकी जानकारी के लिए धन्यवाद।

उत्तर

3
  1. इस विकल्प के लिए एक अद्वितीय 'आईडी' मान उत्पन्न करना है। आमतौर पर यह वस्तु जेएस के माध्यम से छेड़छाड़ की जा सकती है।

  2. id_basefoo_widget इस प्रकार के सभी विजेट्स के लिए एक रूट आईडी है। विजेट के लिए यह एक वैकल्पिक बेस आईडी है, निचले मामले में, और यदि खाली छोड़ दिया गया है तो विजेट के वर्ग नाम का एक हिस्सा उपयोग किया जाएगा। यह अद्वितीय होना चाहिए। इस व्यक्ति विजेट का आईडी नंबर अर्थात foo_widget-001

होप के साथ से जोड़ दिए जाएंगे इस मदद करता है!

+0

# 1 के संबंध में, ऐसा लगता है जैसे मैं इसे बेहतर छोड़ दूंगा। आपके सहयोग के लिए धन्यवाद। # 2 के लिए, मैंने बेस आईडी को 'foo_widget' से' something_else' जैसे किसी अन्य चीज़ में बदल दिया और मैंने 'create_function (' ',' register_widget ("नमूना_विजेट") में 'स्ट्रिंग मान' नमूना_विड्जेट 'का उपयोग किया;' 'और यह अभी भी काम करता है। तो ऐसा लगता है कि वे अलग-अलग मूल्य हो सकते हैं। क्या मैं कुछ भूल रहा हूँ? – Teno

+0

मुझे इस विषय के बारे में क्या पता है और कुछ सीमित डेटाबेस ब्राउज़िंग के आधार पर ... मुझे आश्चर्य है कि 'बेस आईडी' का यह दूसरा उदाहरण विजेट जानकारी संग्रहीत करने के लिए डेटाबेस तालिका बनाने के लिए वर्डप्रेस का उपयोग करता है। यदि आप 'WP_Options' तालिका में जाते हैं तो आपको 'widget_categories' या 'widget_text' जैसी चीज़ें दिखाई देगी। मुझे लगता है कि आपके सक्रिय विजेट्स डेटाबेस में 'widget_Sample_Widget "के रूप में दिखाई देंगे? बस एक विचार – NerdNextDoor

+1

मैंने पाया कि' register_widget() 'के लिए पैरामीटर मान विस्तारित कस्टम क्लास नाम है। Http://codex.wordpress.org/Function_Reference/register_widget तो यह बेस आईडी से एक अलग बात होनी चाहिए। जब ​​मैंने 'wp_options' तालिका को ब्राउज़ किया, तो वास्तव में मुझे' widget_someting_else' नामक तत्व मिला, यह 'widget_Sample_Widget' नहीं था। इसलिए इस बिंदु पर, मुझे लगता है अधिक निश्चित है कि बेस आईडी विकल्प तालिका के लिए वर्ण की लंबाई सीमा के भीतर कोई मनमाना स्ट्रिंग हो सकती है। जहां तक ​​मुझे याद है कि यह 45 वर्ण या उससे भी अधिक था। – Teno

संबंधित मुद्दे