تعداد بازدید: 2055

query_vars در وردپرس

در این مقاله قصد داریم تا در رابطه با query_vars یا همان متغیر های نهان در url صحبت کنیم.اگر شما از ساختار ساده در permalink استفاده کنید به طور مثال https://gnutec.net/?p=123 می تونید query_vars رو در اون ها ببینید مثلا همین p که نشون دهنده پست جاری است. یا زمانی که جستجو در وب سایت اتفاق می افته شما در لینکتون متغیر s رو دارید که اون هم یک query_vars است که نشون دهنده کلید جستجو شده در وب سایت هست.https://gnutec.net/?s=abolfazl این یک نمونه از لینک جستجو در وردپرس است.

خوب حالا اگر از ساختار clean در permalink هامون استفاده کنیم دیگه به صورت مستقیم این query_vars رو نمی تونیم ببینیم اما کماکان query_vars ها موجود هستند و ما می تونیم با استفاده از لینک ها به اون ها دسترسی داشته باشیم.

پس به صورت کلی پارامتر هایی که به صورت POST و یا GET و در لینک ما موجود هست رو query_vars می گیم.

دقت داشته باشید که ما با استفاده از query_vars می تونیم به سرور درخواست بدیم و محتوای وب سایت رو ببینیم . نام این public_query_vars هستش که در زمان ساخت پست تایپ هم به اون اشاره شد که اگر برابر true قرار می گرفت query_vars مربوط به اون در لیست public_query_vars قرار می گرفت و ما می تونستیم از طریق url به محتوای پست تایپ دسترسی داشته باشیم.

پس ما می تونیم task هایی رو با توجه به متغیر های موجود در url به اجرا در بیاریم.

یه سری query_vars در وردپرس به صورت رزرو شده هستند که ما با استفاده از اون ها می تونیم به محتوای وب سایت دسترسی داشته باشیم. هر چه که غیر از این موارد توسط ما به اون اضافه میشه custome_query_vars است که برای افزودن custom_query_vars ما راه های متفاوتی داریم که یکی از اون ها افزودن query_vars با فیلتر query_var است.

query_var ها یکی method از متغیر سراسری $wp_query می باشند . اگر شما این اجزای این شی رو پرینت بگیرید می تونید query_var های اون رو ببینید.

نکته : متغیر سراسری $wp_query  یک شی ساخته شده از کلاس WP_Query هست که با توجه به مکانی که فراخوانی میشه می تونه مقادیر مختلفی داشته باشه به طور مثال اگر در صفحه single.php فراخوانی بشه شی پست جاری هست.

نمایش query_vars در وردپرس با استفاده از $wp_query

<?php
global $wp_query;
$object = $wp_query->query_vars;
//print query vars as list
print_r($object);

query_var ها رو می تونید در لینک مشاهده کنید. به طور مثال http://example.com?p=1 اما اگر از ساختار های منظم لینک ها مثل %postname% استفاده کنید دیگه query_var ها برای شما قابل مشاهده نخواهند بود(ولی هنوز موجود هستند و قابلیت خودشون برای نمایش محتوا رو دارند). وردپرس برای حل این مشکل فیلتری رو به شما ارائه میده که می تونید query_var های دلخواه خودتون رو به لیست query_var های موجود اضافه کنید.

افزودن query_vars با فیلتر query_var

<?php 
function custom_query_vars_filter($vars) {
  $vars[] = 'location';
  $vars[] = 'department';
  return $vars;
}
add_filter( 'query_vars', 'custom_query_vars_filter' );

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

راه دیگری که میشه این query_var ها رو تعیین و بدست آورد استفاده از تابع add_rewrite_rule است که یه قانون درست می کنه که اگر لینک به شکل خاص اومد query_var ما رو بشناسونه و مقدار دهی کنه ، که این مورد در جلسه بررسی rewrite API در وردپرس کاملا بررسی می شه.

نکته مهم : با اعمال فیلتر بالا اگر query_var ها رو نمایش بگیرید نمی تونید مواردی که اضافه کردید رو ببینید و تنها در صورتی موارد بالا (department , location) رو می تونید ببینید که یا در لینک پارامتری از نوع GET و هم نام با query_var داشته باشید یا با استفاده از تابع add_rewrite_rule این پارامتر رو هم نام با query_var مقدار دهی کرده باشید.

شما با قطعه کد زیر می تونید به query_var خودتون دسترسی داشته باشید.

<?php
global $wp_query;
$location = $wp_query->query_vars['location'];
$department = $wp_query->query_vars['department'];

 

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

set_query_var

<?php set_query_var( string $var, mixed $value ); ?>

همینطور که می بینید این تابع از دو قسمت var , value تشگیل شده که همون متغیر و مقدار متغیر هست که می تونید اون ها رو در زمان لازم set کنید.

نکته : یکی از کاربردهای این تابع زمانی هست که ما قراره از تابع get_template_part استفاده کنیم . با استفاده از این تابع می تونیم یک پارامتر به فایلی که قراره فراخوانی بشه بفرستیم .

get_query_var

این تابع برای گرفتن public_query_var از مقادیر شی متغیر سراسری $wp_query  است . به عبارت دیگه این تابع مقدار query_var رو با توجه به var میگیره .

<?php get_query_var( $var, $default ) ?>

var همون نام query_var هست و متغیر default مقداری هست که اگر اون متغیر set نشده بود برمی گردونه.

به طور مثال به وسیله این تابع می تونید صفحه pagination رو بگیرید:

<?php  $paged = get_query_var( 'paged', 1 );  ?>

add_query_arg

<?php
add_query_arg( 
array( 
'name1' => 'value1',
'name2' => 'value2'
), 
$url
);

 

این تابع یه راه ساده رو برای افزودن query_var رو به هر URL رو فراهم می کنه . این تابع سه پارامتر می گیره:‌

  • name : نام متغیر که به عنوان query_var قراره به url اضافه بشه.
  • value : مقدار متغیری که در پارامتر بالا تعیین کردیم.
  • URL : لینکی که قراره متغیر هایی که گفتیم به اون متصل بشن . به طور پیش فرض لینک صفحه جاری است.

به طور مثال اگر شما بخواهید لینک http://example.com/?view=list رو داشته داشته باشید.میتونید تابع زیر در وردپرس استفاده کنید.

<?php echo home_url('?view=list'); ?>

راه دوم استفاده از تابع add_query_args هست که می تونید به شکل زیر از اون استفاده کنید.

<?php
add_query_arg( 
array( 'view' => 'list' ), 
home_url()
);

خوب استفاده از این تابع به جای دستی وارد کردن query_var ها چه فایده ای داره ؟

  • این تابع مطمئن تره یعنی از هر گونه برخورد جلوگیری می کنه و نمیزاره که متغیر های شما به فنا بره. به طور مثال خودش چک می کنه که برای افزودن متغیر جدید از ? استفاده کنه یا & .
  • در استفاده از این تابع شما نیاز به url_encode_deep ندارید و این کار رو خودش انجام میده.
  • کار با این تابع خیلی ترو تمیز تره . یعنی یه آرایه برای نام پارامتر ها و یه آرایه برای مقدارشون.
  • اگر مقدار پارامتر url رو خالی بزارید url صفحه جاری رو بهش اشاره می کنه.

نکته پایانی و مهم : ما در وردپرس امکان ساخت برگه با ساختار محتوای static رو داریم . اگر بخواهیم که ساختار برای ما در برگه dynamic بشه یعنی بدون خروج از برگه تغییراتی رو اعمال کنیم (مثل تغییر نحوه مرتب سازی یا تغییر محتوا – که نمونه اش رو در برگه حساب کاربری ووکامرس دیدید) باید از query_vars استفاده کنیم . حال این که اگر بخواهید متغیر های جدید (query_vars) به صورت ساده نمایش داده بشن با استفاده از add_query_arg این کار رو انجام میدید . اما اگر مایل باشید تا لینک شما به صورت clean بمونه می تونید از rewrite API در ورد پرس استفاده کنید.

 

مطالب مشابه

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

پایگاه داده وردپرس

در این مقاله قصد داریم تا پایگاه داده وردپرس ۴.۴ رو بررسی کنیم. پایگاه داده این نسخه از وردپرس تا mysql نسخه 5.0.15 و...

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

WP Comment

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

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

Ajax در وردپرس

ajax یک درخواست به سرور (request) و دریافت پاسخ (Response) بدون refresh صفحه از طریق شی xmlHttpRequest است. Request...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای query_vars در وردپرس

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

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