Redirects basierend auf einer JSON-Datei

Wie können wir mit einer JSON-Datei WordPress einrichten, um die URLs umzuleiten (wenn sie in der JSON-Datei gefunden werden)?

Beispielsweise:

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

Dann wird /foo zu /bar und /foo-1 zu /baz redirect.

Was ist der beste Weg, dies zu tun? Derzeit mache ich es mit rewrite_rule in functions.php , aber jedes Mal, wenn sich die Weiterleitungen ändern, muss ich die Permalinks-Einstellungen speichern.

Die Weiterleitungen in functions.php werden wie folgt behandelt:

 function handle_book_redirects() { add_rewrite_rule( '^(foo|foo-1)$', 'index.php?myVar=redirect:$matches[1]', 'top' ); } add_action( 'init', 'handle_book_redirects' ); 

Wenn myVar angehängt wird und es sich um eine Weiterleitung handelt, wird ein benutzerdefinierter PHP diese Anfrage bearbeiten.

Solutions Collecting From Web of "Redirects basierend auf einer JSON-Datei"

So wie ich es mache. Beachten Sie, dass es einen einfacheren Weg gibt.

Schritt 1

Fügen Sie ein benutzerdefiniertes query_var wie query_var , um die Weiterleitung von / zu Variablen aufzuzeichnen

 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' ); 

Schritt 2

Add foreach Schleife, die so etwas tut. Dadurch werden die Umschreibungsregeln hinzugefügt, um http://example.com/foo in http://example.com/?redirect_from=foo&redirect_to=bar zu ändern

 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'); 

Schritt 3

parse_request den parse_request Filter auf, um Ihre Anfrage zu parsen und bei Bedarf umzuleiten.

  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');