با وردپرس می توان آدرس های اینترنتی سایت یا 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

موفق باشید.

منبع: