Перенаправления на основе файла JSON

Имея файл JSON, как мы можем настроить WordPress для перенаправления URL-адресов (если он найден в файле JSON)?

Например:

{ "foo": "bar", "foo-1": "baz" } 

Затем /foo перенаправляет на /bar и /foo-1 в /baz .

Каков наилучший способ сделать это? В настоящее время я делаю это с помощью rewrite_rule в functions.php , но каждый раз, когда меняются перенаправления, я должен сохранить настройки Permalinks.

Переадресации в 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

Добавьте пользовательский 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/foo на http://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 фильтр 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');