Добавьте правило перезаписи в плагин: с помощью.htaccess в папке плагина или с помощью функций WordPress
Мне нужно добавить правило перезаписи в мой плагин и распространить его вместе с моим кодом. Все работает нормально, если я помещу правило в .htaccess в корневую папку WordPress, но мне нужно распространить плагин вместе с моим правилом.
Я пытаюсь поместить файл .htaccess в папку плагина и пытаюсь использовать функцию add_rewrite_rule, но она тоже не работает.
Здесь код .htaccess, который правильно работает в корневой папке WordPress, но не работает в моем плагине папка:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule my-plugin/pages/tp(.*)\.php$ wp-content/plugins/my-plugin/pages/request.php?pid=$1
</IfModule>
Я пробую следующий код в своем плагине, но он тоже не работает:
add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $query_vars )
{
$query_vars[] = 'pid';
return $query_vars;
}
add_action( 'init', 'add_init' );
function add_init()
{
$plugin_url = 'the-path-to-my-plugin-folder';
add_rewrite_rule('my-plugin/pages/tp(.*)\.php'
, $plugin_url . 'pages/request.php?pid=$matches[1]','top');
global $wp_rewrite;
$wp_rewrite->flush_rewrite_rules(); // I know this should be called only one time, but I put it here just to keep simple the sample code
}
Но я всегда получаю сообщение об ошибке, что URL-адрес не найден. Что я делаю не так? Как я могу сделать то, что мне нужно? Я искал похожие вопросы, но ни один из них не решил мою проблему.
1 answers
ПРИМЕЧАНИЕ: API перезаписи WordPress - это не то же самое, что модуль перезаписи Apache. WP Rewrite API не перенаправляет запрос на другой URL-адрес, он используется для анализа текущего URL-адреса и заполнения массива
query_vars
.
Проблема заключается во втором параметре вашего вызова функции add_rewrite_rule
. Он должен начинаться с index.php?
, а затем должны быть ваши аргументы, такие как pid
, например:
"index.php?pid=$matches[1]...."
Таким образом, ваша функция add_init
должна быть такой:
add_action( 'init', 'wpse8170_add_init' );
function wpse8170_add_init()
{
add_rewrite_rule('my-plugin/pages/tp(.*)\.php', 'index.php?pid=$matches[1]', 'top');
}
Не забудьте сбросить перезапись правила, посещая Settings
" Permalinks
страница.
Дальнейшее чтение: