Safe Redirect Manager - Version 1.7

Version Description

(Apr. 6, 2013) = * Return redirect_from on get_permalink. Thanks simonwheatley * Allow for regex replacement in from/to redirects * Add Slovak translation. Thanks Branco Radenovich * Notice fixed in filter_admin_title

Download this release

Release Info

Developer tlovett1
Plugin Icon 128x128 Safe Redirect Manager
Version 1.7
Comparing to
See all releases

Code changes from version 1.6 to 1.7

languages/safe-redirect-manager-sk_SK.mo ADDED
Binary file
languages/safe-redirect-manager-sk_SK.po ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: \n"
4
+ "POT-Creation-Date: \n"
5
+ "PO-Revision-Date: \n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: \n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=iso-8859-1\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "X-Generator: Poedit 1.5.4\n"
12
+
13
+ #: safe-redirect-manager.php:367 safe-redirect-manager.php:370
14
+ msgid "Redirect rule updated."
15
+ msgstr "Presmerovat pravidlo aktualizovany."
16
+
17
+ #: safe-redirect-manager.php:368
18
+ msgid "Custom field updated."
19
+ msgstr "Vlastne aktualizacie pola."
20
+
21
+ #: safe-redirect-manager.php:369
22
+ msgid "Custom field deleted."
23
+ msgstr "Vlastne vypustaju pola."
24
+
25
+ #. translators: %s: date and time of the revision
26
+ #: safe-redirect-manager.php:372
27
+ msgid "Redirect rule restored to revision from %s"
28
+ msgstr "Presmerovat pravidlo obnovena reviziu z %s"
29
+
30
+ #: safe-redirect-manager.php:373
31
+ msgid "Redirect rule published."
32
+ msgstr "Presmerovat pravidlo zverejneny."
33
+
34
+ #: safe-redirect-manager.php:374
35
+ msgid "Redirect rule saved."
36
+ msgstr "Presmerovat pravidlo ulozeny."
37
+
38
+ #: safe-redirect-manager.php:375
39
+ msgid "Redirect rule submitted."
40
+ msgstr "Presmerovat pravidlo predlozene."
41
+
42
+ #: safe-redirect-manager.php:376
43
+ msgid "Redirect rule scheduled for: <strong>%1$s</strong>."
44
+ msgstr "Presmerovat pravidlo naplanovany:. <strong>%1$s</strong>."
45
+
46
+ #. translators: Publish box date format, see http:php.net/date
47
+ #: safe-redirect-manager.php:378
48
+ msgid "M j, Y @ G:i"
49
+ msgstr "M j, Y @ G: i"
50
+
51
+ #: safe-redirect-manager.php:379
52
+ msgid "Redirect rule draft updated."
53
+ msgstr "Presmerovat pravidlo aktualizovany navrh."
54
+
55
+ #: safe-redirect-manager.php:431
56
+ msgid "Redirect To"
57
+ msgstr "Presmerovat na"
58
+
59
+ #: safe-redirect-manager.php:432
60
+ msgid "HTTP Status Code"
61
+ msgstr "HTTP Status Code"
62
+
63
+ #: safe-redirect-manager.php:435
64
+ msgid "Redirect From"
65
+ msgstr "Presmerovanie od"
66
+
67
+ #: safe-redirect-manager.php:439
68
+ msgid "Date"
69
+ msgstr "Datum"
70
+
71
+ #: safe-redirect-manager.php:491
72
+ msgctxt "post type general name"
73
+ msgid "Safe Redirect Manager"
74
+ msgstr "Safe Redirect Manager"
75
+
76
+ #: safe-redirect-manager.php:492
77
+ msgctxt "post type singular name"
78
+ msgid "Redirect"
79
+ msgstr "Presmerovanie"
80
+
81
+ #. #-#-#-#-# plugin.pot (Safe Redirect Manager 1.4-working) #-#-#-#-#
82
+ #. Plugin Name of the plugin/theme
83
+ #: safe-redirect-manager.php:494 safe-redirect-manager.php:497
84
+ #: safe-redirect-manager.php:503
85
+ msgid "Safe Redirect Manager"
86
+ msgstr "Safe Redirect Manager"
87
+
88
+ #: safe-redirect-manager.php:495
89
+ msgid "Edit Redirect Rule"
90
+ msgstr "Upravit presmerovanie pravidlo"
91
+
92
+ #: safe-redirect-manager.php:496
93
+ msgid "New Redirect Rule"
94
+ msgstr "Nova Presmerovanie pravidlo"
95
+
96
+ #: safe-redirect-manager.php:498
97
+ msgid "View Redirect Rule"
98
+ msgstr "Zobrazit Presmerovanie pravidlo"
99
+
100
+ #: safe-redirect-manager.php:499
101
+ msgid "Search Redirects"
102
+ msgstr "Hladat Presmerovanie"
103
+
104
+ #: safe-redirect-manager.php:500
105
+ msgid "No redirect rules found."
106
+ msgstr "Ziadne presmerovanie najdene pravidla."
107
+
108
+ #: safe-redirect-manager.php:501
109
+ msgid "No redirect rules found in trash."
110
+ msgstr "Ziadne presmerovanie pravidla najdene v smetiaku."
111
+
112
+ #: safe-redirect-manager.php:544
113
+ msgid "Redirect Settings"
114
+ msgstr "Presmerovanie Nastavenie"
115
+
116
+ #: safe-redirect-manager.php:565
117
+ msgid "Redirect From:"
118
+ msgstr "Presmerovat From:"
119
+
120
+ #: safe-redirect-manager.php:571
121
+ msgid "Redirect To:"
122
+ msgstr "Presmerovat na:"
123
+
124
+ #: safe-redirect-manager.php:577
125
+ msgid "HTTP Status Code:"
126
+ msgstr "HTTP Status Code:"
127
+
128
+ #. #-#-#-#-# plugin.pot (Safe Redirect Manager 1.4-working) #-#-#-#-#
129
+ #. Plugin URI of the plugin/theme
130
+ #. #-#-#-#-# plugin.pot (Safe Redirect Manager 1.4-working) #-#-#-#-#
131
+ #. Author URI of the plugin/theme
132
+ #: safe-redirect-manager.php:583
133
+ msgid "http://www.10up.com"
134
+ msgstr "http://www.10up.com"
135
+
136
+ #. Description of the plugin/theme
137
+ msgid "Easily and safely manage HTTP redirects."
138
+ msgstr "Lahko a bezpecne spravovat presmerovanie HTTP."
139
+
140
+ #. Author of the plugin/theme
141
+ msgid "Taylor Lovett (10up LLC), VentureBeat"
142
+ msgstr "Taylor Lovett (10up LLC), VentureBeat"
readme.txt CHANGED
@@ -1,15 +1,15 @@
1
  === Safe Redirect Manager ===
