API بازنویسی وردپرس
API بازنویسی وردپرس
WordPress یک API واقعا مفید دارد به نام “بازنویسی API”. من حدس میزنم که قبلاً «بازنویسی URL» را انجام دادهاند، این فرآیندی است که URLها را خواناتر میکند. به عنوان مثال نشانی اینترنتی نوشته شده به این شکل https://mysite.com/?page=12&category=12&author=47 چندان خوب نیست نگاه کردن به خاطر سپردن آن سخت است و موتورهای جستجو آنقدرها آن را دوست ندارند. به همین دلیل است که تقریباً هر CMS دارای یک عملکرد داخلی است که آدرسهای اینترنتی را «بازنویسی» میکند تا آنها را به این شکل نشان دهد: https://mysite.com/category/business /مالی.
بازنویسی API و کلاس WP_Rewrite
در داخل وردپرس، این فرآیند به عنوان ساختار پیوندهای دائمی نیز شناخته میشود. /a>. هنگامی که از ساختار پیوند دائمی پیشفرض به ساختار سفارشی تغییر میکنید، بهطور خودکار API بازنویسی را فعال میکنید. این کاملا اتوماتیک است. اما گاهی اوقات لازم است قوانین بازنویسی سفارشی خود را ایجاد کنید.
در این پست، ما قصد داریم توابع ساده ای برای ایجاد یک قانون بازنویسی سفارشی ساده ایجاد کنیم. بیایید بگوییم که میخواهیم یک مقدار ارجاعدهنده، به نوعی معادل یک $_GET[‘referrer’] دریافت کنیم.
اگر نگاهی به Codex بیندازیم، در صفحه بازنویسی API میبینیم که این API دارای 6 عملکرد داخلی است. رایج ترین استفاده از بازنویسی استفاده از این توابع است، آموزش های زیادی در مورد آن وجود دارد، به همین دلیل است که من از فیلترها به جای توابع استفاده می کنم. چون بله، بازنویسی API با فیلترها هم قابل استفاده است! این فیلترها در صفحه کلاس WP_Rewrite کدکس فهرست شده اند. .
افزودن Query Var جدید
برای شروع، باید تابعی ایجاد کنیم که به وردپرس بگوید که یک قانون بازنویسی جدید تنظیم شده است. این وظیفه add_rewrite_rule() و add_rewrite_tag() ، اما شما همچنین می توانید این کار را با استفاده از query_vars و rewrite_rules_array فیلترها. برای این کار باید دو تابع و دو فیلتر ایجاد کنیم. تابع اول به سادگی یک متغیر جدید را به فیلتر query_vars اضافه می کند و تابع دوم این متغیر جدید را در قوانین بازنویسی جهانی ثبت می کند:
/*
|----------------------------------------------- ------------------------
| بازنویسی را شروع کنید. نمونه: http://mysite.com/referrer/remi
|----------------------------------------------- ------------------------
*/
// یک var جدید ثبت کنید
تابع rc_add_query_vars($vars) {
$vars[] = "ارجاع دهنده"; // نام var همانطور که در URL مشاهده می شود
بازگشت $vars;
}
// تابع ما را به query_vars قلاب کنیم
add_filter('query_vars', 'rc_add_query_vars');
// قانون بازنویسی جدید را به قوانین موجود اضافه کنید
تابع rc_add_rewrite_rules($rules) {
$new_rules = array('referrer/([^/]+)/?$' => 'index.php?referrer=$matches[1]');
$rules = $new_rules + $rules;
قوانین بازگشت $;
}
// تابع را به rewrite_rules_array قلاب کنید
add_filter('rewrite_rules_array', 'rc_add_rewrite_rules');
هنگامی که این کد را به هر یک از فایل افزونه یا فایل تم functions.php خود اضافه کردید، به تنظیمات > پیوندهای دائمی بروید و ساختار پیوندهای ثابت را ذخیره کنید. این اقدام لازم است. اکنون باید بتوانید با این نوع یا آدرس اینترنتی به سایت خود دسترسی پیدا کنید: https://mysite.com/referrer/your-name . اگر میخواهید به صفحه خاصی هدایت شوید، index.php?referrer=$matches[1] را با index.php?pagename=my-page&referrer=$matches[1] تغییر دهید که در آن صفحه «my-page» صفحهای است که باید قرار گیرد. به Slug هدایت شد.
بازیابی مقدار متغیر
اکنون که قانون بازنویسی شما تنظیم شده است، ممکن است بخواهید به مقدار متغیر دسترسی داشته باشید. اما اگر یک $_GET ساده [‘referrer’] انجام دهید، هیچ ارزشی دریافت نخواهید کرد. برای بازیابی مقادیر vars URL، باید یک تابع را به فیلتر “template_redirect” متصل کنید. اتصال به فیلتر “init” خیلی زود است. سپس می توانید از طریق شی $wp_query به متغیرهای مورد نیاز دسترسی داشته باشید. در اینجا یک نمونه سریع از نحوه انجام آن آمده است:
// بازیابی URL var
تابع rc_get_my_vars() {
جهانی $wp_query;
if(isset($wp_query->query_vars['referrer'])) {
$referrer = get_query_var('referrer');
}
}
// تابع را به template_redirect قلاب کنید
add_action('template_redirect', 'rc_get_my_vars');
بعد میتوانید مقدار $referrer را تکرار کنید یا از آن همانطور که با یک متغیر GET معمولی انجام میشد استفاده کنید.
البته میتوانید از بیش از یک متغیر استفاده کنید:
// در rc_add_query_vars()
$vars[] = "ارجاع دهنده";
$vars[] = "کمپین";
// در rc_add_rewrite_rules()
$new_rules = آرایه('referrer/([^/]+)/([^/]+)/?$' => 'index.php?pagename=my-page&referrer=$matches[1]&campaign=$matches[ 2]');
فراموش نکنید که برای استفاده از بازنویسی url به ماژول PHP mod_rewrite نیاز دارید.