WordPress.org

Make WordPress Core

Ticket #10970: siteurl.php

File siteurl.php, 2.2 KB (added by nacin, 12 years ago)

From dd32.

Line 
1<?php
2/*
3 * drop this in mu-plugins. by dd32
4 */
5
6add_filter('pre_update_option_siteurl', '_siteurl_pre_change', 5, 2);
7function _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
23function _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
45add_action('template_redirect', '_tr', 100);
46function _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}