فایل functions.php وردپرس – مقدمه

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

شما می توانید از فایل functions.php وردپرس برای هوک کردن تابع های خود به توابع هسته وردپرس بهره ببرید و به این وسیله قالب وردپرس خود را ماژولارتر، توسعه پذیر تر و همین طور کاربردی تر گردانید.

نحوه کار فایل functions.php چگونه است؟

فایل functions.php وردپرس چیست؟

فایل functions.php وردپرس همانند، یک پلاگین وردپرس برای شما عمل می کند که امکانات و کارکردهای مختلفی را به سایت وردپرسی شما اضافه می کند. شما می توانید از این فایل برای فراخوانی توابع مختلف در وردپرس و همین طور توابع دلخواه خود برای استفاده در وردپرس، بهره ببرید.

موارد زیر به بعضی مزیت ها و سبک سنگین کردن استفاده از یک پلاگین وردپرس یا فایل functions.php می پردازد.

یک پلاگین وردپرس:

  • نیاز به یک هدر یکتای خاص یا همان specific unique header text دارد

  • فایل های پلاگین شما در زیر دایرکتوری wp-content/plugins  ذخیره می گردد

  • فقط زمانی بر روی صفحات شما لود و اجرا می شوند که فعال یا همان active باشند.

  • بر روی تمامی قالب ها بکار گرفته می شوند و قابلیت اجرا بر روی تمام قالب های موجود در سایت شما را دارا می باشند

  • عموما می باید یک تک هدف را داشته باشند، به عنوان مثال امکاناتی برای سئو به سایت شما اضافه کنند یا برای کمک به گرفتن backup از آن استفاده گردد.

این در حالی است که فایل functions.php در وردپرس:

  • به هیچ هدر یکتا یا unique header text ای نیاز ندارد.

  • در ساب دایرکتوری تم های شما یعنی wp-content/themes ذخیره می شود.

  • تنها زمانی اجرا می شوند که قالب مربوط به دایرکتوری آن ها فعال یا active باشند.

  • تنها بر روی آن قالبی که در داخل آن می باشند، اجرا می شوند (این به این معنی است که با غیرفعال کردن یا disable نمودن تم، امکانات داخل قالب شما دیگر قابل استفاده نیستند)

  • می تواند شامل تعداد زیادی از بلاک های کد به جهت اهداف مختلف در قالب باشد.

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

یک پوسته فرزند یا همان child theme می تواند برای خودش یک فایل functions.php مجزا داشته باشد. اضافه کردن فایل functions.php به پوسته فرزند، بهترین راه برای از بین رفتن ریسک پاک شدن کدهای نوشته شما با توجه به تغییر در پوسته والد یا parent theme می باشد.

در واقع زمانی که شما قالب والد یا parent theme را آپدیت می کنید، دیگر لازم نیست تا نگران باشید که کدهایی جدیدی که برای قالب خود نوشته اید، از بین بروند.

با استفاده از فایل functions.php ، شما می توانید:

  • از هوک های وردپرس استفاده نمایید، به عنوان مثال با استفاده از فیلتر هوک excerpt_length  ، شما می توانید طول چکیده مطلب خود یا همان post excerpt را از مقدار پیش فرض خود (یعنی ۵۵ کلمه) تغییر دهید.

  • می توانید قابلیت های مختلف در وردپرس را توسط add_theme_support فعال نمایید. به عنوان مثال شما می توانید قابلیت نمایش thumbnail برای پست های خود، اضافه کردن فرمت های مختلف به پست های سفارشی خود و همین طور navigation menus را به امکانات قالب خود، اضافه کنید.

  • توابعی را در داخل فایل functions.php تعریف کنید که می خواهید به تکرار در template file های مختلف از آن ها بهره ببرید.

مثال های مختلف در مورد کاربردهای فایل functions.php

در زیر تعدادی از مثال هایی آورده شده است که شما می توانید برای استفاده از امکانات مختلف در وردپرس، آن را به فایل functions.php قالب خود، اضافه نمایید.

تنظیم کردن قالب وردپرس

این بخش شامل تعدادی از امکاناتی است که می توان در تابع مربوط به setup در داخل فایل functions.php فراخوانی کرد و آن ها بلافاصله بعد از اینکه قالب شما فعال شد، اجرا می شوند. بنابراین برای استفاده از این امکانات وردپرس در قالب خود، شما می توانید آن ها را به فایل functions.php قالب خود اضافه نمایید.

اصول کار به این شکل می باشد که شما تابع دلخواه خود مثلا با نام msntheme_setup را به اکشنی با نام after_setup_theme هوک می کنید و سپس این تابع را جداگانه تعریف کرده و در داخل آن با استفاده از مثلا add_theme_support و سایر توابع موجود در وردپرس، امکانات مورد نظر خود را به قالب خود اضافه می کنید.

این عمل باعث می شود که بلافاصله پس از فعال شدن قالب شما، کلیه این امکانات برای قالب شما فعال گردد.

نکته مهم: حتما در هنگام فراخوانی توابع خود، ابتدا چک کنید که آیا تابع وجود دارد یا خیر و در صورت وجود کد خود را اجرا نمایید (این امر را می توانید در بخش کدهای زیر مشاهده نمایید.)

اضافه کردن امکان فعال کردن لینک های خوراک خودکار یا 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 آن ها را به قالب خود اضافه کنید.

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

فایل نهایی 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' );

راهنما برای خواندن سایر مقالات سایت به صورت دسته بندی شده:

شما می توانید از طریق لینک های کاربردی زیر به سایر مقالات سایت که کاملا بصورت طبقه بندی شده وجود دارد، مراجعه نموده و از آن ها استفاده کنید: