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

rewrite API در وردپرس (قسمت اول)

اگر شما وردپرس روی وب سرویس آپاچی نصب کرده باشید قطعا از rewrite API استفاده می کنید(حتی اگر آشنایی باهاش نداشته باشید).

شاید تا به حال با redirect کار کرده باشید.زمانی که مرورگر شما رو به لینک دیگری میفرسته . یعنی وقتی لینکی رو باز می کنید location bar در مرورگر شما تغییر می کنه و شما به جای دیگری هدایت میشید.این کار توسط پی اچ پی و با تغییر http header اتفاق می افته .

rewrite هم شبیه به redirect عمل می کنه با این تفاوت که تموم این اتفاقات در پشت صحنه اتفاق می افته .(منظور از پشت صحنه تنظیمات آپاچی است)

اگر با وب سرور آپاچی آشنا باشید می دونید که با تغییر در تنظیمات این وب سرور می تونید که درخواست های کاربران از طریق url رو مدیریت کنید که این کار با قرار دادن فایل .htaccess در روت پروژه تون اتفاق می افته .

در حقیقت وب سرور عمل rewriting رو انجام میده و شما با توابع وردپرس تنها درخواست های url ها رو مدیریت می کنید.(در index.php درخواست ها مدیریت میشه)

نگاهی کوتاه به تنظیمات فایل .htaccess در وردپرس می کنیم:

  • در ابتدا چک میشه که آیا rewrite module فعال هست یا خیر ( خط ۳ )
  • بعد یک شرط رو داریم که می پرسه آیا درخواست به یک فایل مشخص داده شده ؟‌ (خط ۶)
  • بعد یک شرط رو داریم که می پرسه آیا درخواست به یک دایرکتوری مشخص داده شده ؟ (خط ۹)
  • در نهایت اگر دو شرط قبل برقرار نبود درخواست رو به index.php می فرسته و از اونجا به بعد شما می تونید با توجه به توابع وردپرس درخواست رو مدیریت کنید.(خط ۱۲)

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

خود وردپرس هم از rewrite API برای مدیریت لینک ها استفاده می کنه . یعنی وقتی درخواستی به index.php داده میشه از روی rule جاری میاد و درخواست رو تبدیل به یه سری query_variable می کنه و در نهایت کوئری مربوطه زده می شه و محتوا نمایش داده میشه.

rule جاری همون قسمت تنظیمات permalink یا پیوند های یکتا هست که شما از روی تنظیمات > پیوند های یکتا تعیین کردینش. این در پایگاه داده وردپرس فیلدی با نام rewrite_rules از جدول wp_options هست.

پس به وسیله rewrite API ما می تونیم لینک ها رو از حالت پلشت http://example.com/?p=1  به حالت مرتب و تمیز http://example.com/hello-world  در بیاریم.

rule های پیش فرض در وردپرس

در زیر rule های پیش فرض در وردپرس رو می تونید مشاهده کنید. این ها همون مواردی هستند که در تنظیمات > پیوند های یکتا تعیین کردینشون.

همون طور که می بینید ما در سمت چپ یک rule داریم و در سمت راست گفتیم چطور url با توجه به این rule مدیریت میشه.

به طور مثال در rule گفتیم که category/(.+?)/page/?([0-9]{1,})/?$  یعنی که یعنی لینک http://example.com/category/film/paged/2 تبدیل بشه به index.php?category_name=film&paged=2 و با set شدن query_variable ها کوئری تکمیل بشه و اطلاعات نمایان.

برای مشاهده تمامی rule های پیش فرض وردپرس به لینک مراجعه کنید.

افزودن custom rule با استفاده از فیلتر rewrite_rules_array

شما به وسیله این فیلتر می تونید یک rule به وردپرس اضافه یا کم کنید.

rule ها در وردپرس در متغیر $wp_rulesدر متد rules به صورت آرایه هستند که ما می تونیم مقداری رو به اون اضافه یا کم کنیم.(با استفاده از تابع add_rewrite_rule هم این کار امکان پذیره)

برای حذف یک rule می تونید از فیلتر زیر استفاده کنید.

افزودن یک custom rule به وردپرس با تابع add_rewrite_rule

