دوره مجازی پلاگین نویسی وردپرس (جلسه 4) : بررسی hook ها در وردپرس و نحوه عملکرد آنها

دسته بندی: وردپرس
زمان مطالعه: 1 دقیقه
۱۸ فروردین ۱۳۹۵

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

 

در این جلسه خواهیم دید :

  • ایجاد ساختار پوشه های پلاگین برای نظم بیشتر کار
  • جلوگیری از اجرای کدهای مستقیم پلاگین ها
  • ایجاد ثابت های مورد نیاز در پلاگین ها
  • معرفی HOOK ها در وردپرس و نحوه عملکرد آنها
  • معرفی ACTION ها
  • معرفی FILTER ها
:: توجه

این مطلب یک جلسه از آموزش پلاگین نویسی برای وردپرس می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش پلاگین نویسی برای وردپرس

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

جلسات دوره

نظرات کاربران

پدرام فیروزکوهی

سلام خسته نباشید
اول اینکه آموزش هایی که شما و همکاران شما ارائه میدهند فوق العادس یعنی کلی آموزش تا حالا از سایت های مختلف گرفتم واقعا کاملترین آموزش ها رو شما دارید ممنونم .
استاد توی این قسمت یک مشکلی برای من پیش اومده وقتی بخوام از plugin_dir_path یا url استفاده کنم موقع اکو کردن ارور not defined function میده من فایل wp-load وردپرس رو include کردم که از اونجا لود کنه و درست شدن و نمایش داده میشن اما کد prevent direct access عمل نمکینه و چه بصورت url چه path قابل دسترسی هست . نمیدونم مشکل کجاس حتی شما فایلی رو اینکلود نکردید رو راحت اکو میشه اما برای من ارور not defined function میده ممنون میشم راهنمایی کنید.

پدرام فیروزکوهی

مشکل حل شد اشتباهی جای ‘ABSPATH’ اینجوری نوشته بودم ABSPATH فک کنم برای همین یا prevent direct access کار نمیکرد یا اگه میکرد تحت هر شرایطی چه داخل وردپرس چه مستقیم Prevent میکرد فقط اینکه اگر فایل wp-load رو اینکلود کنم تا بشه از plugin_dir_path یا url خروجی گرفت از لحاظ امنیتی مشکلی پیش نمیاد ؟

زارعی هوشیار

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

کیوان علی محمدی

سلام و ممنون از نظر لطف شما.

mehdi karimi

سلام و خسته نباشید
اقا کیوان من هنگام فعال سازی افزونه ای که نوشتم با پیغام زیر مواجه میشم:
افزونه هنگام فعال شدن٬ 29 نویسه از یک خروجی غیرمنتظره تولید کرد. اگر با پیغام خطای “headers already sent”٬ مشکلات مربوط به خوراک و یا مسائل دیگر مواجه شدید سعی کنید افزونه را غیرفعال یا حذف کنید.

حتی با utf-8 و بدون bom هم ذخیره کردم
توی فایلم هم فقط یک رشته رو echo کردم
مشکل چیه به نظرتون

کیوان علی محمدی

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

Mehdi Soli

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

کیوان علی محمدی

ممنون از شما دوست عزیز.

Mehdi Soli

سلام آقای علی محمدی عزیز، اول از همه ممنون بابت آموزش های خوبتون. دوم دچار یه سری مشکل شدم که خواستم از شما راهنمایی بگیرم. قبل از شروع به دیدن آموزش های شما، با wamp کار می کردم. در حال حاضر یه چند تا سایت رو هم سفارش گرفتم، با اون مشغول به کار هستم. آموزش های طراحی وردپرس و پلاگین نویسی رو به تازگی شروع کردم چون به شدت احتیاج داشتم تا بعضی از قسمت های تم هایی که خریده ام رو تغییر بدم و همچنین یه سری امکانات جدید برای مشتری هام اضافه کنم. چون تو آموزش ها دیدم که شما از xamp استفاده می کنید، تصمیم گرفتم که من هم روی xamp با شما جلو برم. اولین مشکل وقتی ایجاد شد که خواستم سه تا وردپرس رو با virtual host در کنار هم روی xamp بالا بیارم. متاسفانه با روشی که در فیلم های شما موجود بود، نمی شود دوتا virtual host در کنار هم بالا آورد (می تونید امتحان کنید) البته با یه سری سرچ تونستم مشکل رو حل کنم و با یه ترفند کوچیک (مثلا عوض کردن * با اسم virutal host در تنظیمات فایل httpd-vhosts.conf و …) مشکل موقتی حل شد، اما متاسفانه باز دچار مشکل شدم (به هر حال الان به همون روش سنتی استفاده Localhost در اول نام دایرکتوری حاوی سایت فعلا جلو میرم 🙁 🙁 🙁 ). ممنون میشم که در این مورد راهنمایی ام فرمایید. مشکل دوم در عوض کردن پورت ها می باشد. چون wamp از قبل داشت بر روی پورت 80 کار می کرد، طبق کاری که در آموزش ها بود، جلو رفتم، اما متاسفانه apache و mysql هیچکدام بالا نمی آمدند، از روی UI این کار رو انجام دادم اما بعد که نتیجه نگرفتم، بصورت دستوری فایل های تنظیمات apache رو عوض کردم که باز هم جواب نداد. از اونجا که مهندسا بالاخره یه راهی پیدا می کنند 😀 😉 برعکس انجام دادم، یعنی پورت های wamp رو گذاشتم رو 8080 و 3307 و با این کار هر دو به خوبی و خوشی بالا اومدند. ممنون میشم اگه این رو راهنمایی بفرمایید که چرا وقتی پورت ها رو عوض می کنیم، apache و mysql هیچکدام بالا نمی آیند (این رو روی دو تا کامپیوتر هم تست کردم، اما متاسفانه نتیجه کاملا مشابه هست و apache و mysql هیچکدام به درستی کار نمی کنند، در واقع نه داشبورد زمپ بالا میاد و نه صفحه پی اچ پی مای ادمین. روی کامپیوتر دوم، اصلا wamp نصب نبود و فقط با یه برنامه مثل skype پورت 80 رو اشغال کردم تا نتیجه رو بررسی کنم و مطمئن بشم اشکال از سیستم بنده نیست). فکر کنم خیلی زیاد شد، سوال بعدی رو میذارم تو پست بعد از این 😕 😕 😕

کیوان علی محمدی

سلام دوست عزیز. شما هر چند تا سایت بخواین به صورت دامنه مجازی بالا بیارین میتونید این کارو انجام بدین و فقط باید سعی کنید تنظیمات رو به درستی ست کنید. تغییر پورت بهتره با دقت انجام بشه. شما وقتی wamp رو دارین باید اول از اون خارج بشین و بعد xampp رو اجرا کنید. بهتره پورت ها کلا عوض نکنید مگر اینکه واقعا مجبور هستین. مثلا همین skype که مشکل ایجاد میکنه.

مسعود معینی

در صورتی که apply_filters دارای چند مقدار باشه. همونطور که خودتون مثال زدید مثل $test1 یا $test2 .
در این صورت هنگام تعریف تابع هم باید دو آرگومان قرار بدیم. سوال من اینجاست برنامه چطور متوجه میشه کدوم آرگومان مربوط به کدوم مقداره ؟

کیوان علی محمدی

سلام. php برای فرخوانی توابع callback از call_user_func و call_user_func_array استفاده میکنه و در این توابع لیست آرگومان هم بوسیله func_get_args دریافت میشه. این تابع تعداد و مقدار آرگومان ها رو دریافت میکنه و به ترتیب به تابع callback منتقل میکنه. دقیقا شما به همون ترتیب که در apply_filters فرخوانی کردین در این تابع callback دریافت می کنید.

هومن کیائی

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

ح حسین

خیلی از پلاگینها هستن که بصورت free ارائه میشن ولی امکانات بیشتری دارند که در صورت خرید اون پلاگین فعال میشن . چطور میتونیم چنین قابلیتی برای پلاگینهامون در نظر بگیریم که این حالت رو روی پلاگینهامون ایجاد کنیم ؟
آیا در این دوره پلاگین نویسی مبحث REST API وردپرس هم تدریس میشه ؟
بنده دوره قالب شما رو هم شرکت کردم امیدوارم بتونم بخوبی از این آموزشها استفاده کنم .

کیوان علی محمدی

سلام میشه دیتابیس برای کدهای خریداری شده تولید کرد و کاربر بعد از خرید ازش درخواست کنید تا کد رو وارد صفحه تنظیمات کنه و بعد اون کد رو با دیتابیس خودتون تطبیق بدین و اگه درست بود امکانات ویژه فعال بشه. بله در مورد rest هم صحبت خواهیم کرد.انشالله

ح حسین

برای امنیت کد پلاگینها و یا قالب وردپرس چه راه حل مناسبی پیشنهاد میکنید ؟
آیا obfuscate کردن راه درستیه ؟ از نظر شما بهترین کار چیه تا کسی کد قالب یا پلاگین مار و مشاهده نکنه ؟
با تشکر

کیوان علی محمدی

سلام متاسفانه همه سرور ها این روش ها رو قبول نمی کنن و راه خاصی و 100٪ برای مخفی کردن کدها وجود نداره به جز روش های encrypt کردن مثل ionCube و zend gurd که این روش ها هم باید ماژول خودشون روی سرور نصب باشه و هم چنین بعضا هم مشاهده مشه که این encrypt ها هم کرک میشه.

کیوان علی محمدی

سلام این که برق سرور بره یه موردی هست که معمولا در نظر نمیگیرینش. اما برای بحث تراکنش های بانکی شما می تونید از transaction ها در mysql استفاده کنید که در صورت موفقیت آمیز نبودن rollback میشن.

ح حسین

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

کیوان علی محمدی

سلام می تونید add_action دومی در در انتهای تابع اول تعریف کنید.

پایان زمان پشتیبانی

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

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

نیاز به لاگین

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