اجرای اکشن هوک ها از طریق درخواست Get و Post در وردپرس

در یکی دیگر از آموزش های کوتاه وردپرس می خواهیم ترفندی را به شما آموزش دهیم که در بسیاری از سناریوها بدردتان می خورد.

فرض کنید دو لینک یا پیوند دارید که قرار است با کلیک بر روی هر کدام از آنها اکشن هوک های سفارشی(Custom Action Hooks) متفاوتی اجرا شود.

ابتدا لینک های مدنظرمان را به صورت زیر تولید می کنیم.

<?php
  $uri1 = add_query_arg( array( 'action_name' => 'action_1' ), site_url() );
  $uri2 = add_query_arg( array( 'action_name' => 'action_2' ), site_url() );
?>

<a href="<?php echo esc_url( $uri1 ); ?>">Click Action 1</a>
<a href="<?php echo esc_url( $uri2 ); ?>">Click Action 2</a>

خروجی کدها بدین صورت خواهد بود، از تابع add_query_arg برای افزودن رشته پرس وجو(Query String) به آدرس لینک ها استفاده شده است.

<a href="https://modiredev.com?action_name=action_1">Click Action 1</a>
<a href="https://modiredev.com?action_name=action_2">Click Action 2</a>

حالا برای هر کدام از این لینک ها اکشن هوک مربوطه را تعریف می کنیم، برای این منظور از تابع add_action استفاده کردیم.

function action_1(){
    echo 'Action one triggered!';
}

add_action( 'modiredev_action_1', 'action_1' );

function action_2(){
    echo 'Action two triggered!';
}

add_action( 'modiredev_action_2', 'action_2' );

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

function trigger_get_actions(){
    $key = isset( $_GET['action_name'] ) ? sanitize_key( $_GET['action_name'] ) : null;
    if ( !empty( $key ) ) {
        do_action( "modiredev_{$key}" );
    }
}

add_action( 'init', 'trigger_get_actions' );

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

با تابع do_action می توانیم یک اکشن هوک را اجرا کنیم.

همین سناریو برای درخواست های post قابل انجام و پیاده سازی است.

function trigger_post_actions(){
    $key = isset( $_POST['action_name'] ) ? sanitize_key( $_POST['action_name'] ) : null;
    if ( !empty( $key ) ) {
        do_action( "modiredev_{$key}" );
    }
}

add_action( 'init', 'trigger_post_actions' );

امیدواریم این آموزش کوتاه برای شما مفید بوده باشد.

نظرات و سوالات کاربران

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

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