چگونه یک پوسته ی فرزند در وردپرس ایجاد کنیم؟

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

 

مشکل این جاست که حتی کوچکترین تغییر در یک پوسته جلوی شما را برای به روزرسانی آن در آینده می گیرد، زیرا که اگر بخواهید به روزرسانی کنید، تمام تغییراتی که دادید از دست می روند.

 

پوسته های فرزند به شما این اجازه را می دهند تا از تمام قابلیت های پوسته ی مورد نظر خود استفاده کنید در حالی که بدون ترس از از دست دادن تغییرات خود می توانید آن را به روزرسانی نیز بکنید.

 

امروز به توضیح این که چرا باید از یک پوسته ی فرزند استفاده کنید و این که چگونه این کار را انجام دهید می پردازیم.

 

پوسته های فرزند چگونه کار می کنند و چرا از آن ها استفاده کنیم ؟

 

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

 

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

 

به روزرسانی

 

هنگامی که بدون استفاده از پوسته های فرزند پوسته ی خود را اصلاح می کنید دو انتخاب دارید: می توانید هیچ گاه در آینده پوسته ی خود را به روزرسانی نکنید، یا می توانید به روزرسانی کنید و تمام تغییرات خود را از دست بدهید.

 

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

 

به روز رسانی نکردن پوسته هم باید به طور کامل فراموش شود. تقریبا تمام لیست های “چرا وبسایت شما هک شد”، نرم افزار های غیر به روز را به عنوان عامل اصلی بیان کرده اند. شما باید همواره بدون استثنا وردپرس، پوسته ها و افزونه هایتان را به روز کنید.

 

سازمان دهی

 

وقتی که شما کدی را به یک پوسته ی اصلی اضافه می کنید دارید آن را به هزاران هزاران خط کد دیگر اضافه می کنید. برنامه نویسانی که بر روی سایت شما کار می کنند ( و البته خود شما) در پیگیری تغییراتی که انجام شده بر روی یک پوسته ی موجود دچار مشکل می شوید. در بهترین حالت یکی از پیامد های این اتفاق افزایش زمانی است که صرف برنامه نویسی می شود.

 

ایجاد یک پوسته ی فرزند

 

ایجاد یک پوسته ی فرزند به شدت ساده است، آن قدر که می توانید تا حد زیادی از آن را از مثال های من کپی و پیست کنید.

 

برای ایجاد یک پوسته ی فرزند برای پوسته ی خود، نیاز دارید تا مراحل زیر را انجام دهید:

 

  1. در محل نصب وردپرس خود یک دایرکتوری پوسته ایجاد کنید
  2. style-sheet  ای با اطلاعاتی درباره ی پوسته ی خود ایجاد کنید
  3. style های پوسته ی مادر را وارد کنید

 

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

 

خوب بگذارید مراحل بالا را با جزییات بیشتری بررسی کنیم. برای مثال، من پوسته ی فرزندی برای پوسته ی پیش فرض دوهزار و چهارده ایجاد خواهم کرد.

 

۱٫ابتدا به مسیر پوسته ی خود بروید و پوشه ای برای پوسته ی جدید ایجاد کنید. می توانید هر نامی که دوست دارید برای آن بگذارید. برای وضوح بیشتر من نام پوسته ی خودم را twentyfourteen-child.

 

۲٫مرحله ی بعدی ایجاد یک style-sheet است. این فایل باید حتما style.css نامیده شود. کد زیر را در فایلی که ایجاد کردید کپی و پیست کنید.

 

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://yourwebsite.com/twentyfourteen-child/
 Description:  My first child theme, based on Twenty Fourteen
 Author:       Daniel Pataki
 Author URI:   http://danielpataki.com
 Template:     twentyfourteen
 Version:      1.0.0
 Tags:         black, green, white, light, dark, two-columns, three-columns, left-sidebar, right-sidebar, fixed-layout, responsive-layout, custom-background, custom-header, custom-menu, editor-style, featured-images, flexible-header, full-width-template, microformats, post-formats, rtl-language-support, sticky-post, theme-options, translation-ready, accessibility-ready, responsive-layout, infinite-scroll, post-slider, design, food, journal, magazine, news, photography, portfolio, clean, contemporary, dark, elegant, modern, professional, sophisticated
 Text Domain:  twenty-fourteen-child
*/

 

 

دو آیتم ضروری در کد بالا خطوطی است که با “Theme Name” و “Template” شروع می شوند، هستند. Theme Name مشخص می کند که نام پوسته ی شما چیست و این در منوی انتخابگر پوسته نمایش داده می شود. Template نیز به وردپرس می گوید که چه پوسته ای را باید به عنوان پوسته ی مادر در نظر بگیرد. دیگر نوشته ها به جز Text Domain و Tags به نوعی واضح هستند. از Text Domain برای ترجمه ی رشته ها استفاده می شود. برای اطلاعات بیشتر به بخش I18n برای برنامه نویسان وردپرس مراجعه کنید. قسمت Tags لیستی از برچسب هایی است که توسط بخش پوسته ها در وردپرس استفاده می شود. برای این مثال من فایل هر چیزی که در فایل style.css پوسته ی مادر بود را کپی کردم.

 

