پیاده سازی دو ترفند کاربردی در وردپرس با تابع glob زبان PHP

نکات و ترفندهای برنامه نویسی وردپرس

به مرور زمان که پروژه شما بزرگ و بزرگتر می شود باید به فکر راهکارهایی باشید تا انجام برخی کارهای تکراری را به حداقل برسانید، یکی از این موارد enqueue کردن فایل های موردنیاز قالب یا افزونه است.

هر زمان که یک فایل جاوا اسکریپت یا CSS به پروژه خود اضافه می کنید لازم است آن را با توابع wp_enqueue_script و wp_enqueue_style از طریق اکشن هوک های wp_enqueue_scripts و admin_enqueue_scripts به وردپرس معرفی نمائید.

function modiredev_theme_scripts() {
    wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css' );
    wp_enqueue_script( 'custom-js', get_template_directory_uri() . '/js/custom.js' );
}

add_action( 'wp_enqueue_scripts', 'modiredev_theme_scripts' );

حالا فرض کنید ۱۰ فایل جاوا اسکریپت دارید، در این شرایط باید به ازای هر کدام تابع wp_qnueue_script را فراخوانی کنید، تازه اگر موردی از قلم نیفتد.

در چنین سناریو هایی که تعداد فایل های پروژه زیاد است می توانید برای خودکاری سازی عملیات enqueue از تابع glob در زبان PHP استفاده کنید.

در مثال زیر فرض کردیم کلیه فایل های جاوا اسکریپت قالب وردپرس در دایرکتوری js قرار دارد.

همانطور که ملاحظه می کنید در داخل حلقه foreach به تک تک فایل های جاوا اسکریپت دسترسی پیدا کردیم.

function modiredev_theme_scripts(){
    foreach( glob( get_template_directory(). '/js/*.js' ) as $file ) {
        $filename = basename( $file );
        wp_enqueue_script( $filename, get_template_directory_uri() . '/js/' . $filename );
    }
}
add_action( 'wp_enqueue_scripts', 'modiredev_theme_scripts' );

توجه داشته باشید که در تابع glob از get_template_directory و در تابع wp_enqueue_script از تابع get_template_directory_uri استفاده کردیم.

حالا هر فایل جاوا اسکریپتی که در دایرکتوری js قرار داشته باشد یا بعدا به این دایرکتوری اضافه شود به صورت خودکار به وردپرس معرفی خواهد شد و نیازی نیست خودتان به صورت دستی آن را اضافه کنید.

همین فرآیند را می توانید برای فایل های CSS هم پیاده سازی کنید.

function modiredev_theme_scripts(){
    foreach( glob( get_template_directory(). '/css/*.css' ) as $file ) {
        $filename = basename( $file );
        wp_enqueue_style( $filename, get_template_directory_uri() . '/css/' . $filename );
    }
}
add_action( 'wp_enqueue_scripts', 'modiredev_theme_scripts' );

از تابع glob برای include کردن فایل های php هم استفاده می شود.

foreach ( glob( get_template_directory() . '/includes/*.php' ) as $file ) {
       include $file;
 }

تابع glob بر اساس الگویی که به آن پاس می دهید آرایه ای از نام فایل ها و دایرکتوری ها برگشت می دهد، بنابراین می توانید خروجی آن را با توابع کار با آرایه مثل array_reverse دستکاری کنید.

به عنوان مثال در نمونه کد زیر فایل های PHP موجود در دایرکتوری includes را بر اساس تاریخ ایجاد فایل مرتب کردیم.

$php_files = array();
foreach( glob( get_template_directory() . '/includes/*.php' ) as $file ){
    $php_files[$file] = filectime( $file );
}
asort( $php_files );

جمع بندی

توسعه دهندگان وب معمولا فایل های JS و CSS پروژه را به کمک ابزارهای قدرتمندی مثل webpack در یک یا دو فایل ترکیب(اصطلاحا Bundle) می کنند، در این فرآیند مراحل بهینه سازی(Optimization and Minification) نیز در نظر گرفته می شود، بنابراین فقط فایل نهایی enqueue خواهد شد.

با این تفاصیل بهتر است نیم نگاهی به تابع glob داشته باشید، شاید در پروژه های آینده به دردتان بخورد.

برچسب ها
سعید یاورنیا 118 نوشته 130 دیدگاه

توسعه دهنده PHP و Wordpress
توسعه وب سایت یکی از کارهایی است که تلاش می کنم تخصصم رو در اون بالا ببرم، یادگیری تکنولوژی های جدید یکی از چالش هایی است که به شدت به آن علاقمند هستم.

دیدگاهتان را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد، بخش‌های موردنیاز با * مشخص شده‌اند.