آموزش کدهای وردپرس, آموزش وردپرس

هوک وردپرس چیست؟ چطور از Hooks در وردپرس استفاده کنیم؟

هوک وردپرس چیست؟

قلاب ، چنگک یا هوک وردپرس ویژگی است که به شما امکان می دهد بدون تغییر فایل در هسته وردپرس، یک رویه را دستکاری کنید. هوک را می توان هم برای اقدام (هوک اکشن) و هم فیلتر (هوک فیلتر) استفاده کرد.

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

هوک وردپرس چیست؟

هدف از هوک

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

در اینجا مثالی از قلاب در وردپرس آورده شده است:

function mytheme_enqueue_script() 
{wp_enqueue_script( 'my-custom-js', 'custom.js', false );}
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_script' );

مثال بالا نشان می دهد که هوک برای اتصال عملکرد mytheme_enqueue_script با عملکرد wp_enqueue_scripts action ایجاد شده است.

این قلاب اقدام جدیدی را در سایت شما ایجاد می کند، بنابراین به آن هوک اقدام (action hook) گفته می شود.

هوک ها اغلب در ساخت اجزای افزونه برنامه کاربردی استفاده می شوند.

این نه تنها در سیستم های مدیریت محتوا (CMS) مانند وردپرس مورد استفاده قرار می گیرد بلکه معمولاً در تجارت الکترونیکی و سایت های اینترانت درون سازمانی نیز مورد استفاده قرار می گیرد.

علاوه بر این، همانطور که در بالا ذکر شد، هوک ها به دو دسته تقسیم می شوند: اکشن و فیلتر. هوک اکشن برای اضافه کردن یک فرآیند استفاده می شود، در حالی که توابع هوک فیلتر برای تغییر یا ویرایش مقدار یک فرآیند استفاده می شود.

چگونه می توان از هوک وردپرس استفاده کرد؟

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

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

ایجاد هوک اکشن

برای افزودن هوک اکشن ، باید عملکرد افزونه add_action () را در افزونه وردپرس فعال کنید. این عملکرد را می توان با نوشتن الگوهای زیر در فایل های functions.php خود فعال کرد:

add_action(the 'function name of target_hook', 'The_name_of_function_you_want_to_use' ,'priority_scale')

همانطور که در بالا مشاهده کردیم، قلاب ها از مقیاس اولویت برای عملکرد درست استفاده می کنند. این مقیاس یک مقدار معمولی اتوماتیک است که بر اساس مقیاس 1 تا 999 انجام می شود. این تقدم ترتیب برای توابع مرتبط با آن هوک خاص را تعریف می کند.

مقدار اولویت پایین تر بدین معنی است که عملکرد زودتر اجرا می شود، در حالی که عملکرد بالاتر بعداً اجرا می شود. مقیاس دنباله خروجی توابع نصب شده هنگام استفاده از همان target_hooks را نشان می دهد.

مقدار  priority_scale به صورت پیش فرض 10 است. شما می توانید مقیاس را مطابق با تعداد target_hooks خود تنظیم کنید.

در اینجا مثالی از هوک اکشن آورده شده است:

<?php
add_action( 'wp_print_footer_scripts', 'themefars_custom_footer_scripts' );
function webhost_custom_footer_scripts(){
?>
<script>//fill the footer scripts right here</script>
<?php
}
?>

در مثال بالا به الگو توجه داشته باشید:

  • <?php مکانی است که قلاب را برای کارکردن قرار می دهید
  • add_action دستور ایجاد قلاب عمل است
  • wp_print_footer_scripts این target_hook است که شما را به یک عملکرد جدید پیوند می دهد
  • themefars_custom_footer_scripts تابع نصب شده و به target_hook پیوند داده شده است
  • <script> بیانگر متنی است که می خواهید در target_hook نشان داده شود (در این حالت، این wp_print_footer_scripts است)

ایجاد هوک فیلتر

هوک فیلتر برای اصلاح، فیلتر یا جایگزینی یک مقدار با مقدار جدید استفاده می شود. می توانید با استفاده از عملکرد apply_filters() هوک فیلتر ایجاد کنید.