2
  Contributors: tlovett1, tollmanz, taylorde, 10up, jakemgold, danielbachhuber, VentureBeat
3
- Tags: http redirects, redirect manager, url redirection, safe http redirection
4
  Requires at least: 3.1
5
- Tested up to: 3.5
6
- Stable tag: 1.6
7
 
8
  Safely and easily manage your website's HTTP redirects.
9
 
10
  == Description ==
11
 
12
- Safe Redirect Manager is a HTTP redirect manager for WordPress. An easy-to-use UI allows you to redirect locations to new URL's with the HTTP status codes of your chosing. The plugin uses the wp_safe_redirect function which only allows redirects to whitelisted hosts for security purposes. The plugin automatically handles whitelisting hosts for you.
13
 
14
  [Fork the plugin on GitHub.](https://github.com/tlovett1/Safe-Redirect-Manager)
15
 
@@ -24,6 +24,17 @@ Extract the zip file and just drop the contents in the wp-content/plugins/ direc
24
 
25
  == Changelog ==
26
 
 
 
 
 
 
 
 
 
 
 
 
27
  = 1.6 (Dec. 11, 2012) =
28
  * Bulk delete redirects from the Manage Redirects screen
29
  * wp-cli coverage including subcommands for creating, deleting, and listing redirects, and importing .htaccess files
1
  === Safe Redirect Manager ===
2
  Contributors: tlovett1, tollmanz, taylorde, 10up, jakemgold, danielbachhuber, VentureBeat
3
+ Tags: http redirects, redirect manager, url redirection, safe http redirection, multisite redirects
4
  Requires at least: 3.1
5
+ Tested up to: 3.8
6
+ Stable tag: 1.7.1
7
 
8
  Safely and easily manage your website's HTTP redirects.
9
 
10
  == Description ==
11
 
12
+ Safe Redirect Manager is a HTTP redirect manager for WordPress. An easy-to-use UI allows you to redirect locations to new URL's with the HTTP status codes of your choosing. The plugin uses the wp_safe_redirect function which only allows redirects to whitelisted hosts for security purposes. The plugin automatically handles whitelisting hosts for you. This plugin works great with Multisite.
13
 
14
  [Fork the plugin on GitHub.](https://github.com/tlovett1/Safe-Redirect-Manager)
15
 
24
 
25
  == Changelog ==
26
 
27
+ = 1.7.1 (Dec. 12, 2013) =
28
+ * Add 307 redirect status code. Thanks [lgedeon](https://github.com/lgedeon)
29
+ * Plugin textdomain should be loaded on init
30
+ * Add status code labels to creation dropdown. Thanks Chancey Mathews
31
+
32
+ = 1.7 (Apr. 6, 2013) =
33
+ * Return redirect_from on get_permalink. Thanks [simonwheatley](https://github.com/simonwheatley)
34
+ * Allow for regex replacement in from/to redirects
35
+ * Add Slovak translation. Thanks [Branco Radenovich](http://webhostinggeeks.com/blog)
36
+ * Notice fixed in filter_admin_title
37
+
38
  = 1.6 (Dec. 11, 2012) =
39
  * Bulk delete redirects from the Manage Redirects screen
40
  * wp-cli coverage including subcommands for creating, deleting, and listing redirects, and importing .htaccess files
safe-redirect-manager.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: Safe Redirect Manager
4
  Plugin URI: http://www.10up.com
5
  Description: Easily and safely manage HTTP redirects.
6
  Author: Taylor Lovett (10up LLC), VentureBeat
7
- Version: 1.6
8
  Author URI: http://www.10up.com
9
 
10
  GNU General Public License, Free Software Foundation <http://creativecommons.org/licenses/GPL/2.0/>
@@ -41,7 +41,16 @@ class SRM_Safe_Redirect_Manager {
41
 
42
  public $cache_key_redirects = '_srm_redirects';
43
 
44
- public $valid_status_codes = array( 301, 302, 303, 403, 404 );
 
 
 
 
 
 
 
 
 
45
 
46
  private $whitelist_hosts = array();
47
 
@@ -55,10 +64,10 @@ class SRM_Safe_Redirect_Manager {
55
  * @return object
56
  */
57
  public function __construct() {
 
58
  add_action( 'init', array( $this, 'action_init' ) );
59
  add_action( 'init', array( $this, 'action_register_post_types' ) );
60
  add_action( 'parse_request', array( $this, 'action_parse_request' ), 0 );
61
- add_action( 'after_theme_setup', array( $this, 'action_load_texthost' ) );
62
  add_action( 'save_post', array( $this, 'action_save_post' ) );
63
  add_filter( 'manage_' . $this->redirect_post_type . '_posts_columns' , array( $this, 'filter_redirect_columns' ) );
64
  add_action( 'manage_' . $this->redirect_post_type . '_posts_custom_column' , array( $this, 'action_custom_redirect_columns' ), 10, 2 );
@@ -70,6 +79,7 @@ class SRM_Safe_Redirect_Manager {
70
  add_action( 'admin_print_styles-edit.php', array( $this, 'action_print_logo_css' ), 10, 1 );
71
  add_action( 'admin_print_styles-post.php', array( $this, 'action_print_logo_css' ), 10, 1 );
72
  add_action( 'admin_print_styles-post-new.php', array( $this, 'action_print_logo_css' ), 10, 1 );
 
73
 
74
  // Search filters
75
  add_filter( 'posts_join', array( $this, 'filter_search_join' ) );
@@ -77,6 +87,17 @@ class SRM_Safe_Redirect_Manager {
77
  add_filter( 'posts_distinct', array( $this, 'filter_search_distinct' ) );
78
  }
79
 
 
 
 
 
 
 
 
 
 
 
 
80
  /**
81
  * Join posts table with postmeta table on search
82
  *
@@ -317,9 +338,7 @@ class SRM_Safe_Redirect_Manager {
317
  $redirects = $this->update_redirect_cache();
318
  }
319
 
320
- $max_redirects = apply_filters( 'srm_max_redirects', $this->default_max_redirects );
321
-
322
- return ( count( $redirects ) >= $max_redirects );
323
  }
324
 
325
  /**
@@ -376,9 +395,16 @@ class SRM_Safe_Redirect_Manager {
376
  * @return string
377
  */
378
  public function filter_admin_title( $title, $post_id = 0 ) {
379
- if ( ! is_admin() || false === ( $redirect = get_post( $post_id ) ) || $redirect->post_type != $this->redirect_post_type )
380
  return $title;
381
 
 
 
 
 
 
 
 
382
  $redirect_from = get_post_meta( $post_id, $this->meta_key_redirect_from, true );
383
  if ( ! empty( $redirect_from ) )
384
  return $redirect_from;
@@ -627,7 +653,7 @@ class SRM_Safe_Redirect_Manager {
627
  <label for="srm<?php echo $this->meta_key_redirect_status_code; ?>"><?php _e( 'HTTP Status Code:', 'safe-redirect-manager' ); ?></label>
628
  <select name="srm<?php echo $this->meta_key_redirect_status_code; ?>" id="srm<?php echo $this->meta_key_redirect_status_code; ?>">
629
  <?php foreach ( $this->valid_status_codes as $code ) : ?>
630
- <option <?php selected( $status_code, $code ); ?>><?php echo $code; ?></option>
631
  <?php endforeach; ?>
632
  </select>
633
  <em><?php _e( "If you don't know what this is, leave it as is.", 'safe-redirect-manager' ); ?></em>
@@ -644,6 +670,8 @@ class SRM_Safe_Redirect_Manager {
644
  */
645
  public function action_init() {
646
  load_plugin_textdomain( 'safe-redirect-manager', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
 
 
647
  }
648
 
649
  /**
@@ -675,34 +703,52 @@ class SRM_Safe_Redirect_Manager {
675
  */
676
  public function get_redirects( $args = array() ) {
677
 
678
- $defaults = array(
679
- 'posts_per_page' => 1000,
680
- 'post_status' => 'publish',
681
- );
 
 
682
 
683
- $query_args = array_merge( $defaults, $args );
 
684
 
685
- // Some arguments that don't need to be configurable
686
- $query_args['post_type'] = $this->redirect_post_type;
687
- $query_args['no_found_rows'] = false;
688
- $query_args['update_term_cache'] = false;
 
689
 
690
- $redirect_query = new WP_Query( $query_args );
691
 
692
- if ( empty( $redirect_query->posts ) )
693
- return array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
694
 
695
- $redirects = array();
696
- foreach( $redirect_query->posts as $redirect ) {
697
- $redirects[] = array(
698
- 'ID' => $redirect->ID,
699
- 'post_status' => $redirect->post_status,
700
- 'redirect_from' => get_post_meta( $redirect->ID, $this->meta_key_redirect_from, true ),
701
- 'redirect_to' => get_post_meta( $redirect->ID, $this->meta_key_redirect_to, true ),
702
- 'status_code' => (int)get_post_meta( $redirect->ID, $this->meta_key_redirect_status_code, true ),
703
- 'enable_regex' => (bool)get_post_meta( $redirect->ID, $this->meta_key_enable_redirect_from_regex, true ),
704
- );
705
- }
706
  return $redirects;
707
  }
708
 
@@ -741,7 +787,7 @@ class SRM_Safe_Redirect_Manager {
741
  return;
742
 
743
  // get requested path and add a / before it
744
- $requested_path = sanitize_text_field( $_SERVER['REQUEST_URI'] );
745
  $requested_path = stripslashes( $requested_path );
746
 
747
  /**
@@ -799,6 +845,11 @@ class SRM_Safe_Redirect_Manager {
799
 
800
  header("X-Safe-Redirect-Manager: true");
801
 
 
 
 
 
 
802
  // if we have a valid status code, then redirect with it
803
  if ( in_array( $status_code, $this->valid_status_codes ) )
804
  wp_safe_redirect( esc_url_raw( $redirect_to ), $status_code );
@@ -864,6 +915,33 @@ class SRM_Safe_Redirect_Manager {
864
 
865
  return $path;
866
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
867
  }
868
 
869
  global $safe_redirect_manager;
4
  Plugin URI: http://www.10up.com
5
  Description: Easily and safely manage HTTP redirects.
6
  Author: Taylor Lovett (10up LLC), VentureBeat
7
+ Version: 1.7.1
8
  Author URI: http://www.10up.com
9
 
10
  GNU General Public License, Free Software Foundation <http://creativecommons.org/licenses/GPL/2.0/>
41
 
42
  public $cache_key_redirects = '_srm_redirects';
43
 
44
+ public $valid_status_codes = array( 301, 302, 303, 307, 403, 404 );
45
+
46
+ public $status_code_labels = array(
47
+ 301 => 'Moved Permanently',
48
+ 302 => 'Found',
49
+ 303 => 'See Other',
50
+ 307 => 'Temporary Redirect',
51
+ 403 => 'Forbidden',
52
+ 404 => 'Not Found',
53
+ );
54
 
55
  private $whitelist_hosts = array();
56
 
64
  * @return object
65
  */
66
  public function __construct() {
67
+ add_action( 'init', array( $this, 'action_init_load_textdomain' ), 9 );
68
  add_action( 'init', array( $this, 'action_init' ) );
69
  add_action( 'init', array( $this, 'action_register_post_types' ) );
70
  add_action( 'parse_request', array( $this, 'action_parse_request' ), 0 );
 
71
  add_action( 'save_post', array( $this, 'action_save_post' ) );
72
  add_filter( 'manage_' . $this->redirect_post_type . '_posts_columns' , array( $this, 'filter_redirect_columns' ) );
73
  add_action( 'manage_' . $this->redirect_post_type . '_posts_custom_column' , array( $this, 'action_custom_redirect_columns' ), 10, 2 );
79
  add_action( 'admin_print_styles-edit.php', array( $this, 'action_print_logo_css' ), 10, 1 );
80
  add_action( 'admin_print_styles-post.php', array( $this, 'action_print_logo_css' ), 10, 1 );
81
  add_action( 'admin_print_styles-post-new.php', array( $this, 'action_print_logo_css' ), 10, 1 );
82
+ add_filter( 'post_type_link', array( $this, 'filter_post_type_link' ), 10, 2 );
83
 
84
  // Search filters
85
  add_filter( 'posts_join', array( $this, 'filter_search_join' ) );
87
  add_filter( 'posts_distinct', array( $this, 'filter_search_distinct' ) );
88
  }
89
 
90
+ /**
91
+ * Localize plugin
92
+ *
93
+ * @since 1.7
94
+ * @uses load_plugin_textdomain
95
+ * @return void
96
+ */
97
+ public function action_init_load_textdomain() {
98
+ load_plugin_textdomain( 'safe-redirect-manager', false, basename( dirname( __FILE__ ) ) . '/languages' );
99
+ }
100
+
101
  /**
102
  * Join posts table with postmeta table on search
103
  *
338
  $redirects = $this->update_redirect_cache();
339
  }
340
 
341
+ return ( count( $redirects ) >= $this->default_max_redirects );
 
 
342
  }
343
 
344
  /**
395
  * @return string
396
  */
397
  public function filter_admin_title( $title, $post_id = 0 ) {
398
+ if ( ! is_admin() )
399
  return $title;
400
 
401
+ $redirect = get_post( $post_id );
402
+ if ( empty( $redirect ) )
403
+ return $title;
404
+
405
+ if ( $redirect->post_type != $this->redirect_post_type )
406
+ return $title;
407
+
408
  $redirect_from = get_post_meta( $post_id, $this->meta_key_redirect_from, true );
409
  if ( ! empty( $redirect_from ) )
410
  return $redirect_from;
653
  <label for="srm<?php echo $this->meta_key_redirect_status_code; ?>"><?php _e( 'HTTP Status Code:', 'safe-redirect-manager' ); ?></label>
654
  <select name="srm<?php echo $this->meta_key_redirect_status_code; ?>" id="srm<?php echo $this->meta_key_redirect_status_code; ?>">
655
  <?php foreach ( $this->valid_status_codes as $code ) : ?>
656
+ <option value="<?php echo esc_attr( $code ); ?>" <?php selected( $status_code, $code ); ?>><?php echo esc_html( $code . ' ' . $this->status_code_labels[$code] ); ?></option>
657
  <?php endforeach; ?>
658
  </select>
659
  <em><?php _e( "If you don't know what this is, leave it as is.", 'safe-redirect-manager' ); ?></em>
670
  */
671
  public function action_init() {
672
  load_plugin_textdomain( 'safe-redirect-manager', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
673
+
674
+ $this->default_max_redirects = apply_filters( 'srm_max_redirects', $this->default_max_redirects );
675
  }
676
 
677
  /**
703
  */
704
  public function get_redirects( $args = array() ) {
705
 
706
+ $redirects = array();
707
+
708
+ if ( $this->default_max_redirects > 50 )
709
+ $posts_per_page = 50;
710
+ else
711
+ $posts_per_page = $this->default_max_redirects;
712
 
713
+ $i = 1;
714
+ do {
715
 
716
+ $defaults = array(
717
+ 'posts_per_page' => $posts_per_page,
718
+ 'post_status' => 'publish',
719
+ 'paged' => $i,
720
+ );
721
 
722
+ $query_args = array_merge( $defaults, $args );
723
 
724
+ // Some arguments that don't need to be configurable
725
+ $query_args['post_type'] = $this->redirect_post_type;
726
+ $query_args['no_found_rows'] = false;
727
+ $query_args['update_term_cache'] = false;
728
+
729
+ $redirect_query = new WP_Query( $query_args );
730
+
731
+ foreach( $redirect_query->posts as $redirect ) {
732
+ $redirects[] = array(
733
+ 'ID' => $redirect->ID,
734
+ 'post_status' => $redirect->post_status,
735
+ 'redirect_from' => get_post_meta( $redirect->ID, $this->meta_key_redirect_from, true ),
736
+ 'redirect_to' => get_post_meta( $redirect->ID, $this->meta_key_redirect_to, true ),
737
+ 'status_code' => (int)get_post_meta( $redirect->ID, $this->meta_key_redirect_status_code, true ),
738
+ 'enable_regex' => (bool)get_post_meta( $redirect->ID, $this->meta_key_enable_redirect_from_regex, true ),
739
+ );
740
+ }
741
+
742
+ if ( count( $redirects ) == $this->default_max_redirects
743
+ || count( $redirect_query->posts ) < $posts_per_page )
744
+ $build = false;
745
+ else
746
+ $build = true;
747
+
748
+ $i++;
749
+
750
+ } while ( $build );
751
 
 
 
 
 
 
 
 
 
 
 
 
752
  return $redirects;
753
  }
754
 
787
  return;
788
 
789
  // get requested path and add a / before it
790
+ $requested_path = esc_url_raw( $_SERVER['REQUEST_URI'] );
791
  $requested_path = stripslashes( $requested_path );
792
 
793
  /**
845
 
846
  header("X-Safe-Redirect-Manager: true");
847
 
848
+ // Allow for regex replacement in $redirect_to
849
+ if ( $enable_regex ) {
850
+ $redirect_to = preg_replace( '@' . $redirect_from . '@', $redirect_to, $requested_path );
851
+ }
852
+
853
  // if we have a valid status code, then redirect with it
854
  if ( in_array( $status_code, $this->valid_status_codes ) )
855
  wp_safe_redirect( esc_url_raw( $redirect_to ), $status_code );
915
 
916
  return $path;
917
  }
918
+
919
+ /**
920
+ * Return a permalink for a redirect post, which is the "redirect from"
921
+ * URL for that redirect.
922
+ *
923
+ * @since 1.7
924
+ * @param string $permalink The permalink
925
+ * @param object $post A Post object
926
+ * @uses home_url, get_post_meta
927
+ * @return string The permalink
928
+ */
929
+ public function filter_post_type_link( $permalink, $post ) {
930
+ if ( $this->redirect_post_type != $post->post_type )
931
+ return $permalink;
932
+
933
+ // We can't do anything to provide a permalink
934
+ // for regex enabled redirects.
935
+ if ( get_post_meta( $post->ID, $this->meta_key_enable_redirect_from_regex, true ) )
936
+ return $permalink;
937
+
938
+ // We can't do anything if there is a wildcard in the redirect from
939
+ $redirect_from = get_post_meta( $post->ID, $this->meta_key_redirect_from, true );
940
+ if ( false !== strpos( $redirect_from, '*' ) )
941
+ return $permalink;
942
+
943
+ return home_url( $redirect_from );
944
+ }
945
  }
946
 
947
  global $safe_redirect_manager;