Добавьте правило перезаписи в плагин: с помощью.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-адрес не найден. Что я делаю не так? Как я могу сделать то, что мне нужно? Я искал похожие вопросы, но ни один из них не решил мою проблему.

Author: leticia, 2013-01-31

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 страница.

Дальнейшее чтение:

 1
Author: Eugene Manuilov, 2013-01-31 09:36:00