سلام دوستان عزیز ، در این مقاله از آموزش وردپرس ، نحوه صحیح نوشتن و فعالسازی توابع با action hook و filter hook را در وردپرس شرح خواهیم داد.

مقدمه:

اگه دارید این مقاله رو می خونید احتمالا چند باری تلاش کردید توی وردپرس تابع بنویسید و موفق نشدید و یا مفاهیمی مثل filter و hook باعث شده گیج بشید و به کارتون ادامه ندید. توی این مقاله قصد داریم مشکلات رایج در تابع نویسی وردپرس رو با جزییات شرح بدیم و بهترین روش ها برایتابع نویسی و action hook و filter hook رو بیان کنیم.

کدهای تابع را کجا قرار بدیم؟

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

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

حالا باید فایل مورد نظر رو باز کنیم و شروع به نوشتن کدهای لازم بکنیم ، طبق مراحل زیر:

کامنت گذاری :

اولین کاری که توی نوشتن تابع باید رعایت کنیم کامنت گذاری در کدهامون هستش تا اگه روزی خواستیم اونها رو تغییر بدیم یا شخص دیگه ای قراره روی کدهای ما کار کنه، از روند کلی کارکرد کدها سر در بیاره.

تابعی که قراره بنویسیم خیلی سادست و قراره یک سری فونت گوگل رو به قالب ما معرفی کنه ، اما قبل از نوشتن کدهای مورد نیاز میخوام کامنت گذاری انجام بدم :

/************************************************************************
wpschool_add_google_fonts - register google fonts
************************************************************************/

من کدها رو با این سبک کامنت گذاری می کنم تا بعد راحت تر بتونم پیداشون کنم .

تعریف تابع :

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

function wpschool_add_google_fonts() {

}

بدنه تابع :

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

wp_register_style( 'googleFonts', 'https://fonts.googleapis.com/css?family=Assistant|Oswald:300');	
wp_enqueue_style( 'googleFonts');

در این مقاله قرا نیست در مورد نحوه کارکرد کدهای بالا صحبت کنیم و در صورت نیاز می تونید مقاله wp_enqueue در وردپرس را مطالع کنید.

حالا اگه کدهای بالا رو توی فایل های قالب وردپرس خودتون ( مانند functions.php ) قرار بدید و یک صفحه از قالب رو باز کنید متوجه میشید که هیچ اتفاقی نمیفته و تابع شما کاری انجام نمیده ، به این دلیل که شما هنوز تابع رو فعال نکردید!

فعال کردن تابع در وردپرس

تابع در وردپرس کاری انجام نمیده مگه اینکه به طریقی اون رو فعال کنیم و به وردپرس بگیم که چه زمانی تابع رو اجرا کنه. برای این کار سه گزینه وجود داره:

  • صدا زدن تابع به صورت مستقیم در فایل قالب وردپرس
  • چسباندن تابع به یک action hook.
  • چسباندن تابع به یک filter hook.

صدا زدن مستقیم تابع :

وقتی می تونید از این روش استفاده کنید که قالب رو خودتون نوشته باشید و بدونید که کجا برای صدا زدن تابع مورد نظر مناسبه، برای مثال میخوایم یه تابع بنویسیم که تاریخ رو چاپ کنه:

/*****************************************************************************
wpschool_posted_on - add dates on single posts
*****************************************************************************/
function wpschool_posted_on() {
		
		<section class="entry-meta">
			<?php echo get_the_date(); ?>
		</section>
		
}

کد بالا رو به فایل قالب وردپرس اضافه می کنیم و هر جا لازم داریم تاریخ چاپ بشه کد پایین رو اضافه می کنیم :

wpschool_posted_on()

به همین راحتی تابع صدا زده میشه و در مکان مورد نظر ما تاریخ رو چاپ می کنه.

اجرای تابع از طریق action hook :

روش دیگه برای اجرای تابع استفاده از action hook است ، این روش به شما اجازه میده هر زمان که وردپرس با hook مورد نظر برخورد میکنه تابع شما رو هم اجرا کنه.

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

در مورد تابع اول ما که کارش ثبت فونت بود، از hook که توسط وردپرس از قبل برای ما فراهم شده یعنی wp_enqueue_scripts استفاده می کنیم. برای اینکار کد زیر رو به کدهای قبلی اضافه میکنیم:

add_action( 'wp_enqueue_scripts', 'wpschool_add_google_fonts' );

برای چسباندن تابع خودمان به action hook مورد نظر از add_action استفاده می کنیم که پارامتر اول نام action hook مورد نظر و پارامتر دوم نام تابعی است که می خواهیم اجرا شود.

در انتها نمای کامل کدهای به صورت زیر خواهد بود :

/************************************************************************
wpschool_add_google_fonts - register google fonts
************************************************************************/
function wpschool_add_google_fonts {
  wp_register_style( 'googleFonts', 'https://fonts.googleapis.com/css?family=Assistant|Oswald:300');	
  wp_enqueue_style( 'googleFonts');
 }

خوب حالا اجازه بدید مثال تابع چاپ تاریخ را از طریق ساختن action hook خودمون پیاده سازی کنیم ، برای اینکار از do_action() استفاده می کنیم و جایی که میخوایم چاپ تاریخ انجام بشه قرار میدیم :

do_action( 'wpschool_before_content' );

پارامتر ارسالی نام action hook می باشد که در ادامه از آن استفاده خواهیم کرد.

با استفاده از دستور بالا یک action hook در جایی که میخوایم کد فراخوانی بشه میسازیم و بعد تابع خودمون رو با استفاده از کد زیر به این action hook میچسبونیم:

/*****************************************************************************
wpschool_posted_on - add dates on single posts
*****************************************************************************/
function wpschool_posted_on() {
		
		<section class="entry-meta">
			<?php echo get_the_date(); ?>
		</section>
		
}
add_action( 'wpschool_before_content', 'wpschool_posted_on' );

اجرای تابع از طریق filter hook :

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

برای اضافه کردن filter hook به فایل قالب وردپرس از apply_filters() استفاده کرده و نام فیلتر به عنوان پارامتر اول و محتوای پیش فرض به عنوان پرامتر دوم ارسال می کنیم.

echo apply_filters( 'wpschool_filter_hook', '<h3>Latest Posts</h3>' );

در مثال بالا چون قصد چاپ محتوا را داریم در ابتدا از echo استفاده کرده ایم.

برای جایگزین کردن محتوای پیش فرض در  بالا  از add_filter()  استفاده کرده و مانند کد زیر عمل می کنیم:

/*****************************************************************************
wpschool_heading - override title of latest posts section
*****************************************************************************/
function wpschool_heading() {
		
		<h3>Recent Posts</h3>

}

add_filter ( 'wpschool_filter_hook', 'wpschool_heading' );

با اضافه کردن کد بالا به جای عبارت پیش فرض یعنی Latest Posts عبارت جدید یعنی Recent Posts چاپ خواهد شد.

اشتباه رایج :

زمانی که از hook ها برای صدا زدن توابع استفاده می کنید می تونید از رابطه های شرطی کمک بگیرید و تحت شرایط خاص کدهای خودتون رو اجرا کنید ، در خیلی از موارد کاربرها مثل کد زیر عمل میکنند که غلط هستش و به خطا می خورند :

/*****************************************************************************
wpschool_posted_on - add dates on single posts - THIS IS INCORRECT
*****************************************************************************/
function wpschool_posted_on() {
		
		<section class="entry-meta">
			<?php echo get_the_date(); ?>
		</section>
		
}
if ( is_singular( 'post' ) ) {
  add_action ( 'wpschool_before_content', 'wpschool_posted_on' );
}

کد بالا اشتباه است و با پیام خطا روبرو میشید ، تنها راه درست استفاده از شرط در داخل تابع است مثل کد زیر :

/*****************************************************************************
wpschool_posted_on - add dates on single posts
*****************************************************************************/
function wpschool_posted_on() {

	if ( is_singular( 'post' ) ) {?>
		
		<section class="entry-meta">
			<?php echo get_the_date(); ?>
		</section>
	
	<?php }
	
}
add_action ( 'wpschool_before_content', 'wpschool_posted_on' );

جمع بندی:

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

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

موفق و پیروز باشید.

3 دیدگاه برای “تابع نویسی و action hook و filter hook در وردپرس

  • آرمان
    - ۱۶ مهر , ۱۳۹۸

    میشه تابعی رو غیر مستقیم از قالب دگ صدا زد؟

    هدر ی قالب دگ رو میخوام بیارم بجاش !

    • سیروس
      - ۲۲ مهر , ۱۳۹۸

      خیر امکان پذیر نیست

  • مسعود
    - ۲۹ مهر , ۱۳۹۹

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

دیدگاه خود را بیان کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

-- بارگیری کد امنیتی --