基于JSON文件的重定向

时间:2016-07-12 作者:Ionică Bizău

有了JSON文件,我们如何设置WordPress重定向URL(如果在JSON文件中找到)?

例如:

{
  "foo": "bar",
  "foo-1": "baz"
}
那么/foo 将重定向到/bar/foo-1/baz.

最好的方法是什么?目前我用rewrite_rule 在里面functions.php, 但每次重定向更改时,我都必须保存永久链接设置。

中的重定向functions.php 处理方式如下:

function handle_book_redirects() {
  add_rewrite_rule(
    \'^(foo|foo-1)$\',
    \'index.php?myVar=redirect:$matches[1]\',
    \'top\'
  );
}
add_action( \'init\', \'handle_book_redirects\' );
那么如果myVar 它是一个重定向,一个自定义php将处理该请求。

1 个回复
最合适的回答,由SO网友:Stephen Afam-Osemene 整理而成

我做这件事的方式。注意,可能有一种更直接的方法。

步骤1添加自定义query_var这样可以记录从/到变量的重定向

function my_custom_query_vars($vars){
     //this allows you to store custom variables with rediect_from and rediect_to in the url
     $vars[] = \'redirect_from\';
     $vars[] = \'redirect_to\';
    return $vars;
}
add_filter( \'query_vars\', \'my_custom_query_vars\' );
步骤2添加foreach 这样做的循环。这将添加要更改的重写规则http://example.com/foohttp://example.com/?redirect_from=foo&redirect_to=bar

function my_custom_rewrite_rules($wp_rewrite){
    $new_rules = array();
    $json = \'\';//get your json data and store it as this string
    $json_array = json_decode($json, true);
    foreach($json_array as $key => $value){
        $new_rules[\'^\'.$key.\'$\'] = \'index.php/?redirect_from=\'.$key.\'&redirect_to=\'.$value;
    }
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action(\'generate_rewrite_rules\', \'my_custom_rewrite_rules\');
步骤3钩住parse_request 筛选以解析您的请求,并根据需要重定向。

 function my_custom_parse_request($wp){
//we make sure the keys are present and not empty before we redirect
if ((array_key_exists(\'redirect_from\', $wp->query_vars) 
    && !empty($wp->query_vars[\'redirect_from\']))
    && (array_key_exists(\'redirect_to\', $wp->query_vars)
    && !empty($wp->query_vars[\'redirect_to\']))){
        wp_redirect(home_url(\'/\'.$wp->query_vars[\'redirect_to\']));
        exit;        
}
add_action(\'parse_request\', \'my_custom_parse_request\');