۳٫در این جا پوسته ی فرزند شما به خوبی کار می کند. اگر فعالش کنید و صفحه ی خود را دوباره بارگزاری کنید، تمام محتوا وجود خواهد داشت اما هیچ سبکی برای ظاهر آن وجود نخواهد داشت. قبلا هم اشاره کردم که وردپرس ابتدا به دنبال توابع در پوسته ی فرزند می گردد و در صورتی که موجود نباشد به پوسته ی مادر باز می گردد.

 

در این مثال ما فایل style-sheet داریم پس وردپرس فایل های پوسته ی مادر را بارگزاری نمی کند. برای این که مطمئن شویم style-sheet  پوسته ی مادر ارگزاری می شود باید آن را وارد صف کنیم. این کار در فایل function.php پوسته قابل انجام است، این فایل را بسازید و کد زیر را در آن کپی کنید:

 

 

add_action( 'wp_enqueue_scripts', 'enqueue_parent_styles' );
function enqueue_parent_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
}

 

 

اگر نمی فهمید که کد بالا چیست نگران نباشید و با خیال راحت تغییرات خود را در ظاهر پوسته ی خود ایجاد کنید.

 

نحوه ی عملکرد پوسته های فرزند

 

یک پوسته ی فرزند چگونه عمل می کند؟ پوسته هاای  فرزند در سطح فایل ها کار می کنند. هنگامی که از یک فایل در طول فرایند بارگزاری استفاده می شود، بررسی  می کند که آیا این فایل ارائه دهنده ی یک پوسته ی فرزند است یا خیر. اگر باشد از محتوا ی آن فایل استفاده می شود. اگر نباشد از فایل مشابه در پوسته ی مادر استفاده می شود.

 

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

 

کار در هنگام اصلاح توابع باید به این صورت انجام شود. اگر می خواهید در header تغییری ایجاد کنید، فایل header.php را به پوسته ی فرزند کپی کنید. فایل را جوری که می خواهید تغییر دهید و از حاصل دست رنج خود لذت ببرید.

 

نکاتی برای سازندگان پوسته

 

اگر قصد دارید تا پوسته ی خود را بسازید چند نکته هست که توجه به آن ها ساخت پوسته ی فرزند را آسان تر می کند. دو تا از مهم ترین های آن ها یادگیری تفاوت میان ()get_stylesheet_directory و ()get_template_directory و ایجاد توابع با قابلیت اتصال است.

 

دایرکتوری صحیح

 

هنگامی که چیزهایی که دارید را توسط توابع ذکر شده پیوند می دهید باید همیشه به این دقت کنید که خانواده ی توابع _get_template به دایرکتوری پوسته ی مادر اشاره می کنند و خانواده ی توابع _get_stylesheet به دایرکتوری پوسته ی فرزند اشاره می کنند.

 

<a href="http://twitter.com/danielpataki"><img src="<?php echo get_template_directory_uri() ?>/images/twitter.png" alt='Twitter Logo'>Follow Me</a>
<a href="http://github.com/danielpataki"><img src="<?php echo get_stylesheet_directory_uri() ?>/images/github.png" alt='Github Logo'>On Github</a>

 

 

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

 

فایده ی استفاده از ()get_stylesheet_directory_uri در این است که برنامه نویسان پوسته ی فرزند به راحتی و تنها با ایجاد آن در مسیر مناسب می توانند از تصویر خود استفاده کنند. و از آن طرف اگر تصویر وجود نداشته باشد به طور کل نمایش داده نخواهد شد.

 

دلیل آن این است که اگر پوسته ی فرزند فعال باشد تابع ()get_stylesheet_directory_uri نمداند که شما کدام فایل را بارگزاری می کنید پس بررسی نمی کند که آیا آن وجود دارد یا خیر و همیشه URI پوسته ی فرزند را بر می گرداند.

 

توابع قابل تغییر

 

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

 

فرض کنیم شما تابعی برای یک متای سفارشی شده برای مطالب خود به نام ()my_meta ایجاد می کنید. یک پوسته ی فرزند به هیچ وجه نمی تواند در آن تغییری ایجاد کند زیرا که نمی توان این تابع را دو بار تعریف کرد. راه حل این است که فقط وقتی این تابع را ایجاد کنیم که قبلا تعریف نشده باشد(به یاد داشته باشید که فایل توابع پوسته ی فرزند اول بارگزاری می شوند.).

 

if ( !is_defined( 'my_meta' ) ) {
 function my_meta() {
  // code for postmeta here
 }
}

 

 

نتیجه گیری

 

با استفاده از چند مرحله ی ابتدایی که به راحتی می توانید آن ها را کپی کنید، شما می توانید یک محیط مطمئن برای پوسته ی خود ایجاد کنید که شما را از دردسر های زیادی نجات می دهد.

 

در  آخر اگر سوال یا نکته ی خاصی در ارتباط با پوسته های فرزند دارید از طریق بخش نظرها من را در جریان بگذارید.