আমি কীভাবে ওয়ার্ডপ্রেস ডিফল্ট উইজেট আউটপুট পরিবর্তন করতে পারি?


17

আমি কেবল সিএসএস দিয়ে ডিফল্ট উইজেট স্টাইল করতে চাই না। আমি আমার নিজস্ব HTML কাঠামোর সাথে ডিফল্ট 'বিভাগ' উইজেট সামগ্রী প্রদর্শন করতে চাই।

এটি করার জন্য কোনও ফিল্টার বা হুক পাওয়া যায়?


2
আপনার নিজের উইজেটটি লিখুন যা আপনি যা চান তা করে। বিভাগগুলির উইজেটের কোড অনুলিপি করে শুরু করুন do
মার্ক কাপলুন

ধন্যবাদ, আমি সাধারণত আমার উইজেট পরিবর্তন করতে এই কৌশলটি অনুসরণ করি। এটি আমার কাছে সহজ পদ্ধতি বলে মনে হচ্ছে।
এহ জুয়েল

উত্তর:


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/references/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
এবং বিকল্প হিসাবে আমি প্রস্তাব না দেওয়ার কারণটি হ'ল আপনি কোনও সময় আসল আচরণটি পেতে পারেন এবং আপনার সমাধানের সাথে আপনি কেবল এটি পাওয়ার ক্ষমতা হারাবেন।
মার্ক কাপলুন

হ্যাঁ, আপনি যদি ডিফল্ট উইজেটটি যেমন চান তেমন চান তবে সম্পূর্ণ নতুন উইজেটটি নিবন্ধভুক্ত করা ভাল। কোডেক্স.ওয়ার্ডপ্রেস.আর.
বরিস

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