در این پست قصد داریم در رابطه با هوک وردپرس و تابع apply_filters وردپرس صحبت کنیم و کارایی آنها را با هم بررسی کنیم. اگر قصد دارید که برای وردپرس افزونهای بنویسید یا پوستههای حرفهای طراحی کنید یکی از مواردی که به آن شدیدا نیازمندید شناخت هوک و apply_filters وردپرس است. پس اگر به دنبال طراحی هستید حتما این پست را با ما همراه باشید…
apply_filters وردپرس
بهتر است قبل از اینکه با تابع apply_filters وردپرس آشنا شویم، کمی در مورد هوک صحبت کنیم و ببینیم به چه معناست و چه کاری انجام میدهد. در واقع هوک یا hook در زبان انگلیسی به معنای قلاب بوده اما در به زبان وردپرس نوعی تابع است که با کمک آن میتوان متن یا بخشی را فیلتر کرد. در واقع هوک به دو بخش Action و Filter تقسیم میشود. هر کدام را به اختصار معرفی میکنیم:
Action:
زمانی اجرا میشود که اتفاق خاصی در وردپرس رخ داده باشد. مثلا زمانی که کاربر در سایت وردپرسی ثبت نام کرده یا پستی منتشر میشود و امثال اینها.
دو نمونه از معروفترین اکشنها ()wp_head و () p_footer هستد که در اکثر قالبها دیده میشوند. ()wp_head در فایل header.php قرار دارد و () p_footer در فایل footer.php که البته از کد آنها نیز میتوان متوجه این موضوع شد.
Filter:
در فیلتر موضوع متفاوت است و زمانی کاربرد دارد که بخواهیم قبل از نمایش یک پست در سایت تغییراتی بر روی آن اعمال کنیم یا قبل از ذخیره یک مطلب در دیتابیس آن را ادیت کنیم.
مهمترین نمونهای که در این بخش موجود بوده فیلتر apply_filters وردپرس است که بیشتر به مبحث امروز ما بر میگردد و قرار است مورد بررسی قرار گیرد.
نکته: در واقع ما از اکشن استفاده میکنیم تا توابعی را به بخش دلخواهی از کد ( کد هسته یا کد قالب وردپرس) نسبت دهیم.
برای مثال بعضی از پلاگینها برای اضافه کردن کد دلخواهشان به قسمت head وبسایت از اکشن wp_head استفاده میکنند.
جهت روشن شدن توضیحات بالا چند مثال میزنیم:
فرض کنید شما میخواهید به انتهای تمای پستهای وبسایت یک متن ثابت اضافه کنید برای این کار حتما پلاگینی وجود دارد اما شما به راحتی میتوانید از طریق فیلترها این کار را انجام دهید.
در وردپرس فیلتری به اسم the_content موجود است که توسط این فیلتر شما میتوانید به محتوای پستهای وبلاگ قبل از نمایش مطلبی را اضافه کنید.
در فایل functions.php یک تابع دلخواه برای اضافه کردن مطلب تعریف میکنیم :
</p> <pre class="brush:php">function matlab($content){ if(is_single()){ $content.='<p class="matlab">نوشته تازه اضافه شده توسط فیلتر</p>'; return $content; } return $content; }
پس از تعریف تابع دلخواه توسط دستور زیر تابع را به فیلتر the_content نسبت می دهیم :
add_filter('the_content','matlab');
حال نوشته “این یک متن ثابت است ” به انتهای تمامی پستها اضافه میشود .
در انتها برای نمایش کاربرد اکشنها با استفاده از اکشن ()wp_head برای کلاس matlab که در بالا تعریف کردیم style تعریف میکنیم
در این مورد هم ابتدا یک تابع دلخواه تعریف کرده سپس به اکشن ()wp_head نسبت میدهیم:
function style(){ echo '<style type="text/css">.matlab{background-color:#CCC;border:#000 3px dashed;}</style>'; } add_action('wp_head','style');
apply_filters وردپرس
تابع apply_filters وردپرس یکی از توابع مهم در هوک به حساب میآید که در واقع در هسته وردپرس و بعضی از افزونهها وجود داشته و امکان اتصال تابع را ایجاد میکند. نمونه کدی که در زیر آورده شده میتواند مثال خوبی برای عملکرد آن در بخش محتوا باشد:
</p> <p dir="RTL" style="text-align: justify;">$content = apply_filters( 'the_content', $content );</p> <p dir="RTL" style="text-align: justify;">
با توجه به قطعه کد بالا میتوانیم مطلب مورد نظر را که به کمک تابع apply_filters وردپرس به قسمت ‘the_content’ وصل کرده و تغییر دهیم. به صورت قطعه کد زیر:
</p> <p dir="RTL" style="text-align: justify;">add_action( 'the_content', 'Hamyarwp_english2persian' );</p> <p dir="RTL" style="text-align: justify;">
پس توجه کنید هر جا که خواستید امکان اتصال تابع را ایجاد کنید باید از تابع apply_filters وردپرس استفاده کنید و به صورتی که خدمت شما توضیح دادیم عمل کنید. این تابع برای افزونه نویسی مهم بوده و کارایی زیادی دارد.
توجه: شما میتوانید لیست سایر اکشن ها و فیلتر ها را مشاهده کنید.
رسول
ببخشید من از ثابت
define( ‘wp_post_revisions’, false );
و اکشن
function disableAutoSave(){
wp_deregister_script(‘autosave’);
}
add_action( ‘wp_print_scripts’, ‘disableAutoSave’ );
که تو تموم سایتا برای غیر فعال کردن “رونوشت” معرفی شده استفاده کردم ولی بازم غیر فعال نمیشه.دلیلشو شما نمی دونید؟
در مورد سوال قبلی فقط apply_filter رو توضیح بدین ممنون میشم.بقیشو بیشترشو می دونم.
بازم ممنون.
رسول
البته مشکل رونوشت و ذخیره خودکار حل شد .باید
define( ‘wp_post_revisions’, false ); با حروف بزرگ میبود
رسول
سلام.خسته نباشید.میشه در یک پست تکمیلی یا همینجا تفاوت و کاربرد هر کدوم از اینا رو توضیح بدین که این اموزش تکمیل بشه.مثلا من می خوام بدونم تفاوت apply_filter با add-filter چیه؟یا یک منبع فارسی معرفی کنید.چون همه جا فقط تفاوت و کاربرد فیلتر و اکشن روگفته. ممنون
has_filter()
add_filter()
apply_filters()
apply_filters_ref_array()
current_filter()
remove_filter()
remove_all_filters()
doing_filter()
has_action()
add_action()
do_action()
do_action_ref_array()
did_action()
remove_action()
remove_all_actions()
doing_action()
بهاره کوهستانی 11 سال عضو همیار وردپرس
سلام
دوست عزیز بررسی میکنم و اگر موردی مناسب دیدم حتما روی سایت قرار میدم
سعید
بابا خوب چرا اینطوری میکنی؟شما که نظر من رو تائید کردی خوب یه آره یا نه هم میگفتی مگه چیزی ازت کم میشد خوش انصاف؟
سعید
سلام.
ببخشید در واقع باید این دو تا کد رو به فانکشن اضافه کنم؟
function matlab($content){
if(is_single()){
$content.=’نوشته تازه اضافه شده توسط فیلتر’;
return $content;
}
return $content;
}
و
add_filter(‘the_content’,’matlab’);
آره؟ یعنی هیچ چیز دیگه ای نمیخواد؟ ترو خدا جواب بده!
عباس شکیب آنلاین
سلام . بسیار عالی بود . ممنون .
امین
سلام ممنون !!
سهیل اقبالی 55 سال عضو همیار وردپرس
سلام
خواهش میکنم
علی حاجی محمدی 14 سال عضو همیار وردپرس
آقا سهیل به راستی مطلب جالب و سرآغاز خیلی از کار های تابعی بود !
سهیل اقبالی 55 سال عضو همیار وردپرس
ممنون علی آقا
سعی میکنم در ادامه پست های مفید تری ارائه بدم.
حسین راد
سلام.خیلی خوب بود.
اتفاقا امروز داشتم همین اکشن ها وفیلترها رو جستجو میکردم که دیدم هیلترینگ نمیزاره.
یه سوال:
این هوک ها همون نسل بعدی هک ها هستند دیگه؟یا من اشتباه فکر میکنم؟
سهیل اقبالی 55 سال عضو همیار وردپرس
سلام
ممنون از نظرتون
در واقع من نمی دونم منظور دقیق شما از هک چیه؟
اما هوک در وردپرس امکانی را فراهم میکنه که شما بتونید بدون دستکاری در فایل های هسته وردپرس یک سری کارهای مد نظرتون را انجام بدید.
رضا فرخی
سلام
مطلب بسیار خوبی بود
از روش های دیگه هم میشود استفاده کرد.
ممنون.
سهیل اقبالی 55 سال عضو همیار وردپرس
سلام
ممنون از شما
مهکام
ممنون! مطلب خوبی بئذ
سهیل اقبالی 55 سال عضو همیار وردپرس
ممنون