1 | <?php |
---|
2 | /* |
---|
3 | * drop this in mu-plugins. by dd32 |
---|
4 | */ |
---|
5 | |
---|
6 | add_filter('pre_update_option_siteurl', '_siteurl_pre_change', 5, 2); |
---|
7 | function _siteurl_pre_change( $new, $old ) { |
---|
8 | $valid = _siteurl_is_valid( $new, $old ); |
---|
9 | if ( ! is_wp_error( $valid ) ) |
---|
10 | return $new; |
---|
11 | |
---|
12 | $message = sprintf(__( 'WordPress has detected that changing the WordPress Address of your Site to <code>%s</code> will result in WordPress not being accessable for the following reason(s)') , esc_html( $new ) ); |
---|
13 | $message .= '<ul><li>' . $valid->get_error_message(); |
---|
14 | $data = $valid->get_error_data(); |
---|
15 | if ( is_wp_error( $data ) ) |
---|
16 | $message .= ' <ul><li>' . $data->get_error_message() . '</li></ul>'; |
---|
17 | $message .= '</li></ul>'; |
---|
18 | $message .= '</p><p>' . '<input type="submit" value="' . esc_attr(__('Continue?')) . '" />'; |
---|
19 | wp_die( $message ); |
---|
20 | exit; |
---|
21 | } |
---|
22 | |
---|
23 | function _siteurl_is_valid($new, $old) { |
---|
24 | $_url = add_query_arg( 'testing-redirects', '1', $new ); |
---|
25 | $res = wp_remote_head($_url); |
---|
26 | if ( is_wp_error($res) ) |
---|
27 | return new WP_Error('unknown', __('WordPress cannot verify the suggested site URL'), $res ); |
---|
28 | |
---|
29 | if ( isset($res['headers']['wordpress-redirection']) && 'ok' == $res['headers']['wordpress-redirection'] ) |
---|
30 | wp_die( 'True: <pre>' . print_r(array($_url,$res), true) ); |
---|
31 | |
---|
32 | if ( isset($res['headers']['wordpress-redirection']) && 'not-front-page' == $res['headers']['wordpress-redirection'] ) |
---|
33 | return new WP_Error('not_wordpress_front', __('The Provided URL does not resolve to the front page of WordPress.') ); |
---|
34 | |
---|
35 | if ( '200' == $res['response']['code'] ) // Something exists, but is not the WordPress we expected. |
---|
36 | return new WP_Error('not_wordpress', __('This WordPress Installation was not accessable at that URL.') ); |
---|
37 | |
---|
38 | if ( in_array( $res['response']['code'], array(300, 301, 302) ) ) // Redirection elsewhere. |
---|
39 | return new WP_Error('unknown', sprintf(__('Redirection to %s'), $res['headers']['location']) ); |
---|
40 | |
---|
41 | wp_die( 'Fallthrough:<pre>' . print_r(array($_url,$res), true) ); |
---|
42 | // return true; |
---|
43 | } |
---|
44 | |
---|
45 | add_action('template_redirect', '_tr', 100); |
---|
46 | function _tr() { |
---|
47 | if ( isset($_GET['testing-redirects']) ) { |
---|
48 | if ( is_front_page() ) |
---|
49 | header('WordPress-Redirection: ok'); |
---|
50 | else |
---|
51 | header('WordPress-Redirection: not-front-page'); |
---|
52 | die(); |
---|
53 | } |
---|
54 | } |
---|