دقیقاً مانند استفاده از هوک اکشن ، عملکردی نیز دارد که با عملکردهای هوک فیلتر مربوطه، مقدار را فیلتر می کند (apply_filter).

علاوه بر این، این وظیفه را دارد که یک هوک فیلتر اضافه کند تا با عملکرد دیگری (add_filter) همراه باشد.

در اینجا نمونه ای از هوک فیلتر وجود دارد:

$score = 100;
echo "Current score is : ". apply_filters( 'change_score', $score );
  • $score = 100 مقدار نمره اولیه است
  • echo “Current score is: ” نشان دهنده اسکریپتی است که شما نشان می دهید
  • apply_filters دستور ایجاد هوک فیلتر است
  • ‘change_score’, $score تابعی که باید فیلتر شود

این فیلتر است:

add_filter( 'change_score', 'function_change_score' );
function function_change_score( $score ){
? $score+=100;
? return $score;
}
  • Add_filter برای اتصال هوک فیلتر با یک عملکرد جدید ایجاد شده است
  • Change_score‘ هوک هدف است که اصلاح خواهد شد
  • Function_change_score‘ یک تابع جدید است که بر مقدار اولیه تأثیر می گذارد
  • ? $score+=100;  کدی است برای افزودن مقدار بیشتر به مقدار اولیه ($score)
  • ? return $score;  کد برای نشان دادن مقدار جدید در پایان است

نتیجه باید به شکل زیر باشد:

Current score: 200

حذف اقدامات و فیلترها

اگر می خواهید دستور add_action() یا  add_filter() را در کد وردپرس خود غیرفعال کنید، می توانید از remove_action() و remove_filter() استفاده کنید.

این کدها اساساً راهی برای از بین بردن برخی ازعملکردهای  اقدام ها یا فیلتر هستند. این امکان را به شما می دهد افزونه ای را تغییر دهید که قلاب های غیر ضروری بیش از حد زیادی داشته باشد که می تواند بهینه سازی سایت شما را مختل کند.

همین الان ممکن است این را بپرسید؛ “چرا فقط این کدهای غیر ضروری حذف نمی شوند؟”

خب، اگر از کدهای خود استفاده کنید، مطمئناً گزینه مناسبی است.

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

در اینجا مثالی از remove_action() در وردپرس آورده شده است:

remove_action( 'wp_print_footer_scripts', 'themefars_custom_footer_scripts', 11 );
add_action( 'wp_print_footer_scripts', 'themefars_custom_footer_scripts_theme', 11 );
function themefars_custom_footer_scripts_theme()
{
?>
<script>//example of output by theme</script>
<?php
}

مثال بالا نشان می دهد که remove_action برای حذف اسکریپت های پیش فرض فوتر وردپرس و جایگزینی آن با موضوع اسکریپت های فوتر سفارشی themefars استفاده می شود.

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

علاوه بر این، در اینجا مثالی از remove_filter آورده شده است:

remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
}

مثال بالا نحوه غیرفعال کردن wp_staticize_emoji_for_email را نشان می دهد که ایموجی ها را به تصاویر ثابت تبدیل می کند.

سپس آنها را با disable_emojis_tinymce جایگزین می کند که ویژگی emoji را در وردپرس غیرفعال می کند ( emoji باعث کند شدن سایت می شود زیرا درخواست HTTP اضافی را ایجاد می کند).

علاوه بر این ، شما همچنین می توانید ازremove_filtercommand برای غیرفعال کردن چندین فیلتر در یک دنباله استفاده کنید. به عنوان مثال:

function disable_emojis() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
add_action( 'init', 'disable_emojis' );
}

کد بالا با هدف از بین بردن عملکرد emoji به طور کامل در وردپرس است. به وضوح نشان می دهد که محدودیتی در تعداد دستورات remove_filter که می توانید در functions.php تعبیه کنید وجود ندارد.

نمونه های عملی

همانطور که قبلاً نیز اشاره کردیم، قلاب های زیادی وجود دارد که می توانید از آنها برای ایجاد توابع سفارشی وردپرس استفاده کنید. در اینجا برخی از آنها ذکر شده است:

admin_post_thumbnail_size

این هوک فیلتر تصویری کوچک از پست شما را در “تصویر شاخص” نمایش می دهد. سه پارامتر وجود دارد که با توابع مرتبط هستند: $size, $thumbnail_id, و $post .

هوک باید به شکل زیر باشد:

$size = apply_filters( 'admin_post_thumbnail_size', $size, $thumbnail_id, $post );

به خاطر داشته باشید که پارامتر $size بسته به نیاز شما قابل تغییر است. به عنوان مثال، اگر مایل هستید اندازه تصویر کوچک را 240 * 240 پیکسل تنظیم کنید، می توانید این کد را بنویسید:

$size = apply_filters( 'admin_post_thumbnail_size', 240, $thumbnail_id, $post);

همچنین می توانید با اضافه کردن عملکرد array () یک اندازه دلخواه برای تصویر کوچک خود تنظیم کنید.

$size = apply_filters( 'admin_post_thumbnail_size', array(240, 400), $thumbnail_id, $post);

تابع array () در بالا مجموعه تصاویر کوچک شما را در 240 * 400 پیکسل نشان می دهد. شما باید بهترین سایز متناسب با صفحه خود را پیدا کنید.

after_password_reset

این هوک اکشن هنگام تنظیم مجدد رمز عبور خود فعال می شود. هوک از دو پارامتر تشکیل شده است. $user و $new_pass.

هوک باید به شکل زیر باشد:

do_action( 'after_password_reset', $user, $new_pass );

customize_loaded_components

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

این توابع هستند که روی پرونده های اصلی کار می کنند، مانند wp-activate.php, wp-config-sample.php, یا wp-settings.php. در حالی که مؤلفه مجموعه ای از ویژگی های وردپرس است که یک عملکرد خاص در ابزارک را نشان می دهد.

با این حال، توجه به این نکته ضروری است که customize_loaded_components ها نمی توانند در یک قالب اضافه شوند، زیرا این فقط در مرحله “افزونه های بارگذاری شده” فعال می شود.

هوک از دو پارامتر تشکیل شده است: $components و $this . باید مثل این نوشته شود:

$components = apply_filters( 'customize_loaded_components', array( 'widgets', 'nav_menus' ), $this );

پارامتر $components، دسته ای از توابع اصلی برای بارگذاری است، در حالی که $this به شیء در کلاس موجود اشاره دارد.

می توانید تابع array () را برای تعیین اینکه کدام مؤلفه ها را حذف کنید، سفارشی کنید. مثال بالا نشان می دهد که widgets (ابزارکها) و nav_menus  (منو ناوبری) مؤلفه هایی هستند که از فرآیند اصلی خارج شده اند.

جمع بندی

برای خلاصه کردن همه این موارد، هوک یا قلاب ها ویژگی هایی برای تغییر پیکربندی پیش فرض سایت وردپرس شما هستند. این امکان را به شما می دهد بدون تغییر فایل اصلی، توابع سفارشی را اضافه یا فرآیندهایی را غیرفعال کنید.

هوک را می توان به دو دسته تقسیم کرد: اکشن و فیلتر.

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

هوک اکشن برای ایجاد کارکردهای جدید استفاده می شود، در حالی که از هوک فیلتر برای تغییر کد موجود در فایل function.php استفاده می شود.

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

وقتی صاحب مهارت شوید، می توانید با این ویژگی افزونه های خود را ایجاد کنید. موفق باشید!

(0) نظرات کاربران

  1. سعید گفت:

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

    // Showing related posts by current post category in Posts Widget
    add_action( ‘elementor_pro/posts/query/my_custom_filter’, function( $query ) {
    // Get current post category
    $current_post_id = get_queried_object_id();
    $current_cat = get_the_category( $current_post_id );

    if( empty( $current_cat ) ) {
    return;
    }

    // Modify the query
    $query->set( ‘category__in’, [ $current_cat[0]->term_id ] );

    // Make sure we don’t get current post
    $not_in = $query->get( ‘post__not_in’ );
    $not_in[] = $current_post_id;

    // Modify the query
    $query->set( ‘post__not_in’, $not_in );
    } );

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *