मैं वर्डप्रेस डिफ़ॉल्ट विजेट आउटपुट को कैसे संशोधित कर सकता हूं?


17

मैं केवल सीएसएस के साथ डिफ़ॉल्ट विजेट शैली नहीं करना चाहता। मैं अपनी स्वयं की HTML संरचना के साथ डिफ़ॉल्ट 'श्रेणियां' विजेट सामग्री प्रदर्शित करना चाहता हूं।

क्या ऐसा करने के लिए कोई फ़िल्टर या हुक उपलब्ध है?


2
अपना खुद का विजेट लिखें जो आपको चाहिए। श्रेणियों विजेट के कोड की नकल करके शुरू करें और संशोधन करें।
मार्क कप्लून

धन्यवाद, मैं आमतौर पर अपने विजेट संशोधनों को करने के लिए इस ट्रिक का पालन करता हूं। यह आसान तरीका मुझे लगता है।
एह ज्वैल

जवाबों:


13

मार्क के जवाब पर विस्तार करने के लिए, डिफ़ॉल्ट वर्डप्रेस विगेट्स (शायद को छोड़कर widget_text) में फिल्टर के तरीके में बहुत अधिक (आम तौर पर) उपलब्ध नहीं है ।

लेकिन अपने स्वयं के कस्टम विजेट को जोड़ना आसान है - इसे अपने में रखें functions.php:

require_once("my_widget.php");
add_action("widgets_init", "my_custom_widgets_init");

function my_custom_widgets_init(){
  register_widget("My_Custom_Widget_Class");
}

तो फिर तुम बस कॉपी मौजूदा श्रेणियों से विजेट करना चाहते wp-includes/widgets/class-wp-widget-categories.phpकरने के लिए my_widget.phpअपने विषय में, और करने के लिए कॉल में प्रयोग किया जाता है कि के रूप में एक ही नाम के लिए वर्ग के नाम बदलने के register_widget()ऊपर।

फिर आपको जो भी बदलाव पसंद है उसे करें! मैं आपको शीर्षक बदलने का सुझाव देता हूं ताकि आप इसे डिफ़ॉल्ट श्रेणियाँ विजेट से अलग कर सकें।


10

आप उन्हें विस्तारित करके डिफ़ॉल्ट वर्डप्रेस विजेट को ओवरराइड कर सकते हैं। डिफ़ॉल्ट श्रेणियाँ विजेट के लिए कोड निम्न लिंक पर पाया जा सकता है: https://developer.wordpress.org/reference/classes/wp_widget_categories/widget/

और नीचे एक उदाहरण कोड है कि आप विजेट के आउटपुट को कैसे ओवरराइड कर सकते हैं।

Class My_Categories_Widget extends WP_Widget_Categories {
    function widget( $args, $instance ) {
        // your code here for overriding the output of the widget
    }
}

function my_categories_widget_register() {
    unregister_widget( 'WP_Widget_Categories' );
    register_widget( 'My_Categories_Widget' );
}
add_action( 'widgets_init', 'my_categories_widget_register' );

1
और कारण यह है कि मैंने विकल्प के रूप में प्रस्ताव नहीं दिया है कि आप किसी बिंदु पर मूल व्यवहार चाहते हैं, और आपके समाधान के साथ आप इसे प्राप्त करने की क्षमता खो देते हैं।
मार्क कप्लून

हां, यदि आप डिफ़ॉल्ट विजेट रखना चाहते हैं, तो यह पूरी तरह से नया विजेट पंजीकृत करने के लिए बेहतर है। codex.wordpress.org/Function_Reference/register_widget
बोरिस

8

आपको जो करने की आवश्यकता है, उसे करने के लिए आपको एक नया विजेट बनाने की आवश्यकता नहीं है। जैसा कि मैंने आपके प्रश्न को पढ़ा है, आप बस यह बदलने में रुचि रखते हैं कि श्रेणियों को सामने के छोर पर कैसे प्रदर्शित किया जाता है। दो कार्य हैं जो सामने के छोर पर श्रेणियों को प्रदर्शित करते हैं

  • wp_list_categories() जो सूची में श्रेणियों को प्रदर्शित करता है

  • wp_dropdown_categories() जो एक ड्रॉपडाउन सूची में श्रेणियां प्रदर्शित करता है

यह सब इस बात पर निर्भर करता है कि बैकएंड में किस विकल्प का चयन किया गया था

अब, इन दो कार्यों में से प्रत्येक में एक विजेट विशिष्ट फ़िल्टर ( widget_categories_argsऔर widget_categories_dropdown_argsक्रमशः ) है जिसका उपयोग आप उन तर्कों को बदलने के लिए कर सकते हैं जिन्हें इन कार्यों के लिए पारित किया जाना चाहिए। आप सूची / ड्रॉपडाउन के व्यवहार को बदलने के लिए इसका उपयोग कर सकते हैं। हालाँकि, यह पर्याप्त नहीं हो सकता है कि आप क्या चाहते हैं।

वैकल्पिक रूप से, प्रत्येक फ़ंक्शन के पास अपने फ़िल्टर को पूरी तरह से बदलने का तरीका है कि इन कार्यों को अपने आउटपुट को कैसे प्रदर्शित करना चाहिए।

वे क्रमशः हैं

हम widget_titleविशेष रूप से विजेट को लक्षित करने के लिए फ़िल्टर का उपयोग कर सकते हैं और इन कार्यों के अन्य उदाहरण नहीं।

संक्षेप में, आप निम्नलिखित प्रयास कर सकते हैं: (कुल मिलाकर )

add_filter( 'widget_title', function( $title, $instance, $id_base )
{
    // Target the categories base
    if( 'categories' === $id_base ) // Just make sure the base is correct, I'm not sure here
        add_filter( 'wp_list_categories', 'wpse_229772_categories', 11, 2 );
        //add_filter( 'wp_dropdown_cats', 'wpse_229772_categories', 11, 2 );
    return $title;
}, 10, 3 );

function wpse_229772_categories( $output, $args )
{
    // Only run the filter once
    remove_filter( current_filter(), __FUNCTION__ );

    // Get all the categories
    $categories = get_categories( $args );

    $output = '';
    // Just an example of custom html
    $output .= '<div class="some class">';
    foreach ( $categories as $category ) {
        // Just an example of custom html
        $output .= '<div class="' . echo $category->term_id . '">';
        // You can add any other info here, like a link to the category
        $output .= $category->name;
        // etc ect, you get the drift
        $output .= '</div>';
    }
    $output .= '</div>';

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