Пользовательские правила переписывания в Wordpress - PullRequest
0 голосов
/ 01 июля 2010

У меня проблемы с внутренними правилами переписывания WordPress.Я читал эту ветку, но все еще не могу получить никаких результатов: wp_rewrite в плагине WordPress

Я объясняю свою ситуацию:

1) У меня есть page_templateназывается myplugin_template.php, связанный с WordPress страницей под названием «mypage».

<?php
get_header();
switch ($_GET['action']) {
  case = "show" {
  echo $_GET['say'];
  }
}
get_footer();
?>

2) Мне нужно создать правило перезаписи для этой ссылки:

http://myblog/index.php?pagename=mypage&action=show&say=hello_world

Если я использую этот URL, все работает без проблем, но я бы хотел добиться этого результата:

http://myblog/mypage/say/hello_world/

Я действительно не хочу взламывать мой .htaccessфайл, но я не знаю, как я могу сделать это с помощью встроенного редактора WordPress.

1 Ответ

7 голосов
/ 03 июля 2010

Вам нужно добавить собственное правило перезаписи и запросить переменные - вставьте это в functions.php;

function my_rewrite_rules($rules)
{
    global $wp_rewrite;

    // the slug of the page to handle these rules
    $my_page = 'mypage';

    // the key is a regular expression
    // the value maps matches into a query string
    $my_rule = array(
        'mypage/(.+)/(.+)/?' => 'index.php?pagename=' . $my_page . '&my_action=$matches[1]&my_show=$matches[2]'
    );

    return array_merge($my_rule, $rules);
}
add_filter('page_rewrite_rules', 'my_rewrite_rules');


function my_query_vars($vars)
{
    // these values should match those in the rewrite rule query string above
    // I recommend using something more unique than 'action' and 'show', as you
    // could collide with other plugins or WordPress core
    $my_vars = array(
        'my_action',
        'my_show'
    );

    return array_merge($my_vars, $vars);
}
add_filter('query_vars', 'my_query_vars');

Теперь в вашем шаблоне страницы замените $_GET[$var] на get_query_var($var) вот так;

<?php
get_header();
switch (get_query_var('my_action')) {
    case = "show" {
        echo esc_html(get_query_var('my_say')); // escape!
    }
}
get_footer();
?>
...