۲ محمد حسین
تغییر فانکشن در پلاگین
محسن موحد حل شده توسط محسن موحد

سلام وقت بخیر
استاد  برای سفارشی کردن قالب بعضی  از کلاس‌ها رو  در فانکشن هایی که در پلاگین ووکامرس هستن رو تغییر می‌ده در صورت آپدیت پلاگین تغییرات بر میگرده به حالت اولیه ، این رو چطور مدیریت کنیم؟

سلام،

وقتی سفارشی میکنید مثل این میمونه که یک پلاگین و یک فایل جدید به پروژه اضافه کردید.

بنابراین برای اینکه بعد از آپدیت تغییرات از دست نره میتونید فایل‌های قالب ووکامرس رو توی پوشه woocommerce تم خودت کپی و سفارشی کنی.

البته برای توسعه هم راه‌های مختلفی وجود داره مثل استفاده از child theme یا یا child plugin یا پلاگین code snippet که بسته به هدف و لاجیک پروژه میشه استفاده کرد.

یادت نره قبل از هر آپدیت، از تغییراتت بکاپ بگیری و مستندشون کنی تا بعداً راحتتر بتونی بازسازیشون کنی. اینطوری میتونی تغییراتت رو حفظ کنی و از بروزرسانی‌‌های امنیتی و عملکردی ووکامرس هم بهره‌ مند بشی.

بهترین پاسخ
محسن موحد ۲۰ تیر ۱۴۰۳، ۰۳:۵۶

اون فانکشن نباید این جوری دستکاری کرد. کپی کردن فایل‌ها توی تم هم برای فایل‌های template هست نه فانکشن‌های ووکامرس.

اینو باید با فیلتر‌ها مدیریت کرد. یه نمونه اینجا می‌ذارم:

 


add_filter('woocommerce_billing_fields', 'az_change_woocommerce_billing_fields', 20);
function az_change_woocommerce_billing_fields($fields)
{
    // unset fields - حذف فیلدهایی که نمی‌خوایم
    unset(
        $fields['billing_company'],
        $fields['billing_country'],
    );
// add custom fields - اضافه کردن فیلد‌های بیشتر
    $fields['billing_phone']['label'] = 'شماره موبایل';
    $fields['billing_phone']['required'] = 1;
    $fields['billing_social_number']['label'] = 'کد ملی شما';
    $fields['billing_social_number']['required'] = 1;
    $fields['billing_email']['required'] = 0;
    //priority - تغییر ترتیب نمایش فیلد‌ها توی فرم
    $fields['billing_social_number']['priority'] = 30;
    $fields['billing_phone']['priority'] = 40;
    $fields['billing_email']['priority'] = 50;
    $fields['billing_state']['priority'] = 70;
    $fields['billing_city']['priority'] = 80;
    $fields['billing_address_1']['priority'] = 90;
// تغییر کلاس فیلد ها
    foreach ($fields as  $key=> &$field) {
        $field['class'] = ['flex', 'flex-col', 'gap-4'];
        $field['label_class'] = ['flex', 'items-center', 'text-sm', 'font-medium', 'gap-2'];
        $field['input_class'] = ['text-sm', 'border'];
    }
    return $fields;
}

 

آزاده نوری ۰۱ مرداد ۱۴۰۴، ۰۶:۴۹