۳ amir rad
ارسال چند آرگومان برای چند اکشن هوک در زمان اجرا
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۱۴ خرداد ۱۴۰۲

با سلام و وقت بخیر.

فرض کنید که ما 2 تا تابع داریم با اسم myFunc1 و myFunc2 که هرکدوم یک پارامتر دارن و اومدیم و اینها رو به myHook هوک کردیم:

function myFunc1(string $func1Arg){
echo  $func1Arg;}
function myFunc2(string $func2Arg){
echo $func2dArg;}
add_action('myHook','myFunc1');
add_action('myHook','myFunc2');

چجوری باید در زمان اجرا 2 تا آرگومان رو جوری بفرستیم که اولین آرگومان به myFunc1 ارسال بشه و دومین آرگومان به myFunc2 ؟

با سلام و وقت بخیر

به نظر میرسد یا سوال را اشتباه مطرح کردید یا اینکه درک مناسبی از ماهیت هوک‌های وردپرس پیدا نکردید.

در کدی که ضمیمه کرده اید، شما در حال استفاده از add_action هستید یعنی به یک هوک به نام myHook که از قبل تعریف شده است شما دو قلاب میزنید و تابع‌های خودتان را اضافه می‌کنید، حال اگر در تعریف اکشن مد نظر شما پارامتر ورودی وجود داشته باشد به تابع شما ارسال میشود اگر نه شما هیچ ورودی نخواهید داشت

به کد زیر دقت کنید:

do_action('myHook', $data);

اگر اکشن مد نظر به این حالت تعریف شده باشد شما در هر دو تابع myFunc1 و 2 به متغییر $data دسترسی دارید در غیراینصورت شما هیچ دسترسی به داده ندارید چون در بدنه اکشن تعریف نشده است.

امیدوارم متوجه شده باشید

بهنام مرادی ۱۷ خرداد ۱۴۰۲، ۰۷:۳۳

ممنون ولی من متوجه این توضیحات بودم سوالم چیز دیگه ای بود، سوال من اینجاست: در زمانی که هوک رو با do_actionاجرا میکنیم یعنی:

do_action('myHook', $data);

این $data آرگومان/آرگومان هایی هست که در نهایت به تابعی که به myHook هوک کردیم ارسال میشه یعنی اگه یه دونه تابع myFunc1 بود آرگومان‌ها رو به همون تعدادی که برای myFunc1 تعریف شدن به do_action میدادیم؛ ولی سوال من اینجاست که من دوتا function رو با add_action به myHook هوک کردم که هرکدوم از این دو تابع پارامترهای خاص خودشون رو میخوان که حتی ممکنه تو تعداد هم فرق داشته باشن. چجوری باید در زمان استفاده از :

do_action('myHook', $data);

آرگومان‌ها روجوری ارسال کرد که مثلا اولین آرگومان به myFun1 ارسال بشه و دومین آرگومان به myFunc2 ؟ یا اصلا میشه همچین کاری کرد؟

به عنوان مثال من کد بالا رو پیاده کرده بودم به شکلی که myFunc1 دوتا پارامتر براش تعریف کردم وmyFunc2 رو یک پارامتر و جفتشون رو به myHook وصل کردم. در زمان استفاده از do_action وقتی 3 تا آرگومان رو بهش پاس دادم فقط به مقدار دوتا آرگومان اول دسترسی داشتم انگار که چون اولین تابعی که به myHook هوک کردم دوتا پارامتر براش تعریف شده بود در نهایت do_action این هوک هم فقط دوتا آرگومان اول رو لحاظ میکرد. امیدوارم منظورم رو رسونده باشم.

amir rad ۱۷ خرداد ۱۴۰۲، ۲۱:۴۵

با سلام مجدد

اجازه بدید توضیح عمیق‌تری از هوک بدم بهتون:

ببینید هوک‌های وردپرس عملیات نشانه گذاری یک لاین از اجرای کد یا مقادری در روند برنامه را انجام میدهند که اگر تابعی به این هوک قلاب شده بود در همان مرحله از پردازش سیستم انجام شود.

با این تعریف در حقیقت تعریف کردن اکشن اصلا وابسته به قلاب هایی نیست که بعدا قرار هست به ان اضافه شود » وقتی ما در بخش خاصی از کدها do_action تعریف میکنیم یعنی قصد داریم هر فانکشنی به این اکشن اضافه شد در این بخش از برنامه اجرا شود.

---

خب حالا برگردیم به سوال شما » شما میفرمایید اگر من دو function را به یک اکشن هوک کردم هر کدام ورودی خودشون رو میخوان! این درخواست به نوعی اشتباه است » اصل در تعریف هوک‌ها داده ای هست که قرار هست برروی ان تغییرات اعمال شود نه نیاز فانکشن شما » من یک داده ای دارم که ممکن است نیاز باشد توسط اکشن‌ها مورد تغییر قرار گیرد پس برای ان یک اکشن یونیک تعریف میکنم

اگر داده دومی رو نیاز دارید که تغییر کند باید برای ان هم اکشن تعریف کنید.

امیدوارم متوجه شده باشید

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

بهنام مرادی ۱۹ خرداد ۱۴۰۲، ۰۸:۴۲