به وسیله تابع زیر شما می تونید یک rule به وردپرس ( متغیر $wp_rulesدر متد rules ) اضافه کنید و در اکشن template_redirect به اون از طریق query_var دسترسی داشته باشید.

  • پارامتر اول این تابع یک عبارت منظم (regular expression) است که تعیین می کنه چه رشته ای بعد از /post-by-slug میتونه وجود داشته باشه و اون رو در متغیر $matches میریزه که در نهایت این متغیر یک آرایه از مواردی هست که از سمت چپ با عبارت منظم ما همخوانی داشته .
  • پارامتر دوم این تابع نحوه اعمال مورد match شده واقع در متغیر $matches هست که برای یکی از query_var ها set میشه. حال میتونه این query_variable از موارد پیش فرض وردپرس باشه یا این که توسط خود ما ( یا با تابع add_rewrite_tag یا فیلتر query_vars ) اضافه شده باشه.
  • پارامتر سوم اولویت اعمال این rule رو تعیین می کنه که می تونه یکی از موارد top یا bottom باشه که در صورت برخورد کدوم rule اولویت داشته باشه (به صورت پیش فرض top است)
  • بعد از اعمال این تابع ما از تابع flush_rewrite_rules(); استفاده می کنیم که برای ریستارت شدن rule ها استفاده میشه.
  • برای اینکه تابع flush_rewrite_rules(); سربار زیادی داره ما پروسه خودمون رو (تابع rewrite_rule_example) به اکشن init میزنیم . در صورتی که از پلاگین برای افزودن rule استفاده می کنید از register_activation_hook استفاده کنید.
  • در مثالی که زدیم name یک query_var پیش فرض وردپرس بود که بدین ترتیب هر slug از پست بعد از post-by-slug بیاد به عنوان پارامتر name به کوئری داده میشه .

نکته : پارامتری که در مثال اضافه کردیم اگر از قبل در  لیست query_vars وجود داشته باشه میتونه مقدار دهی بشه ولی اگر از قبل وجود نداشته باشه قابل دسترسی نیست مگر این که با استفاده از تابع add_rewirte_tag اون رو به لیست query_var اضافه کنیم.در مثالی که در بالا ذکر کردیم name یک query_variable است که به صورت پیش فرض در وردپرس موجوده ولی مثلا اگر rng بود(مثال عرض می کنم خدمتتون) با استفاده از توابع query_vars قابل دستیابی نبود. پس add_rewrite_rule به تنهایی فقط برایquery_var های پیش فرض کاربرد داره.

نکته مهم : برای ساخت query_var شخصی باید یا از فیلتر query_vars استفاده کنید یا از تابع add_rewrite_tag تا بتونید query_var شخصی خودتون رو اضافه کنید و  در نهایت با قوانینی که در تابع add_rewrite_rule ساختید بتونید اون رو مقدار دهی کنید. (پس query_var شخصی اگر مقدار دهی نشه به تنهایی کاربردی نداره و حتی نمایش هم داده نمیشه).

نکته مهم : دقت داشته باشید عبارت دوم را در ‘ ‘ ( تک کوتیشن ) قرار بدید تا متغیر $matches رو نشناسه . چون چنین متغیری فقط در زمان پیاده سازی تابع استفاده میشه و در زمانی که ما داریم تابع رو فراخوانی می کنیم اصلا تعریف نشده.

نکته مهم : بعد از این که این custom rule به لیست rule های موجود اضافه شد کار ما تمومه . ولی اگر تابع افزودن rule رو غیر فعال کنید و لینک ها رو ریستارت کنید دیگه custom rule های شما وجود ندارند. یعنی با ریستارت کردن لینک ها rule ها هم ریستارت میشن و باید دوباره در اکشن init که در بعد از ریستارت کردن لینک موجوده دوباره اضافه بشن.

 

 

مطالب مشابه

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

Settings API در وردپرس

وردپرس برای ساخت پنل تنظیمات شبیه به پنل تنظیمات پیش فرض خودش API هایی رو قرار داده . Settings API , Options API دو...

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

Administration Menus در وردپرس

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

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

cron job در وردپرس

مفهوم cron job در وردپرس یعنی انجام یه کار (job) به صورت سیکل زمانی (intreval) با زمان شروع مشخص(start time). به طور...

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

نکات امنیتی وردپرس

چون وردپرس یک سیستم متن باز است لذا کدهای آن و ساختار پایگاه داده آن برای تمامی افراد قابل دسترس است . به همین منظور...

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

ابوالفضل صباغ

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

۰ دیدگاه برای rewrite API در وردپرس (قسمت اول)

پاسخ دهید

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