add_rewrite_rule() не работает
Мне нужно передать ссылку на объект недвижимости из последней части URL для поиска записи в базе данных, например,
Мне нужно передать G638 в массив для моего плагина. То, что у меня есть сейчас, вызывает страницу cottage-details, но удаляет последнюю часть URL и показывает пустую страницу вместо информации, которую я хочу получить с сервера. Если я использую
это работает отлично.
/**
* Теги перезаписи для плагина
*/
function dcc_rewrite_tags() {
add_rewrite_tag('%propref%', '([^&]+)');
}
add_action('init', 'dcc_rewrite_tags', 10, 0);
/**
* Правила перезаписи для плагина
*/
function dcc_rewrite_rules() {
add_rewrite_rule('^[^/]*/([^/]*)/?','index.php?p=2&propref=$matches[1]','top');
}
add_action('init', 'dcc_rewrite_rules', 10, 0);
Что происходит?

Ваше правило перезаписи довольно обширное и, скорее всего, вызовет множество конфликтов.
add_action('init', 'dcc_rewrite_tags');
function dcc_rewrite_tags() {
add_rewrite_tag('%propref%', '([^&]+)');
}
add_action('init', 'dcc_rewrite_rules');
function dcc_rewrite_rules() {
add_rewrite_rule('^cottage-details/(.+)/?$','index.php?page_id=2&propref=$matches[1]','top');
}
Затем вы можете получить доступ к переменной запроса propref
следующим образом:
$propref = get_query_var( 'propref' );
И не забудьте сбросить правила перезаписи; вы можете сделать это, перейдя в Настройки -> Постоянные ссылки и нажав кнопку сохранения.
Примечание: изменена переменная запроса p
на page_id
, так как, согласно вашему комментарию, вы используете страницу, а не стандартную запись.

Да, это одна из многих комбинаций, которые я пробовал. Тоже не работает. Я скачал этот плагин: https://wordpress.org/plugins/monkeyman-rewrite-analyzer/, и он показывает, что правило корректно и всё должно работать, но по какой-то причине не работает.

У меня здесь работает. Можешь уточнить, что именно "не работает"? Получаешь HTTP ошибку? Не можешь получить query var propref
? Какие-то другие проблемы?

vardump() массива показывает, что он пустой viz:
array(2) { ["propref"]=> string(0) "" ["brand"]=> string(2) "ZZ" }

Думаю, я просто вызываю это неправильно. Я использую $values['propref'] = get_query_var( "propref" );

Должен ли WordPress записывать правило в .htaccess? Потому что там нет никаких дополнительных правил, кроме стандартных. Я уверен, что rewrite правило корректное, но похоже, что Apache его на самом деле не применяет.

Если это страница, правило перезаписи должно использовать page_id
вместо p
. Смотрите документацию WP Query. Я отредактировал ответ.

Отлично. page_id
или pagename
будут работать, главное — вам нужно запрашивать страницу, а не стандартную запись. Если этот ответ решил вашу проблему, пожалуйста, отметьте его как принятый.
