it-swarm.asia

كيف يمكن تعديل عنصر واجهة تعامل المستخدم الافتراضي الخاص بـ WordPress؟

لا أرغب في تصميم القطعة الافتراضية باستخدام CSS فقط. أرغب في عرض محتوى عنصر واجهة المستخدم "الفئات" الافتراضي مع بنية HTML الخاصة بي.

هل هناك أي مرشح أو ربط للقيام بذلك؟

14
Eh Jewel

للتوسع في إجابة Mark ، لا يتوفر الكثير (بشكل عام) في طريق المرشحات في عناصر واجهة تعامل WordPress الافتراضية (باستثناء ربما 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() أعلاه.

ثم قم بإجراء التغييرات التي تريدها! أقترح تغيير العنوان أيضًا حتى تتمكن من تمييزه عن عنصر واجهة تعامل الفئات الافتراضي.

13
Tim Malone

يمكنك تجاوز أدوات WordPress الافتراضية من خلال توسيعها. يمكن العثور على رمز أداة الفئات الافتراضية على الرابط التالي: 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' );
9
Boris Kuzmanov

لا تحتاج إلى إنشاء عنصر واجهة مستخدم جديد كامل للقيام بما تحتاج إلى القيام به. عندما قرأت سؤالك ، أنت مهتم فقط بتغيير كيفية عرض الفئات في الواجهة الأمامية. هناك وظيفتان تعرضان الفئات في النهاية الأمامية

كل هذا يعتمد على الخيار الذي تم اختياره في الخلفية

الآن ، لدى كل من هاتين الوظيفتين عامل تصفية محدد لعنصر واجهة المستخدم (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 );
7
Pieter Goosen