اجرای اکشن هوک ها از طریق درخواست 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' );

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

برچسب ها
سعید یاورنیا 118 نوشته 130 دیدگاه

توسعه دهنده PHP و Wordpress
توسعه وب سایت یکی از کارهایی است که تلاش می کنم تخصصم رو در اون بالا ببرم، یادگیری تکنولوژی های جدید یکی از چالش هایی است که به شدت به آن علاقمند هستم.

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

نشانی ایمیل شما منتشر نخواهد شد، بخش‌های موردنیاز با * مشخص شده‌اند.