هوک وردپرس (WordPress Hook) یکی از قابلیتهای مهم این سیستم مدیریت محتواست که به توسعهدهندگان اجازه میدهد امکانات جدیدی به سایت اضافه کنند یا رفتار بخشهای مختلف وردپرس را تغییر دهند. با استفاده از هوکها میتوان بسیاری از سفارشیسازیها را بدون ویرایش مستقیم فایلهای هسته وردپرس انجام داد.
برخی کاربران با تغییر تنظیمات قالب و افزونهها ظاهر سایت خود را شخصیسازی میکنند، اما برای ایجاد تغییرات اختصاصی در عملکرد وردپرس، استفاده از هوکها راهکار انعطافپذیری است. در این مقاله با مفهوم هوک، تفاوت اکشن و فیلتر و چند نمونه کاربردی از آنها آشنا میشوید.
هوک وردپرس چیست؟
هوک یا قلاب در وردپرس، نقطهای مشخص در روند اجرای برنامه است که توسعهدهندگان میتوانند کد خود را به آن متصل کنند. با این روش، کد اختصاصی هنگام وقوع یک رویداد اجرا میشود یا دادهای را که وردپرس در حال پردازش آن است تغییر میدهد.
برای مثال، میتوان هنگام انتشار یک نوشته، ارسال ایمیل اطلاعرسانی را به یک اکشن متصل کرد یا با استفاده از یک فیلتر، متن عنوان یا چکیده نوشته را پیش از نمایش تغییر داد.
هوکها امکان توسعه وردپرس را بدون تغییر مستقیم فایلهای هسته فراهم میکنند. با این حال، برای حفظ تغییرات در زمان بهروزرسانی قالب، بهتر است کدهای اختصاصی قالب را در پوسته فرزند یا یک افزونه اختصاصی قرار دهید.

