فایل functions.php وردپرس – مقدمه
فایل functions.php وردپرس در واقع جایی است که شما تمامی امکانات منحصر به فرد مربوط به قالب وردپرس خود را، در آن اضافه می کنید.
شما می توانید از فایل functions.php وردپرس برای هوک کردن تابع های خود به توابع هسته وردپرس بهره ببرید و به این وسیله قالب وردپرس خود را ماژولارتر، توسعه پذیر تر و همین طور کاربردی تر گردانید.
فایل functions.php وردپرس چیست؟
فایل functions.php وردپرس همانند، یک پلاگین وردپرس برای شما عمل می کند که امکانات و کارکردهای مختلفی را به سایت وردپرسی شما اضافه می کند. شما می توانید از این فایل برای فراخوانی توابع مختلف در وردپرس و همین طور توابع دلخواه خود برای استفاده در وردپرس، بهره ببرید.
یکسان بودن کارکردهای فایل functions.php و یک پلاگین در وردپرس
در نظر داشته باشید، در صورتی که یک عمل یکسان را در فایل functions.php وردپرس و یا یک پلاگین مجزا اجرا کنید، نتیجه هر دو برای شما یکسان خواهد بود. اما در نظر داشته باشید که best practice وردپرس این است در صورتی که می خواهید امکانی را در سایت خود فراهم کنید که این امکان یا قابلیت به ظاهر سایت شما، ارتباطی نداشته باشد (یعنی قابلیتی سوای از اینکه وب سایت شما به چه شکل باشد) بهتر آن است که آن قابلیت یا feature را در یک پلاگین اضافه کنید.
موارد زیر به بعضی مزیت ها و سبک سنگین کردن استفاده از یک پلاگین وردپرس یا فایل functions.php می پردازد.
یک پلاگین وردپرس:
این در حالی است که فایل functions.php در وردپرس:
هر قالب فایل functions.php مخصوص به خود را دارد اما کد های داخل این فایل تنها در زمانی واقعا اجرا می شوند که قالب مربوط به آن فایل functions.php فعال باشد. در صورتی که قالب وردپرس شما از قبل فایل functions.php را داشته باشد، شما می توانید کدهای خود به این فایل اضافه کنید اما در صورتی که این فایل از قبل در دایرکتوری قالب شما موجود نباشد، شما می باید یک فایل با نام functions.php در داخل دایرکتوری قالب خود ساخته، تا بتوانید کدهای خود در قالب را به اجرا دربیاورید.
یک پوسته فرزند یا همان child theme می تواند برای خودش یک فایل functions.php مجزا داشته باشد. اضافه کردن فایل functions.php به پوسته فرزند، بهترین راه برای از بین رفتن ریسک پاک شدن کدهای نوشته شما با توجه به تغییر در پوسته والد یا parent theme می باشد.
در واقع زمانی که شما قالب والد یا parent theme را آپدیت می کنید، دیگر لازم نیست تا نگران باشید که کدهایی جدیدی که برای قالب خود نوشته اید، از بین بروند.
نکته مهم در مورد فایل functions.php موجود در child theme
اگرچه فایل functions.php پوسته فرزند دقیقا بعد از فایل functions.php پوسته والد، توسط هسته وردپرس بارگذاری می گردد اما این فایل، فایل پوسته والد را override نمی کند. در واقع فایل functions.php پوسته فرزند یا child theme برای اضافه کردن یا جایگزین نمودن فایل functions پوسته والد، مورد استفاده قرار می گیرد. به صورت مشابه، فایل functions.php همواره پس از لود شدن پلاگین ها در وردپرس، بارگذاری می گردد.
با استفاده از فایل functions.php ، شما می توانید:
نکته مهم در تداخل توابع مشابه در فایل functions.php و پلاگین ها در ورپرس
اگر شما پلاگینی داشته باشید که که تابعی مشابه یا فیلتر یکسانی با آنچه در فایل functions.php وجود دارد را، فراخوانی نمایید، نتایج غیر منتظره ای را خواهید گرفت، حتی ممکن است که این امر باعث از کار افتادن کل سایت شما گردد.
مثال های مختلف در مورد کاربردهای فایل functions.php
در زیر تعدادی از مثال هایی آورده شده است که شما می توانید برای استفاده از امکانات مختلف در وردپرس، آن را به فایل functions.php قالب خود، اضافه نمایید.
تنظیم کردن قالب وردپرس
این بخش شامل تعدادی از امکاناتی است که می توان در تابع مربوط به setup در داخل فایل functions.php فراخوانی کرد و آن ها بلافاصله بعد از اینکه قالب شما فعال شد، اجرا می شوند. بنابراین برای استفاده از این امکانات وردپرس در قالب خود، شما می توانید آن ها را به فایل functions.php قالب خود اضافه نمایید.
اصول کار به این شکل می باشد که شما تابع دلخواه خود مثلا با نام msntheme_setup را به اکشنی با نام after_setup_theme هوک می کنید و سپس این تابع را جداگانه تعریف کرده و در داخل آن با استفاده از مثلا add_theme_support و سایر توابع موجود در وردپرس، امکانات مورد نظر خود را به قالب خود اضافه می کنید.
این عمل باعث می شود که بلافاصله پس از فعال شدن قالب شما، کلیه این امکانات برای قالب شما فعال گردد.
استفاده از یک پیشوند یا namespace برای نامگذاری توابع خود
این امر بسیار مهم است که حتما در هنگام تعریف نام توابع خود، از یک پیشوند یا به اصطلاح namespace برای نامگذاری استفاده کنید. این امر باعث می شود که از تداخل توابع همنام در هنگام اجرای وردپرس، جلوگیری شود. به عنوان مثال در تمامی مثال های زیر از پیشوند msntheme_ استفاده شده است.
نکته مهم: حتما در هنگام فراخوانی توابع خود، ابتدا چک کنید که آیا تابع وجود دارد یا خیر و در صورت وجود کد خود را اجرا نمایید (این امر را می توانید در بخش کدهای زیر مشاهده نمایید.)
اضافه کردن امکان فعال کردن لینک های خوراک خودکار یا Automatic Feed Links
فعال کردن این امکان باعث می شود تا به صورت پیش فرض فیدها یا خوراک های مطالب و نظرات آن ها در قالب وردپرس، فعال گردند. با فعال سازی این امکان، فیدها به صورت اتوماتیک در درون تگ head به نمایش در خواهند آمد. این امکان توسط تابع add_theme_support و توسط کد زیر، در قالب شما فراخوانی خواهد شد:
add_theme_support( 'automatic-feed-links' );
فعال کردن قابلیت منوهای راهنما یا Navigation Menus
منوهای راهنمای سفارشی یا همان custom navigation menus به کاربران سایت وردپرسی اجازه می دهد تا منوهای سایت را از داخل پنل ادمین و بخش فهرست ها، ویرایش کرده و بسته به نیاز خود سفارشی نمایند.
شما می توانید بسته به نیاز خودچندین منو را با استفاده از اضافه کردن آن ها در فایل functions.php ، در وردپرس تنظیم نمایید. منوها با تابع register_nav_menus در داخل این فایل رجیستر یا ثبت می شوند و سپس شما می توانید با استفاده از تابع wp_nav_menu آن ها را در داخل قالب وردپرس خود، فراخوانی نمایید.
در صورتی که شما نیاز به داشتن چندین منو در قالب خود داشته باشید، برای ثبت منوهای خود، باید آرایه ای از پارامتر ها را به مانند کد زیر، به این تابع ارسال نمایید.
register_nav_menus( array( 'primary' => __( 'Primary Menu', 'myfirsttheme' ), 'secondary' => __( 'Secondary Menu', 'myfirsttheme' ) ) );
هرکدام از منوهایی که تعریف کرده اید، می توانند بعدا توسط تابع wp_nav_menu و به وسیله نام آن ها (به عنوان پارامتر theme_location در این تابع)، در داخل قالب شما فراخوانی و استفاده شوند.
لود کردن دامنه متن یا Load Text Domain
در صورتی که رشته های ترجمه برای قالب شما برای ترجمه موجود باشد، در این صورت قالب وردپرس ساخته شده توسط شما، می توانند به چندین زبان مختلف ترجمه شوند.
برای انجام این کار، شما باید تابع load_theme_textdomain را در فایل functions.php و به صورت زیر فراخوانی نمایید. نحوه فراخوانی این تابع در بخش های مربوط به آن به طور کامل تشریح خواهد شد.
load_theme_textdomain( 'msntheme', get_template_directory() . '/languages' );
فعال کردن امکان عکس thumbnail برای هر پست یا همان Post Thumbnails
Post Thumbnails ها و Featured Images به کاربران شما اجازه میدهند تا بتوانند عکس دلخواه خودشان را برای پست هایشان انتخاب نمایند. قالب شما می تواند بسته به نوع طراحیش، تصمیم بگیرد که به چه صورت آن ها را نمایش دهد.
به عنوان مثال ممکن است شما بخواهید تا Post Thumbnail هر پست را با همان پست در یک صفحه بایگانی یا همان archive page نمایش دهید یا ممکن است بخواهید که یک عکس بزرگ featured image را جهت نمایش در صفحه اصلی سایت خود بکار ببرید.
به دلیل اینکه در اکثر قالب ها از Post Thumbnail و Featured Images استفاده می شود، پیشنهاد می شود این قابلیت را همواره در قالب های خود اضافه کنید.
add_theme_support( 'post-thumbnails' );
قابلیت قالب بندی های یک نوشته یا همان Post Format
قابلیت Post Format به کاربران اجازه می دهد تا نوشته های خود را به طرق مختلفی قالب بندی کنند. این یک قابلیت کاربردی می باشد که به بلاگران اجازه می دهد که قالب ها و الگوهای مختلفی را، بسته به نوع نوشته خود، بکار گیرند.
تابع add_theme_support همچنین برای ایجاد این قابلیت در قالب شما استفاده می شود. این قابلیت نیز از طرف وردپرس پیشنهاد می شود که شما آن را برای قالب های نوشته شده توسط خود، فراهم آورید.
add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) );
یک مثال ساده از انجام تنظیمات اولیه در فایل functions.php
در برگرفتن و پوشش دادن کلیه امکانات بالا، باعث می شود که فایل functions.php شما چیزی شبیه به کدهای داده شده در زیر باشد. Comment های که در داخل کدها اضافه شده است، جهت آشکارسازی نحوه انجام کار هر بخش، در داخل فایل functions.php می باشد. دلیل گذاشتن comment ها این می باشد که پس از مدتی، فایل functions.php بسیار شلوغ شده و در صورت قرار ندادن comment ممکن است باعث سردرگمی ما یا سایر توسعه دهندگان گردد.
همانگونه که در انتهای کدها نیز می بینید، تابع msntheme_setup که کلیه امکانات مورد نیاز ما، در آن فراخوانی می شود، با یک add_action به after_setup_theme هوک شده است.
if ( ! function_exists( 'msntheme_setup' ) ) : /** * Sets up theme defaults and registers support for various WordPress features. * * Note that this function is hooked into the after_setup_theme hook, which runs * before the init hook. The init hook is too late for some features, such as indicating * support post thumbnails. */ function msntheme_setup() { /** * Make theme available for translation. * Translations can be placed in the /languages/ directory. */ load_theme_textdomain( 'msntheme', get_template_directory() . '/languages' ); /** * Add default posts and comments RSS feed links to <head>. */ add_theme_support( 'automatic-feed-links' ); /** * Enable support for post thumbnails and featured images. */ add_theme_support( 'post-thumbnails' ); /** * Add support for two custom navigation menus. */ register_nav_menus( array( 'primary' => __( 'Primary Menu', 'msntheme' ), 'secondary' => __('Secondary Menu', 'mymsntheme' ) ) ); /** * Enable support for the following post formats: * aside, gallery, quote, image, and video */ add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) ); } endif; // msntheme_setup add_action( 'after_setup_theme', 'msntheme_setup' );
تنظیم قابلیت عرض صفحه یا content width
قابلیت content width به فایل functions.php شما اضافه می شود تا حداکثر عرض محتوای شما در سایت را تعیین نمایید. این قابلیت باعث این تضمین می گردد که محتواها و سایر بخش های سایت شما، باعث بهم ریختگی ظاهر شما نشده و همه آن ها در یک چارچوب قرار گیرند.
در مثال زیر حداکثر مقدار عرض محتوا برابر ۸۰۰ پیکسل قرار داده شده، این یعنی هیچ محتوایی اعم از عکس ها، عرضی بزرگتر از این مقدار، نخواهند داشت.
if ( ! isset ( $content_width) ) $content_width = 800;
اضافه کردن امکانات دیگر به فایل functions.php
بسیاری دیگر از قابلیت ها در وردپرس وجود دارد که شما می توانید با اضافه نمودن آن به فایل functions.php آن ها را به قالب خود اضافه کنید.
لیست زیر تنها نمونه ای از این قابلیت هاست که عموما در قالب های وردپرس مورد استفاده قرار می گیرند. در بخش های بعدی بعضی از آن ها به صورت کامل مورد بررسی قرار خواهیم داد.
- Custom Headers
- Sidebars
- Custom Background
- Add Editor Styles
- HTML5
- Title tag
فایل نهایی functions.php شما
در صورتی که بخواهید از تمامی امکانات فوق در قالب خود استفاده کنید، فایل functions.php شما، چیزی مشابه زیر خواهد شد:
/** * MsnTheme's functions and definitions * * @package MsnTheme * @since MsnTheme 1.0 */ /** * First, let's set the maximum content width based on the theme's design and stylesheet. * This will limit the width of all uploaded images and embeds. */ if ( ! isset( $content_width ) ) $content_width = 800; /* pixels */ if ( ! function_exists( 'msntheme_setup' ) ) : /** * Sets up theme defaults and registers support for various WordPress features. * * Note that this function is hooked into the after_setup_theme hook, which runs * before the init hook. The init hook is too late for some features, such as indicating * support post thumbnails. */ function msntheme_setup() { /** * Make theme available for translation. * Translations can be placed in the /languages/ directory. */ load_theme_textdomain( 'msntheme', get_template_directory() . '/languages' ); /** * Add default posts and comments RSS feed links to <head>. */ add_theme_support( 'automatic-feed-links' ); /** * Enable support for post thumbnails and featured images. */ add_theme_support( 'post-thumbnails' ); /** * Add support for two custom navigation menus. */ register_nav_menus( array( 'primary' => __( 'Primary Menu', 'msntheme' ), 'secondary' => __('Secondary Menu', 'msntheme' ) ) ); /** * Enable support for the following post formats: * aside, gallery, quote, image, and video */ add_theme_support( 'post-formats', array ( 'aside', 'gallery', 'quote', 'image', 'video' ) ); } endif; // msntheme_setup add_action( 'after_setup_theme', 'msntheme_setup' );
راهنما برای مطالعه بیشتر:
شما می توانید از لینک های زیر برای مطالعه بیشتر استفاده نمایید:
راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:
شما می توانید از طریق لینک های کاربردی زیر به سایر مقالات سایت که کاملا بصورت طبقه بندی شده وجود دارد، مراجعه نموده و از آن ها استفاده کنید:
کجا باید کدهای اچ تی ام ال خودمون رو بنویسیم؟
سلام به شما دوست عزیز
دقیقا متوجه سوال شما نشدم. شما کدهای html خودتون رو، به صورت embed در داخل یک فایل Php می توانید بنویسید.
در صورتی که با این مفاهیم آشنا نیستید، می توانید از دوره هایی که در سایت کلوب وبمستران وردپرس برگزار کردیم، استفاده کنید.
سلام بنده قالب آوادا از سایت تم فارست رو روی سایت آپلود کردم حالا موقع نصب دمو بصورت ناقص آپلود میشه فقط چندتا عکس و پاورقی نمایش داده میشه اون چیزای رو هم که آپلود نمیکنه ارور php میده میگه phpهای که در وضعیت قالب به رنگ قرمز درآمده اند را افزایش دهید منظورش حجم پست و آپلوده منم اونا رو افزایش دادم ولی همچنان اون ارور رو میده
چطور میتونم این مشکل رو برطرف کنم؟؟
سلام به شما دوست عزیز
به نظر میرسه مشکل در تنظمات هاست شما باشد که نمی توانید به درستی، دمو را ایمپورت کنید.
برای این منظور، می توانید از ویدئو هاست مخصوص وردپرس در سایت ما استفاده کنید تا با این تنظیمات آشنا شوید. ضمن اینکه در دوره وردپرس هم (که در سایت wpwebmaster.club گذاشتیم) این موارد توضیح داده شده است.
برای اینکار، می توانید از پشتیبانی هاستینگ خود هم، کمک بگیرید تا آن ها را برای شما انجام دهد.
سپاس فراوان
سلام
وقتی که میخام وارد صفحه ux builder وردپرس بشم این ارور رو بهم میده
چیکار باید کنم؟
Parse error: syntax error, unexpected ‘add_filter’ (T_STRING), expecting ‘)’ in C:\xampp\htdocs\wordpress\wp-content\themes\flatsome\inc\builder\shortcodes\ux_products.php on line 183
سر رشته ایی هم از کد نویسی ندارم
سلام به شما دوست عزیز
این از ارور های مرتبط با قالب فلت سام هست. مسلما باید با پشتیبان قالب خودتون صحبت کنید تا مشکل رو برای شما مرتفع کنند. ضمن اینکه در صورتی که وردپرس و سایر پلاگین های شما و همین طور قالب فلت سام، به آخر ورژن ها آپدیت شده باشند، به احتمال خیلی زیاد ممکن هست مشکل شما برطرف گردد
سلام
من یک تابع در این پوشه نوشتم و به وسیله add_action اون رو اضافه کردم اما متاسفانه بعد از آپدیت تابع پاک شده اما اثرش باقی مونده چطوری اثر اون تابع رو پاک کنم؟
remove_action امتحان کردم نشد
سلام به شما دوست عزیز
برای اینکه تابع هایی که می نویسید، هنگام آپدیت قالب، overwrite نشده و از بین نروند، می باید همیشه از child theme استفاده کنید.
نکته دیگه اینکه نمیشه تابع پاک شده باشه اما اثرش باقی مونده باشه. چون متاسفانه اشاره نکردید که از چه هوکی و برای چه منظوری استفاده کردید، متاسفانه نمی تونم نظر دقیق بدم، اما احتمال داره پلاگین کشی روی سایت شما فعال باشه که باعث میشه اون رو ببینید. همیشه بعد از تغییرات، کش های موجود پلاگین و همین طور کش های opcache رو پاک کنید و مجدد امتحان کنید.
مورد بعدی اینکه، ممکن هست یک پلاگین دیگه از این هوک و با اولویت بالاتر استفاده می کنه که اون هم می تونه دلیل این مورد باشه. برای اینکه بتونید این رو رصد کنید، باید از پلاگینی مثل query monitor استفاده کنید و کلیه هوک هایی که در صفحه اجرا میشه رو چک کنید تا متوجه بشید که مورد از کجا داره اتفاق می افته.
امیدوارم باهمین موارد، مشکل شما حل بشه
سپاسگزارم
عالی و کاربردی . ممنون
سلام به شما دوست عزیز
از شما سپاسگزارم که وقت ارزشمند خودتون رو گذاشتید تا برای ما پیام های دلگرم کننده ارسال کنید
سپاس فراوان
جامع و عالی
سپاس از شما
و خسته نباشید
سلام
از شما بسیار ممنونم که وقت گذاشتید و نظر سازنده و ارزشمند خودتان را برای ما ارسال کردید.
امیدوارم که بتوانیم با تولید محتواهای بهتر، به تعداد بازدید کنندگان خوبی مثل شما، روز به روز اضافه کنیم.
از شما کمال سپاس و تشکر را داریم.
بسیار عالی و جامع ، خیلی ممنون
سلام و روز شما بخیر
بسیار سپاسگزارم از اینکه وقت گذاشتید و نظر سازنده خودتون رو برای ما ارسال کردید.
از لطف شما خیلی ممنون و متشکر هستم
عالیه خیلی خوب توضیح دادید
سلام و عرض ادب خدمت شما
بسیار باعث افتخار ماست که از این مقاله لذت بردید. کامنت های خوب شما باعث پیشرفت هرچه بیشتر ما در این سایت خواهد شد.
از شما کمال تشکر و سپاس را داریم
سلام، ممنون از نظر بسیار دلگرم کننده شما، حمایت های شما باعث خواهد شد که با قدرت بیشتری به راه خود ادامه بدهیم. تشکر فراوان از شما و از وقتی که برای گذاشتن دیدگاه گذاشتید
واقعا خوب بود ،، من برم بقیه ببینم
سایت جالبی دارید واقعا لینکتونو برای چندتا از دوستام فرستادم بدردشون میخوره ،، ممنون