2010-07-01 18 views
0

У меня проблемы с внутренними правилами перезаписи Wordpress. Я прочитал эту тему, но я до сих пор не может получить никаких результатов: wp_rewrite in a WordPress PluginПользовательские правила перезаписи в Wordpress

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

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

<?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

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

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

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

ответ

7

Вам нужно будет добавить свое собственное правило перезаписи и запросить vars - поместите это в 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(); 
?> 
+0

Не должно быть правила mypage/([^ /] +)/([^ /] +) /? '? –

Смежные вопросы