انواع هوک در وردپرس
هوکهای وردپرس دو نوع اصلی دارند:
- اکشن (Action): برای اجرای یک کار در نقطهای مشخص از روند اجرای وردپرس استفاده میشود.
- فیلتر (Filter): برای دریافت و تغییر داده و سپس برگرداندن مقدار اصلاحشده به روند اجرای وردپرس به کار میرود.
هوک اکشن (Action Hook) چیست؟
اکشن زمانی اجرا میشود که وردپرس به نقطه مشخصی از فرایند اجرای خود برسد. کدی که به اکشن متصل میکنید میتواند کاری مانند افزودن یک منو به پیشخوان، ثبت یک رویداد، ارسال اعلان یا نمایش خروجی انجام دهد.
برای اتصال یک تابع به اکشن، معمولا از تابع add_action() استفاده میشود. شکل ساده آن به صورت زیر است:
add_action( 'hook_name', 'my_custom_function' );در این مثال، hook_name نام هوک موردنظر و my_custom_function نام تابعی است که باید هنگام اجرای آن هوک فراخوانی شود. نام هوک باید از هوکهای موجود وردپرس یا افزونه و قالب مورد استفاده باشد.
مثال اول، افزودن منوی اختصاصی به پیشخوان وردپرس
فرض کنید میخواهید یک منوی اختصاصی در پیشخوان وردپرس ایجاد کنید. هوک admin_menu برای افزودن منوهای مدیریتی استفاده میشود. نمونه زیر یک منوی ساده با عنوان «منوی اختصاصی» ایجاد میکند:
function addwebsite_custom_admin_menu() {
add_menu_page(
'صفحه منوی اختصاصی',
'منوی اختصاصی',
'manage_options',
'addwebsite-custom-menu',
'addwebsite_custom_admin_page',
'dashicons-admin-site',
6
);
}
add_action( 'admin_menu', 'addwebsite_custom_admin_menu' );
function addwebsite_custom_admin_page() {
echo '<div class="wrap">';
echo '<h1>منوی اختصاصی</h1>';
echo '<p>این صفحه نمونه برای نمایش محتوای منوی اختصاصی است.</p>';
echo '</div>';
}در این کد، تابع addwebsite_custom_admin_menu() با استفاده از add_menu_page() منوی جدیدی ایجاد میکند. آرگومان manage_options مشخص میکند که فقط کاربرانی که این مجوز را دارند، مانند مدیر سایت در نصب معمول وردپرس، میتوانند به صفحه دسترسی پیدا کنند.
تابع addwebsite_custom_admin_page() نیز محتوای صفحهای را تولید میکند که با کلیک روی منو باز میشود. در این مثال از یک صفحه ساده استفاده شده است، اما میتوان آن را با تنظیمات یا ابزارهای اختصاصی توسعه داد.
مثال دوم، افزودن محتوا بعد از سربرگ سایت
محل قرارگیری خروجی در سایت به هوکی بستگی دارد که قالب یا افزونه در اختیار شما میگذارد. برای نمونه، قالب GeneratePress هوک اختصاصی generate_after_header را ارائه میکند که میتوان از آن برای افزودن محتوا پس از سربرگ استفاده کرد.
function addwebsite_text_after_header() {
if ( ! is_front_page() ) {
return;
}
echo '<div class="custom-header-message">';
echo 'این متن فقط در صفحه نخست نمایش داده میشود.';
echo '</div>';
}
add_action( 'generate_after_header', 'addwebsite_text_after_header' );در این مثال، شرط is_front_page() بررسی میکند که صفحه فعلی، صفحه نخست سایت باشد. اگر این شرط برقرار نباشد، تابع بدون نمایش متن پایان مییابد.
نکته مهم: هوک generate_after_header مختص قالب GeneratePress است و در همه قالبهای وردپرس وجود ندارد. اگر از قالب دیگری استفاده میکنید، باید هوک مناسب همان قالب را پیدا کنید. همچنین برای خروجی قابل استفاده در سایت واقعی، بهتر است استایل CSS مربوط به کلاس custom-header-message را متناسب با طراحی سایت تعریف کنید.
هوک فیلتر (Filter Hook) چیست؟
فیلتر به شما اجازه میدهد دادهای را که وردپرس یا یک افزونه در حال پردازش آن است، پیش از استفاده یا نمایش تغییر دهید. برخلاف اکشن که برای اجرای یک کار به کار میرود، تابع متصلشده به فیلتر باید مقدار اصلاحشده را با دستور return برگرداند.
برای اتصال تابع به فیلتر از add_filter() استفاده میشود. ساختار ساده آن به این شکل است:
add_filter( 'hook_name', 'my_custom_filter_function' );فیلترها میتوانند یک یا چند آرگومان دریافت کنند. تعداد آرگومانهایی که تابع شما دریافت میکند باید با تنظیمات اتصال به هوک و مستندات همان فیلتر سازگار باشد.
مثال اول، تغییر تعداد کلمات چکیده نوشته
فیلتر excerpt_length برای تغییر طول پیشفرض چکیده نوشته استفاده میشود. در مثال زیر، طول چکیده به ۱۵ کلمه تنظیم میشود:
function addwebsite_excerpt_length( $length ) {
return 15;
}
add_filter( 'excerpt_length', 'addwebsite_excerpt_length' );وردپرس هنگام محاسبه طول چکیده، این فیلتر را اجرا میکند و تابع ما مقدار ۱۵ را برمیگرداند. این عدد تعداد کلمات است، نه تعداد کاراکترها. توجه داشته باشید که این تغییر ممکن است بر چکیدههای تولیدشده در بخشهای مختلف سایت اثر بگذارد. اگر میخواهید فقط در یک بخش خاص اعمال شود، باید شرطهای مناسب را به کد اضافه کنید.
مثال دوم، افزودن عبارت به عنوان نوشته
با فیلتر the_title میتوان عنوان نوشته را هنگام دریافت برای نمایش تغییر داد. کد زیر عبارت «عنوان: » را به ابتدای عنوان نوشتهها در بخش عمومی سایت اضافه میکند:
function addwebsite_prefix_to_title( $title ) {
if ( is_admin() ) {
return $title;
}
return 'عنوان: ' . $title;
}
add_filter( 'the_title', 'addwebsite_prefix_to_title' );در این نمونه، اگر کد در بخش مدیریت اجرا شود، عنوان بدون تغییر برگردانده میشود. در بخش عمومی سایت، عبارت موردنظر به ابتدای عنوان اضافه خواهد شد.
این مثال آموزشی ممکن است عنوانها را در بخشهای مختلف سایت، از جمله بعضی ابزارکها یا فهرستها، تغییر دهد. برای استفاده واقعی باید دامنه اجرای فیلتر را محدود کنید تا عبارت اضافی فقط در محل موردنظر نمایش داده شود. همچنین اگر چند افزونه یا قالب یک فیلتر را تغییر دهند، ترتیب اجرای آنها میتواند بر نتیجه نهایی اثر بگذارد.
تفاوت اکشن و فیلتر در وردپرس چیست؟
تفاوت اصلی این دو هوک در هدف استفاده از آنهاست. اکشن برای اجرای یک کار در زمان مشخص به کار میرود، اما فیلتر دادهای را دریافت میکند، امکان تغییر آن را فراهم میسازد و مقدار نهایی را برمیگرداند.
| ویژگی | اکشن (Action) | فیلتر (Filter) |
|---|---|---|
| کاربرد اصلی | اجرای یک عملیات | تغییر داده |
| تابع اتصال | add_action() | add_filter() |
| مقدار بازگشتی | برای اجرای اکشن به مقدار بازگشتی نیاز نیست | باید مقدار مناسب را با return برگرداند |
| نمونه کاربرد | افزودن منو به پیشخوان | تغییر طول چکیده نوشته |
نکات مهم پیش از استفاده از هوکها
- پیش از افزودن کد، از فایلها و پایگاه داده سایت نسخه پشتیبان تهیه کنید.
- کدهای اختصاصی قالب را ترجیحا در پوسته فرزند و قابلیتهای مستقل را در افزونه اختصاصی قرار دهید.
- نام هوک و آرگومانهای آن را در مستندات رسمی وردپرس یا مستندات سازنده قالب و افزونه بررسی کنید.
- کد را ابتدا در محیط آزمایشی اجرا کنید و عملکرد آن را در صفحات مختلف بسنجید.
- برای خروجی HTML، دادههای پویا را متناسب با محل استفاده پاکسازی و ایمنسازی کنید.
- از افزودن کدهای ناشناس به فایل
functions.phpخودداری کنید، زیرا خطای نحوی PHP میتواند دسترسی به سایت یا پیشخوان را مختل کند.
منابع رسمی برای یادگیری هوکهای وردپرس
برای آشنایی با هوکهای بیشتر، آرگومانها و نحوه استفاده صحیح از آنها، مستندات رسمی توسعهدهندگان وردپرس بهترین نقطه شروع است:
جمعبندی
هوکها یکی از ابزارهای اصلی توسعه وردپرس هستند و امکان افزودن قابلیت یا تغییر رفتار بخشهای مختلف سایت را بدون ویرایش مستقیم هسته فراهم میکنند. اکشنها برای اجرای عملیات در نقاط مشخصی از روند وردپرس و فیلترها برای تغییر دادهها و بازگرداندن مقدار اصلاحشده استفاده میشوند.
با یادگیری add_action() و add_filter() میتوانید بسیاری از سفارشیسازیهای وردپرس را به روشی ساختارمند انجام دهید. برای جلوگیری از خطا و تداخل، همیشه هوک مناسب را از مستندات معتبر پیدا کنید و کدهای اختصاصی را پیش از اجرا در سایت اصلی آزمایش کنید.




امتیاز بینندگان:5 ستاره
سلام ممنون بابت مطلب خوبتون
یه سوال داشتم
در این قسمت add_action( ‘admin_menu’, ‘custom_menu’ );
admin_menu یه نام اختیاری هستش یا یه آرگومان از قبل تعریف شده در ورد پرس؟