Как получить красивые URL-адреса с помощью add_query_arg в permalinks
С помощью add_query_arg()
приятно добавлять дополнительные параметры к URL-адресу, а также легко создать правило перезаписи. Все идет нормально. Но проблема заключается в замене URL, выполняемой wordpress.
Когда у меня есть URL-адрес, например:
www.mysite.com/?page_id=1&myvar=test
, и я набираю этот URL-адрес в адресную строку браузера с активированными постоянными ссылками. Эта ссылка станет следующей:
www.example.com/pagename/?myvar=test
НО : я бы хотел получить:
www.example.com/pagename/test
Наконец, я хотел бы использовать код вроде:
<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>
, что приведет к:
www.example.com/pagename/test
Как это можно достичь? Я потратил часы на чтение документов, и я не смог найти решение.
2 ответа
Просто столкнулся с такой же ситуацией и наткнулся на этот вопрос во время поиска.
Кажется, что это невозможно. Сам Core просто добавляет строки к URL-адресу, если разрешены довольно постоянные ссылки, см. https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571
Для всех, кто заинтересован в этом: вы можете сделать что-то подобное в своем коде:
if ( '' != get_option('permalink_structure') ) {
// using pretty permalinks, append to url
$read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
} else {
$read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
}
Это решение также было рекомендовано Jon Cave в комментарии к официальному блогу: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686
Решение Wordpress должно было бы добавить правила перезаписи, чтобы сделать что-то вроде этого:
add_action( 'init', 'my_rewrite_add_rewrites' );
function my_rewrite_add_rewrites()
{
add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
}
подробнее: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule