wordpress- وردپرس

افزودن Theme activation / deactivation Hook

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

در تئوری ما چطور میتونیم اینکار رو انجام بدیم؟ ما میتونیم یک مقدار به عنوان Flag رو در دیتابیس ذخیره کنیم با دستور add_option . این مقدار موقعی که اولین دستورات اجرا شدن می تونه اضافه شه. فایل functions.php از اولین فایلهایی است که در هنگام لود شدن وردپرس فراخوانی میشه. پس اول از همه چک می کنیم که یک مقدار خاص توی دیتابیس وجود داره یا نه. پس اگه اون مقدار وجود نداشت تم برای اولین باره که داره لود میشه و دستورات functions.php برای اولین باره که داره اجرا میشه. پس تم همین الان Activate شده.

اگه بخواهیم دستوراتی که بصورت تئوری گفتیم رو در عمل بیاریم همچین کدی میشه.

ما یک تابع تعریف کردیم که ورودیش یک function هست که وقتی تم Activate شد فراخوانی میشه. در خط اول داخل تابع اومدیم مقدار Flag ی که تعریف کردیم رو خوندیم اگه مقدار از قبل وجود داشت که هیچ، یعنی تم از قبل فعال شده است. اگه وجود نداشت یعنی تم داره برای اولین بار فعال میشه. بعدش میام مقدار فلگ رو به دیتابیس اضافه میکنیم. و تابعی که از ورودی دریافت شد رو اجرا می کنیم(فراخوانی می کنیم) با دستور call_user_func

برای استفاده از این تابع باید به این صورت عمل کرد

در هنگام Activate شدن تم کدهای داخل تابع user_defined_func_name اجرا خواهد شد.

حالا رسیدیم به قسمت Deactivate شد تم. ما برای Deactive تم ورد پرس می تونیم براحتی از اکشن switch_theme استفاده کنیم . این اکشن موقعی که تم داره عوض میشه جزء آخرین توابعی هست که فراخوانی میشه. ولی چرا نمی تونیم به تنهایی از این تابع استفاده کنیم؟ چون باید اطلاعات (یا همون Flag) مربوط  به اکتیو کردن تم رو هم حذف کنیم. پس برای اینکار می آیم یه تابع به این صورت تعریف میکنیم

در ابتدا یه تابع تعریف کردیم و داخل اومدیم با تابع create_function یک تابع به صورت دستی ساختم که کار این تابع حذف Flag قبلی که موقع اکتیو شدن تم ست شده بود رو حذف کنیم و بدش به اکش switch_theme تابعی که از ورودی میاد رو متصل کردیم. نحوه ی استفاده از این تابع هم بدین صورته:

 

در انتها امیدوارم این چند تابع به کارتون بیاد و بتونید از اونا استفاده کنید. اگه سوالی داشتید در خدمتم :-)