Ticket #1762: 1762.redo.diff

File 1762.redo.diff, 16.6 KB (added by rob1n, 5 years ago)
  • wp-includes/rewrite.php

     
    150150*******************************************************************************/ 
    151151 
    152152class WP_Rewrite { 
    153         var $permalink_structure; 
    154153        var $use_trailing_slashes; 
     154         
     155        var $author_base; 
    155156        var $category_base; 
     157        var $comments_base; 
     158        var $feed_base; 
     159        var $search_base; 
    156160        var $tag_base; 
     161         
     162        var $author_structure; 
    157163        var $category_structure; 
    158         var $tag_structure; 
    159         var $author_base = 'author'; 
    160         var $author_structure; 
     164        var $comments_feed_structure; 
    161165        var $date_structure; 
     166        var $feed_structure; 
    162167        var $page_structure; 
    163         var $search_base = 'search'; 
     168        var $permalink_structure; 
    164169        var $search_structure; 
    165         var $comments_base = 'comments'; 
    166         var $feed_base = 'feed'; 
    167         var $comments_feed_structure; 
    168         var $feed_structure; 
     170        var $tag_structure; 
     171         
    169172        var $front; 
    170173        var $root = ''; 
    171174        var $index = 'index.php'; 
    172175        var $matches = ''; 
     176         
    173177        var $rules; 
    174178        var $extra_rules; //those not generated by the class, see add_rewrite_rule() 
    175179        var $non_wp_rules; //rules that don't redirect to WP's index.php 
     180         
    176181        var $endpoints; 
    177182        var $use_verbose_rules = false; 
    178         var $rewritecode = 
    179                 array( 
    180                                         '%year%', 
    181                                         '%monthnum%', 
    182                                         '%day%', 
    183                                         '%hour%', 
    184                                         '%minute%', 
    185                                         '%second%', 
    186                                         '%postname%', 
    187                                         '%post_id%', 
    188                                         '%category%', 
    189                                         '%tag%', 
    190                                         '%author%', 
    191                                         '%pagename%', 
    192                                         '%search%' 
    193                                         ); 
     183         
     184        var $rewritecode = array( 
     185                '%year%', '%monthnum%', '%day%', 
     186                '%hour%', '%minute%', '%second%', 
     187                '%postname%', '%post_id%', '%category%', 
     188                '%tag%', '%author%', '%pagename%', 
     189                '%search%' 
     190        ); 
     191         
     192        var $rewritereplace = array( 
     193                '([0-9]{4})', '([0-9]{1,2})', '([0-9]{1,2})', 
     194                '([0-9]{1,2})', '([0-9]{1,2})', '([0-9]{1,2})', 
     195                '([^/]+)', '([0-9]+)', '(.+?)', 
     196                '(.+?)', '([^/]+)', '([^/]+)', 
     197                '(.+)' 
     198        ); 
     199         
     200        var $queryreplace = array( 
     201                'year=', 'monthnum=', 'day=', 
     202                'hour=', 'minute=', 'second=', 
     203                'name=', 'p=', 'category_name=', 
     204                'tag=', 'author_name=', 'pagename=', 
     205                's=' 
     206        ); 
    194207 
    195         var $rewritereplace = 
    196                 array( 
    197                                         '([0-9]{4})', 
    198                                         '([0-9]{1,2})', 
    199                                         '([0-9]{1,2})', 
    200                                         '([0-9]{1,2})', 
    201                                         '([0-9]{1,2})', 
    202                                         '([0-9]{1,2})', 
    203                                         '([^/]+)', 
    204                                         '([0-9]+)', 
    205                                         '(.+?)', 
    206                                         '(.+?)', 
    207                                         '([^/]+)', 
    208                                         '([^/]+)', 
    209                                         '(.+)' 
    210                                         ); 
     208        var $feeds = array( 
     209                'feed', 'rdf', 'rss',  
     210                'rss2', 'atom' 
     211        ); 
    211212 
    212         var $queryreplace = 
    213                 array ( 
    214                                         'year=', 
    215                                         'monthnum=', 
    216                                         'day=', 
    217                                         'hour=', 
    218                                         'minute=', 
    219                                         'second=', 
    220                                         'name=', 
    221                                         'p=', 
    222                                         'category_name=', 
    223                                         'tag=', 
    224                                         'author_name=', 
    225                                         'pagename=', 
    226                                         's=' 
    227                                         ); 
    228  
    229         var $feeds = array ( 'feed', 'rdf', 'rss', 'rss2', 'atom' ); 
    230  
    231213        function using_permalinks() { 
    232214                if (empty($this->permalink_structure)) 
    233215                        return false; 
     
    415397                        $this->author_structure = ''; 
    416398                        return false; 
    417399                } 
     400                 
     401                if ( empty( $this->author_base ) ) { 
     402                        $this->author_structure = $this->front . 'author/'; 
     403                } else { 
     404                        $this->author_structure = $this->author_base . '/'; 
     405                } 
     406                 
     407                $this->author_structure .= '%author%'; 
    418408 
    419                 $this->author_structure = $this->front . $this->author_base . '/%author%'; 
    420  
    421409                return $this->author_structure; 
    422410        } 
    423411 
     
    430418                        $this->search_structure = ''; 
    431419                        return false; 
    432420                } 
     421                 
     422                if ( empty( $this->search_base ) ) { 
     423                        $this->search_structure = $this->root . 'search/'; 
     424                } else { 
     425                        $this->search_structure = $this->search_base . '/'; 
     426                } 
     427                 
     428                $this->search_structure .= '%search%'; 
    433429 
    434                 $this->search_structure = $this->root . $this->search_base . '/%search%'; 
    435  
    436430                return $this->search_structure; 
    437431        } 
    438432 
     
    460454                        $this->feed_structure = ''; 
    461455                        return false; 
    462456                } 
     457                 
     458                if ( empty( $this->feed_base ) ) { 
     459                        $this->feed_structure = $this->root . 'feed/'; 
     460                } else { 
     461                        $this->feed_structure = $this->feed_base . '/'; 
     462                } 
    463463 
    464                 $this->feed_structure = $this->root . $this->feed_base . '/%feed%'; 
     464                $this->feed_structure .= '%feed%'; 
    465465 
    466466                return $this->feed_structure; 
    467467        } 
     
    475475                        $this->comment_feed_structure = ''; 
    476476                        return false; 
    477477                } 
     478                 
     479                if ( empty( $this->comments_base ) ) { 
     480                        $this->comment_feed_structure = $this->root . 'comments' . ( !empty( $this->feed_base ) ? $this->feed_base : '/feed' ) . '/'; 
     481                } else { 
     482                        $this->comment_feed_structure = $this->comments_base . ( !empty( $this->feed_base ) ? $this->feed_base : '/feed' ) . '/'; 
     483                } 
     484                 
     485                $this->comment_feed_structure .= '%feed%'; 
    478486 
    479                 $this->comment_feed_structure = $this->root . $this->comments_base . '/' . $this->feed_base . '/%feed%'; 
    480  
    481487                return $this->comment_feed_structure; 
    482488        } 
    483489 
     
    750756                $root_rewrite = apply_filters('root_rewrite_rules', $root_rewrite); 
    751757 
    752758                // Comments 
    753                 $comments_rewrite = $this->generate_rewrite_rules($this->root . $this->comments_base, EP_COMMENTS, true, true, true, false); 
     759                $comments_rewrite = $this->generate_rewrite_rules($this->get_comment_feed_permastruct(), EP_COMMENTS, true, true, true, false); 
    754760                $comments_rewrite = apply_filters('comments_rewrite_rules', $comments_rewrite); 
    755761 
    756762                // Search 
    757                 $search_structure = $this->get_search_permastruct(); 
    758                 $search_rewrite = $this->generate_rewrite_rules($search_structure, EP_SEARCH); 
     763                $search_rewrite = $this->generate_rewrite_rules($this->get_search_permastruct(), EP_SEARCH); 
    759764                $search_rewrite = apply_filters('search_rewrite_rules', $search_rewrite); 
    760765 
    761766                // Categories 
     
    898903                $this->permalink_structure = get_option('permalink_structure'); 
    899904                $this->front = substr($this->permalink_structure, 0, strpos($this->permalink_structure, '%')); 
    900905                $this->root = ''; 
     906                 
    901907                if ($this->using_index_permalinks()) { 
    902908                        $this->root = $this->index . '/'; 
    903909                } 
     910                 
     911                $this->author_base = get_option( 'author_base' ); 
    904912                $this->category_base = get_option( 'category_base' ); 
     913                $this->comments_base = get_option( 'comments_base' ); 
     914                $this->feed_base = get_option( 'feed_base' ); 
     915                $this->search_base = get_option( 'search_base' ); 
    905916                $this->tag_base = get_option( 'tag_base' ); 
     917                 
    906918                unset($this->category_structure); 
    907919                unset($this->author_structure); 
    908920                unset($this->date_structure); 
     
    910922                unset($this->search_structure); 
    911923                unset($this->feed_structure); 
    912924                unset($this->comment_feed_structure); 
     925                 
    913926                $this->use_trailing_slashes = ( substr($this->permalink_structure, -1, 1) == '/' ) ? true : false; 
    914927        } 
    915928 
     
    933946                        $this->init(); 
    934947                } 
    935948        } 
     949         
     950        function set_author_base( $author_base ) { 
     951                if ( $this->tag_base != $author_base ) { 
     952                        update_option( 'author_base', $author_base ); 
     953                        $this->init(); 
     954                } 
     955        } 
     956         
     957        function set_comments_base( $comments_base ) { 
     958                if ( $this->comments_base != $comments_base ) { 
     959                        update_option( 'comments_base', $comments_base ); 
     960                        $this->init(); 
     961                } 
     962        } 
     963         
     964        function set_feed_base( $feed_base ) { 
     965                if ( $this->feed_base != $feed_base ) { 
     966                        update_option( 'feed_base', $feed_base ); 
     967                        $this->init(); 
     968                } 
     969        } 
     970         
     971        function set_search_base( $search_base ) { 
     972                if ( $this->search_base != $search_base ) { 
     973                        update_option( 'search_base', $search_base ); 
     974                        $this->init(); 
     975                } 
     976        } 
    936977 
    937978        function WP_Rewrite() { 
    938979                $this->init(); 
  • wp-admin/wp-admin.css

     
    13391339        margin-right: 220px; 
    13401340        text-decoration:underline; 
    13411341} 
     1342 
     1343p.permalink-common-option { 
     1344        width: 33%; 
     1345        float: left; 
     1346} 
     1347 
     1348p.permalink-custom { 
     1349        clear: both; 
     1350} 
     1351 No newline at end of file 
  • wp-admin/options-permalink.php

     
    5757 
    5858$home_path = get_home_path(); 
    5959 
    60 if ( isset($_POST['permalink_structure']) || isset($_POST['category_base']) ) { 
     60if ( isset( $_POST['submit'] ) ) { 
    6161        check_admin_referer('update-permalink'); 
    62  
    63         if ( isset($_POST['permalink_structure']) ) { 
    64                 $permalink_structure = $_POST['permalink_structure']; 
    65                 if (! empty($permalink_structure) ) 
    66                         $permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']); 
    67                 $wp_rewrite->set_permalink_structure($permalink_structure); 
     62         
     63        function _clean_base_up( $base ) { 
     64                return preg_replace( '#/+#', '/', '/' . $base ); 
    6865        } 
    69  
    70         if ( isset($_POST['category_base']) ) { 
    71                 $category_base = $_POST['category_base']; 
    72                 if (! empty($category_base) ) 
    73                         $category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']); 
    74                 $wp_rewrite->set_category_base($category_base); 
     66         
     67        function _do_rewrite_rules_stuff( $rule_name ) { 
     68                global $wp_rewrite; 
     69                 
     70                if ( isset( $_POST[$rule_name] ) ) { 
     71                        $rule = $_POST[$rule_name]; 
     72                         
     73                        if ( !empty( $rule ) ) { 
     74                                $rule = preg_replace( '#/+#', '/', '/' . $rule ); 
     75                        } 
     76                         
     77                        if ( method_exists( $wp_rewrite, 'set_' . $rule_name ) ) { 
     78                                call_user_func( array( &$wp_rewrite, 'set_' . $rule_name ), $rule ); 
     79                        } 
     80                } 
    7581        } 
    76  
    77         if ( isset($_POST['tag_base']) ) { 
    78                 $tag_base = $_POST['tag_base']; 
    79                 if (! empty($tag_base) ) 
    80                         $tag_base = preg_replace('#/+#', '/', '/' . $_POST['tag_base']); 
    81                 $wp_rewrite->set_tag_base($tag_base); 
     82         
     83        $possible_rules = array( 
     84                'permalink_structure', 'author_base', 'category_base',  
     85                'comments_base', 'feed_base', 'search_base', 'tag_base' 
     86        ); 
     87         
     88        foreach ( $possible_rules as $rule ) { 
     89                _do_rewrite_rules_stuff( $rule ); 
    8290        } 
    8391} 
    8492 
    85 $permalink_structure = get_option('permalink_structure'); 
    86 $category_base = get_option('category_base'); 
     93$permalink_structure = get_option( 'permalink_structure' ); 
     94 
     95$author_base = get_option( 'author_base' ); 
     96$category_base = get_option( 'category_base' ); 
     97$comments_base = get_option( 'comments_base' ); 
     98$feed_base = get_option( 'feed_base' ); 
     99$search_base = get_option( 'search_base' ); 
    87100$tag_base = get_option( 'tag_base' ); 
    88101 
    89102if ( (!file_exists($home_path.'.htaccess') && is_writable($home_path)) || is_writable($home_path.'.htaccess') ) 
     
    112125  <h2><?php _e('Customize Permalink Structure') ?></h2>  
    113126<form name="form" action="options-permalink.php" method="post">  
    114127<?php wp_nonce_field('update-permalink') ?> 
    115 <p class="submit"><input type="submit" name="submit" value="<?php _e('Update Permalink Structure &raquo;') ?>" /></p> 
    116128  <p><?php _e('By default WordPress uses web <abbr title="Universal Resource Locator">URL</abbr>s which have question marks and lots of numbers in them, however WordPress offers you the ability to create a custom URL structure for your permalinks and archives. This can improve the aesthetics, usability, and forward-compatibility of your links. A <a href="http://codex.wordpress.org/Using_Permalinks">number of tags are available</a>, and here are some examples to get you started.'); ?></p> 
    117129 
    118130<?php 
     
    153165checked="checked" 
    154166<?php } ?> 
    155167 /> 
    156 <?php _e('Custom, specify below'); ?> 
    157 </label> 
    158 <br /> 
     168<?php _e('Custom:'); ?></label>&nbsp;&nbsp;<input name="permalink_structure" id="permalink_structure" type="text" class="code" style="width: 60%;" value="<?php echo attribute_escape($permalink_structure); ?>" size="50" /> 
    159169</p> 
    160 <p id="customstructure"><?php _e('Custom structure'); ?>: <input name="permalink_structure" id="permalink_structure" type="text" class="code" style="width: 60%;" value="<?php echo attribute_escape($permalink_structure); ?>" size="50" /></p> 
    161170 
     171<p class="submit"><input type="submit" name="submit" value="<?php _e('Update Permalink Structure &raquo;') ?>" /></p> 
     172 
    162173<h3><?php _e('Optional'); ?></h3> 
    163 <?php if ($is_apache) : ?> 
    164         <p><?php _e('If you like, you may enter a custom prefix for your category <abbr title="Universal Resource Locator">URL</abbr>s here. For example, <code>/taxonomy/tags</code> would make your category links like <code>http://example.org/taxonomy/tags/uncategorized/</code>. If you leave this blank the default will be used.') ?></p> 
    165 <?php else : ?> 
    166         <p><?php _e('If you like, you may enter a custom prefix for your category <abbr title="Universal Resource Locator">URL</abbr>s here. For example, <code>/index.php/taxonomy/tags</code> would make your category links like <code>http://example.org/index.php/taxonomy/tags/uncategorized/</code>. If you leave this blank the default will be used.') ?></p> 
    167 <?php endif; ?> 
    168         <p>  
    169   <?php _e('Category base'); ?>: <input name="category_base" id="category_base" type="text" class="code"  value="<?php echo attribute_escape($category_base); ?>" size="30" />  
    170      </p> 
    171           <p> 
    172           <?php _e('Tag base'); ?>: <input name="tag_base" id="tag_base" type="text" class="code"  value="<?php echo attribute_escape($tag_base); ?>" size="30" />  
    173      </p>  
    174     <p class="submit">  
    175       <input type="submit" name="submit" value="<?php _e('Update Permalink Structure &raquo;') ?>" />  
    176     </p>  
    177   </form>  
     174 
     175<table class="permalink-bases" style="width: 99%"> 
     176        <tr> 
     177                <td style="width: 33%"> 
     178                        <h4><?php _e( 'Category Base' ); ?></h4> 
     179                        <p><input type="text" name="category_base" id="category_base" class="code" value="<?php echo attribute_escape( $category_base ); ?>" size="30" /></p> 
     180                        <p><small><?php _e( 'Default:' ); ?> <code>/category</code></small></p> 
     181                </td> 
     182                <td style="width: 33%"> 
     183                        <h4><?php _e( 'Tag Base' ); ?></h4> 
     184                        <p><input type="text" name="tag_base" id="tag_base" class="code" value="<?php echo attribute_escape( $tag_base ); ?>" size="30" /></p> 
     185                        <p><small><?php _e( 'Default:' ); ?> <code>/tag</code></small></p> 
     186                </td> 
     187                <td> 
     188                        <h4><?php _e( 'Author Base' ); ?></h4> 
     189                        <p><input type="text" name="author_base" id="author_base" class="code" value="<?php echo attribute_escape( $author_base ); ?>" size="30" /></p> 
     190                        <p><small><?php _e( 'Default:' ); ?> <code>/author</code></small></p> 
     191                </td> 
     192        </tr> 
     193        <tr> 
     194                <td> 
     195                        <h4><?php _e( 'Search Base' ); ?></h4> 
     196                        <p><input type="text" name="search_base" id="search_base" class="code" value="<?php echo attribute_escape( $search_base ); ?>" size="30" /></p> 
     197                        <p><small><?php _e( 'Default:' ); ?> <code>/search</code></small></p> 
     198                </td> 
     199                <td> 
     200                        <h4><?php _e( 'Feed Base' ); ?></h4> 
     201                        <p><input type="text" name="feed_base" id="feed_base" class="code" value="<?php echo attribute_escape( $feed_base ); ?>" size="30" /></p> 
     202                        <p><small><?php _e( 'Default:' ); ?> <code>/feed</code></small></p> 
     203                </td> 
     204                <td> 
     205                        <h4><?php _e( 'Comments Feed Base' ); ?></h4> 
     206                        <p><input type="text" name="comments_base" id="comments_base" class="code" value="<?php echo attribute_escape( $comments_base ); ?>" size="30" /></p> 
     207                        <p><small><?php _e( 'Default:' ); ?> <code>/comments</code></small></p> 
     208                </td> 
     209        </tr> 
     210</table> 
     211 
     212<p class="submit"><input type="submit" name="submit" value="<?php _e('Update Permalink Structure &raquo;') ?>" /></p> 
     213 
     214</form> 
     215 
    178216<?php if ( $permalink_structure && !$usingpi && !$writable ) : ?> 
    179217  <p><?php _e('If your <code>.htaccess</code> file were <a href="http://codex.wordpress.org/Make_a_Directory_Writable">writable</a>, we could do this automatically, but it isn&#8217;t so these are the mod_rewrite rules you should have in your <code>.htaccess</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all.') ?></p> 
    180218<form action="options-permalink.php" method="post"> 
  • wp-admin/upgrade-schema.php

     
    243243        add_option('default_link_category', 2); 
    244244        add_option('show_on_front', 'posts'); 
    245245 
    246         // 2.2 
     246        // 2.3 
    247247        add_option('tag_base'); 
     248        add_option( 'author_base' ); 
     249        add_option( 'search_base' ); 
     250        add_option( 'comments_base' ); 
     251        add_option( 'feed_base' ); 
    248252 
    249253        // Delete unused options 
    250254        $unusedoptions = array ('blodotgsping_url', 'bodyterminator', 'emailtestonly', 'phoneemail_separator', 'smilies_directory', 'subjectprefix', 'use_bbcode', 'use_blodotgsping', 'use_phoneemail', 'use_quicktags', 'use_weblogsping', 'weblogs_cache_file', 'use_preview', 'use_htmltrans', 'smilies_directory', 'fileupload_allowedusers', 'use_phoneemail', 'default_post_status', 'default_post_category', 'archive_mode', 'time_difference', 'links_minadminlevel', 'links_use_adminlevels', 'links_rating_type', 'links_rating_char', 'links_rating_ignore_zero', 'links_rating_single_image', 'links_rating_image0', 'links_rating_image1', 'links_rating_image2', 'links_rating_image3', 'links_rating_image4', 'links_rating_image5', 'links_rating_image6', 'links_rating_image7', 'links_rating_image8', 'links_rating_image9', 'weblogs_cacheminutes', 'comment_allowed_tags', 'search_engine_friendly_urls', 'default_geourl_lat', 'default_geourl_lon', 'use_default_geourl', 'weblogs_xml_url', 'new_users_can_blog', '_wpnonce', '_wp_http_referer', 'Update', 'action', 'rich_editing');