با وردپرس می توان آدرس های اینترنتی سایت یا URL ها را با قابلیت permalink به شکل خوانا یا قابل خواندن در آورد. البته با وردپرس امکان تغییر تنها آدرس اینترنتی صفحه جستجو وجود ندارد و تنها ساختار ?s=keyword
در وردپرس تعریف شده است. ولی یک راه حل برای تغییر این آدرس به آدرس دلخواه شما وجود دارد.
در مثال زیر نشان می دهیم که حتی اگر شما گزینه permalink را فعال نکرده باشید، باز هم می توانید صفحه جستجو را به صورت زیر فراخوانی می شود را به شکل دلخواه تبدیل کنید:
https://deltacode.ir/?s=wordpress+consulting
با یک تابع کوتاه می توان این آدرس را تمیز تر و خوانا تر نوشت. در موردی که من نوشتم یک جستجو با دو کلید داره به شکل زیر تبدیل می شود:
https://deltacode.ir/search/wordpress+consulting
افزودن کد در افزونه و یا فایل functions.php پوسته
با قرار دادن کد زیر درون یک افزونه و یا فایل functions.php پوسته در زمانی که قرار است صفحه مربوطه مثلا صفحه جستجو بارگذاری شود بررسی می کنیم که آیا صفحه مربوط به صفحه جستجو است و اگر کلید واژه ای برای جستجو ارسال شده است به صفحه با ساختار جدید URL هدایت کند.
function irc_change_search_url_rewrite() {
if ( is_search() && ! empty( $_GET['s'] ) ) {
wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
exit();
}
}
add_action( 'template_redirect', 'irc_change_search_url_rewrite' );
افزودن کد تغییر آدرس در فایل htaccess
خب بعد از این باید یک rule در فایل htaccess تعریف کنیم تا این ساختار جدید را به صفحه جستجو ترجمه کند.
# search redirect
# this will take anything in the query string, minus any extraneous values, and turn them into a clean working url
RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]
که در نهایت فایل htaccess شما به شکل زیر خواهد بود:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# search redirect
# this will take anything in the query string, minus any extraneous values, and turn them into a clean working url
RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
موفق باشید.
منبع: