2012-09-10 9 views
7

वर्डप्रेस में, मेरा लक्ष्य साइडबार में रखे गए प्रत्येक विजेट को कस्टम क्लास देने में सक्षम होना है। पसंदीदा रूप से मैं इस वर्ग को प्रत्येक विजेट की विजेट सेटिंग्स में जोड़ना चाहता हूं। तीसरे पक्ष के विजेट भी।वर्डप्रेस: ​​सभी विजेट सेटिंग्स में कॉन्फ़िगरेशन विकल्प जोड़ें

मैं, classname बदलने की सोच रहा था क्योंकि classname पहले से ही register_sidebar समारोह (% 2 $ s) को पारित कर दिया है:

<?php 
register_sidebar(array('before_widget' => '<aside id="%1$s" class="widget %2$s blue">')); 
?> 

बेशक मैं WP कोर कोड या 3 पार्टी परिवर्तन नहीं होना चाहिए प्लगइन्स। इसका मतलब है कि मुझे एक प्लगइन लिखना होगा जो विजेट कॉन्फ़िगरेशन प्रक्रिया में हुक करेगा।

मैं पहले से ही पता चला कि यह 'in_widget_form' कार्रवाई में hooking द्वारा, सभी विजेट फ़ॉर्म संशोधित किया जा सकता है:

<?php 
add_action('in_widget_form', 'teaserWidgetAddToForm'); 

function teaserWidgetAddToForm($widget_instance) { 
    ?> 
    <label for="<?php echo $widget_instance->get_field_id('teaser-classname'); ?>">Custom classname(s):</label> 
    <input type="text" id="<?php echo $widget_instance->get_field_id('teaser-classname'); ?>" name="<?php echo $widget_instance->get_field_name('teaser-classname'); ?>"> 
    <?php 
} 
?> 

इस डेटा विजेट सुपर वर्ग द्वारा बचाया जाना चाहिए, लेकिन आप इस डेटा को प्राप्त कैसे (इसलिए जब विजेट सेटिंग्स को खोलना बाद में दिखाता है कि आपने पहले क्या भरा था)

और, यह सहेजा गया डेटा विजेट उदाहरण में रखा जाना चाहिए- यह कैसे किया जाता है? मैं की तरह कुछ का उपयोग करके लगता है:

<?php 
$wp_registered_widgets[<widget_id>]['callback'][0]['widget_options']['classname'] = <chosen_class>; 
?> 
तो मूल रूप से

2 प्रश्न हैं:

  • मैं यदि हां, तो इस समस्या (व्यक्तिगत विजेट का स्टाइल)
  • संबोधित करने के लिए उचित तरीके से उपयोग कर रहा हूँ क्या मैं वर्डप्रेस या तृतीय पक्ष प्लगइन स्रोत कोड को संशोधित किए बिना अतिरिक्त सेटिंग्स को सहेजने और पुनर्प्राप्त करने के लिए विजेट उदाहरण को संशोधित कर सकता हूं।

उत्तर

8
  1. डिफ़ॉल्ट रूप से प्रत्येक विजेट उदाहरण एक अद्वितीय ID जो इसे शैली के लिए इस्तेमाल किया जा सकता है।

  2. in_widget_form कार्रवाई में जोड़े गए फ़ील्ड से डेटा को सहेजने के लिए, आपको widget_update_callback फ़िल्टर भी होना चाहिए।

    function my_widget_update_callback($instance, $new_instance) { 
        $instance['my_classnames'] = $new_instance['my_classnames']; 
        return $instance; 
    } 
    

    प्रपत्र आप पहले उदाहरण सेटिंग प्राप्त करने की आवश्यकता होगी में सहेजा मूल्य प्रदर्शित करने के लिए।

    function my_in_widget_form($instance) { 
        $settings = $instance->get_settings(); 
        … 
    

    अंत में, मुझे लगता है कि सबसे आसान तरीका है अपने कस्टम वर्गों को जोड़ने के लिए एक widget_display_callback फिल्टर, जो पहले एक विजेट प्रदर्शित किया जाता है चलाता है। आपको स्वयं विजेट को प्रदर्शित करना होगा क्योंकि आप केवल इस फ़िल्टर से एक उदाहरण वापस कर सकते हैं, और उदाहरण विजेट सीएसएस कक्षाओं को नियंत्रित नहीं करते हैं।

    function my_widget_display_callback($instance, $widget, $args) { 
        if (!isset($instance['my_classnames'])) { 
         return $instance; 
        } 
    
        $widget_classname = $widget->widget_options['classname']; 
        $my_classnames = $instance['my_classnames']; 
    
        $args['before_widget'] = str_replace($widget_classname, "{$widget_classname} {$my_classnames}", $args['before_widget']); 
    
        $widget->widget($args, $instance); 
    
        return false; 
    } 
    

विगेट्स से संबंधित उपलब्ध हुक के बारे में अधिक जानकारी के लिए इस लेख देखें: http://shibashake.com/wordpress-theme/wordpress-widget-system

+0

शानदार! इस बीच में मैं नई सेटिंग्स को सहेजने में सक्षम था और मैं "widget_display_callback" हुक का उपयोग करने के लिए आया था। लेकिन यह एहसास नहीं हुआ कि आप झूठी वापसी कर सकते हैं और $ विजेट-> विजेट() स्वयं को कॉल कर सकते हैं। बहुत धन्यवाद! – publicJorn

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