Ticket #9296: permalink-settings-fix.diff
File permalink-settings-fix.diff, 21.5 KB (added by , 16 years ago) |
---|
-
wp-admin/options-head.php
10 10 */ 11 11 12 12 wp_reset_vars(array('action', 'standalone', 'option_group_id')); 13 ?>14 13 15 <?php if (isset($_GET['updated'])): ?>14 if ( (isset($_GET['updated'])) && ('Permalink Settings' != $title) ): ?> 16 15 <div id="message" class="updated fade"><p><strong><?php _e('Settings saved.') ?></strong></p></div> 17 <?php endif; ?> 18 No newline at end of file 16 <?php endif; ?> -
wp-admin/options-permalink.php
70 70 include('admin-header.php'); 71 71 72 72 $home_path = get_home_path(); 73 74 if ( isset($_POST['permalink_structure']) || isset($_POST['category_base']) ) {75 check_admin_referer('update-permalink');76 77 if ( isset($_POST['permalink_structure']) ) {78 $permalink_structure = $_POST['permalink_structure'];79 if (! empty($permalink_structure) )80 $permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']);81 $wp_rewrite->set_permalink_structure($permalink_structure);82 }83 84 if ( isset($_POST['category_base']) ) {85 $category_base = $_POST['category_base'];86 if (! empty($category_base) )87 $category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']);88 $wp_rewrite->set_category_base($category_base);89 }90 91 if ( isset($_POST['tag_base']) ) {92 $tag_base = $_POST['tag_base'];93 if (! empty($tag_base) )94 $tag_base = preg_replace('#/+#', '/', '/' . $_POST['tag_base']);95 $wp_rewrite->set_tag_base($tag_base);96 }97 }98 99 73 $permalink_structure = get_option('permalink_structure'); 100 74 $category_base = get_option('category_base'); 101 75 $tag_base = get_option( 'tag_base' ); 102 76 103 77 if ( (!file_exists($home_path.'.htaccess') && is_writable($home_path)) || is_writable($home_path.'.htaccess') ) 104 78 $writable = true; 105 79 else 106 80 $writable = false; 107 81 108 82 if ($wp_rewrite->using_index_permalinks()) 109 83 $usingpi = true; 110 84 else 111 85 $usingpi = false; 112 86 113 87 $wp_rewrite->flush_rules(); 114 88 ?> 115 89 116 <?php if (isset($_ POST['submit'])) : ?>90 <?php if (isset($_GET['updated'])) : ?> 117 91 <div id="message" class="updated fade"><p><?php 118 92 if ( $permalink_structure && !$usingpi && !$writable ) 119 93 _e('You should update your .htaccess now.'); 120 94 else 121 95 _e('Permalink structure updated.'); 122 96 ?></p></div> 123 97 <?php endif; ?> 124 98 … … 126 100 <?php screen_icon(); ?> 127 101 <h2><?php echo wp_specialchars( $title ); ?></h2> 128 102 129 <form name="form" action="options -permalink.php" method="post">130 <?php wp_nonce_field('update-permalink')?>103 <form name="form" action="options.php" method="post"> 104 <?php settings_fields('permalink'); ?> 131 105 132 106 <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> 133 107 … … 135 109 $prefix = ''; 136 110 137 111 if ( ! got_mod_rewrite() ) 138 112 $prefix = '/index.php'; 139 113 140 114 $structures = array( 141 142 143 144 145 115 '', 116 $prefix . '/%year%/%monthnum%/%day%/%postname%/', 117 $prefix . '/%year%/%monthnum%/%postname%/', 118 $prefix . '/archives/%post_id%' 119 ); 146 120 ?> 147 121 <h3><?php _e('Common settings'); ?></h3> 148 122 <table class="form-table"> 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 123 <tr> 124 <th><label><input name="selection" type="radio" value="" class="tog" <?php checked('', $permalink_structure); ?> /> <?php _e('Default'); ?></label></th> 125 <td><code><?php echo get_option('home'); ?>/?p=123</code></td> 126 </tr> 127 <tr> 128 <th><label><input name="selection" type="radio" value="<?php echo $structures[1]; ?>" class="tog" <?php checked($structures[1], $permalink_structure); ?> /> <?php _e('Day and name'); ?></label></th> 129 <td><code><?php echo get_option('home') . $prefix . '/' . date('Y') . '/' . date('m') . '/' . date('d') . '/sample-post/'; ?></code></td> 130 </tr> 131 <tr> 132 <th><label><input name="selection" type="radio" value="<?php echo $structures[2]; ?>" class="tog" <?php checked($structures[2], $permalink_structure); ?> /> <?php _e('Month and name'); ?></label></th> 133 <td><code><?php echo get_option('home') . $prefix . '/' . date('Y') . '/' . date('m') . '/sample-post/'; ?></code></td> 134 </tr> 135 <tr> 136 <th><label><input name="selection" type="radio" value="<?php echo $structures[3]; ?>" class="tog" <?php checked($structures[3], $permalink_structure); ?> /> <?php _e('Numeric'); ?></label></th> 137 <td><code><?php echo get_option('home') . $prefix ; ?>/archives/123</code></td> 138 </tr> 139 <tr> 140 <th> 141 <label><input name="selection" id="custom_selection" type="radio" value="custom" class="tog" 142 <?php if ( !in_array($permalink_structure, $structures) ) { ?> 143 checked="checked" 144 <?php } ?> 145 /> 146 <?php _e('Custom Structure'); ?> 147 </label> 148 </th> 149 <td> 150 <input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo attribute_escape($permalink_structure); ?>" class="regular-text code" /> 151 </td> 152 </tr> 179 153 </table> 180 154 181 155 <h3><?php _e('Optional'); ?></h3> 182 156 <?php if ($is_apache) : ?> 183 157 <p><?php _e('If you like, you may enter custom structures for your category and tag <abbr title="Universal Resource Locator">URL</abbr>s here. For example, using <kbd>topics</kbd> as your category base would make your category links like <code>http://example.org/topics/uncategorized/</code>. If you leave these blank the defaults will be used.') ?></p> 184 158 <?php else : ?> 185 159 <p><?php _e('If you like, you may enter custom structures for your category and tag <abbr title="Universal Resource Locator">URL</abbr>s here. For example, using <code>topics</code> as your category base would make your category links like <code>http://example.org/index.php/topics/uncategorized/</code>. If you leave these blank the defaults will be used.') ?></p> 186 160 <?php endif; ?> 187 161 188 162 <table class="form-table"> 189 190 191 192 193 194 195 196 197 163 <tr> 164 <th><label for="category_base"><?php _e('Category base'); ?></label></th> 165 <td><input name="category_base" id="category_base" type="text" value="<?php echo attribute_escape($category_base); ?>" class="regular-text code" /></td> 166 </tr> 167 <tr> 168 <th><label for="tag_base"><?php _e('Tag base'); ?></label></th> 169 <td><input name="tag_base" id="tag_base" type="text" value="<?php echo attribute_escape($tag_base); ?>" class="regular-text code" /></td> 170 </tr> 171 <?php do_settings_fields('permalink', 'optional'); ?> 198 172 </table> 199 173 200 174 <?php do_settings_sections('permalink'); ?> 201 175 202 176 <p class="submit"> 203 177 <input type="submit" name="submit" class="button-primary" value="<?php _e('Save Changes') ?>" /> 204 178 </p> 205 179 </form> 206 180 <?php if ( $permalink_structure && !$usingpi && !$writable ) : ?> 207 181 <p><?php _e('If your <code>.htaccess</code> file were <a href="http://codex.wordpress.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn’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> 208 <form action="options -permalink.php" method="post">182 <form action="options.php" method="post"> 209 183 <?php wp_nonce_field('update-permalink') ?> 210 184 <p><textarea rows="6" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo wp_specialchars($wp_rewrite->mod_rewrite_rules()); ?></textarea></p> 211 185 </form> 212 186 <?php endif; ?> 213 187 -
wp-admin/options.php
22 22 wp_reset_vars(array('action')); 23 23 24 24 $whitelist_options = array( 25 26 27 28 29 30 31 32 25 'general' => array( 'blogname', 'blogdescription', 'admin_email', 'users_can_register', 'gmt_offset', 'date_format', 'time_format', 'start_of_week', 'default_role' ), 26 'discussion' => array( 'default_pingback_flag', 'default_ping_status', 'default_comment_status', 'comments_notify', 'moderation_notify', 'comment_moderation', 'require_name_email', 'comment_whitelist', 'comment_max_links', 'moderation_keys', 'blacklist_keys', 'show_avatars', 'avatar_rating', 'avatar_default', 'close_comments_for_old_posts', 'close_comments_days_old', 'thread_comments', 'thread_comments_depth', 'page_comments', 'comments_per_page', 'default_comments_page', 'comment_order', 'comment_registration' ), 27 'misc' => array( 'hack_file', 'use_linksupdate', 'uploads_use_yearmonth_folders', 'upload_path', 'upload_url_path' ), 28 'media' => array( 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'image_default_size', 'image_default_align', 'image_default_link_type' ), 29 'privacy' => array( 'blog_public' ), 30 'reading' => array( 'posts_per_page', 'posts_per_rss', 'rss_use_excerpt', 'blog_charset', 'show_on_front', 'page_on_front', 'page_for_posts' ), 31 'writing' => array( 'default_post_edit_rows', 'use_smilies', 'ping_sites', 'mailserver_url', 'mailserver_port', 'mailserver_login', 'mailserver_pass', 'default_category', 'default_email_category', 'use_balanceTags', 'default_link_category', 'enable_app', 'enable_xmlrpc' ), 32 'options' => array( '' ) ); 33 33 if ( !defined( 'WP_SITEURL' ) ) $whitelist_options['general'][] = 'siteurl'; 34 34 if ( !defined( 'WP_HOME' ) ) $whitelist_options['general'][] = 'home'; 35 35 36 36 $whitelist_options = apply_filters( 'whitelist_options', $whitelist_options ); 37 37 38 38 if ( !current_user_can('manage_options') ) 39 39 wp_die(__('Cheatin’ uh?')); 40 40 41 41 switch($action) { 42 42 43 43 case 'update': 44 45 46 47 48 49 50 51 44 if ( isset($_POST[ 'option_page' ]) ) { 45 $option_page = $_POST[ 'option_page' ]; 46 check_admin_referer( $option_page . '-options' ); 47 } else { 48 // This is for back compat and will eventually be removed. 49 $option_page = 'options'; 50 check_admin_referer( 'update-options' ); 51 } 52 52 53 54 53 if ( !isset( $whitelist_options[ $option_page ] ) ) 54 wp_die( __( 'Error! Options page not found.' ) ); 55 55 56 57 58 59 60 56 if ( 'options' == $option_page ) { 57 $options = explode(',', stripslashes( $_POST[ 'page_options' ] )); 58 } else { 59 $options = $whitelist_options[ $option_page ]; 60 } 61 61 62 // Handle custom date/time formats 63 if ( 'general' == $option_page ) { 64 if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['date_format'] ) ) 65 $_POST['date_format'] = $_POST['date_format_custom']; 66 if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['time_format'] ) ) 67 $_POST['time_format'] = $_POST['time_format_custom']; 68 } 62 // Handle custom date/time formats 63 if ( 'general' == $option_page ) { 64 if ( !empty($_POST['date_format']) && isset($_POST['date_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['date_format'] ) ) 65 $_POST['date_format'] = $_POST['date_format_custom']; 66 if ( !empty($_POST['time_format']) && isset($_POST['time_format_custom']) && '\c\u\s\t\o\m' == stripslashes( $_POST['time_format'] ) ) 67 $_POST['time_format'] = $_POST['time_format_custom']; 68 } 69 70 //Handle permalink updates 71 if ( 'permalink' == $option_page ) { 72 if ( isset($_POST['permalink_structure']) ) { 73 $permalink_structure = $_POST['permalink_structure']; 74 if (! empty($permalink_structure) ) 75 $permalink_structure = preg_replace('#/+#', '/', '/' . $_POST['permalink_structure']); 76 $wp_rewrite->set_permalink_structure($permalink_structure); 77 } 69 78 70 if ( $options ) { 71 foreach ( $options as $option ) { 72 $option = trim($option); 73 $value = null; 74 if ( isset($_POST[$option]) ) 75 $value = $_POST[$option]; 76 if ( !is_array($value) ) $value = trim($value); 77 $value = stripslashes_deep($value); 78 update_option($option, $value); 79 } 80 } 79 if ( isset($_POST['category_base']) ) { 80 $category_base = $_POST['category_base']; 81 if (! empty($category_base) ) 82 $category_base = preg_replace('#/+#', '/', '/' . $_POST['category_base']); 83 $wp_rewrite->set_category_base($category_base); 84 } 81 85 82 $goback = add_query_arg( 'updated', 'true', wp_get_referer() ); 83 wp_redirect( $goback ); 84 break; 86 if ( isset($_POST['tag_base']) ) { 87 $tag_base = $_POST['tag_base']; 88 if (! empty($tag_base) ) 89 $tag_base = preg_replace('#/+#', '/', '/' . $_POST['tag_base']); 90 $wp_rewrite->set_tag_base($tag_base); 91 } 92 } 85 93 94 if ( $options ) { 95 foreach ( $options as $option ) { 96 $option = trim($option); 97 $value = null; 98 if ( isset($_POST[$option]) ) 99 $value = $_POST[$option]; 100 if ( !is_array($value) ) $value = trim($value); 101 $value = stripslashes_deep($value); 102 update_option($option, $value); 103 } 104 } 105 106 $goback = add_query_arg( 'updated', 'true', wp_get_referer() ); 107 wp_redirect( $goback ); 108 break; 109 86 110 default: 87 111 include('admin-header.php'); ?> 88 112 89 113 <div class="wrap"> 90 114 <?php screen_icon(); ?> … … 98 122 $options = $wpdb->get_results("SELECT * FROM $wpdb->options ORDER BY option_name"); 99 123 100 124 foreach ( (array) $options as $option) : 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 125 $disabled = ''; 126 $option->option_name = attribute_escape($option->option_name); 127 if ( is_serialized($option->option_value) ) { 128 if ( is_serialized_string($option->option_value) ) { 129 // this is a serialized string, so we should display it 130 $value = maybe_unserialize($option->option_value); 131 $options_to_update[] = $option->option_name; 132 $class = 'all-options'; 133 } else { 134 $value = 'SERIALIZED DATA'; 135 $disabled = ' disabled="disabled"'; 136 $class = 'all-options disabled'; 137 } 138 } else { 139 $value = $option->option_value; 140 $options_to_update[] = $option->option_name; 141 $class = 'all-options'; 142 } 143 echo " 120 144 <tr> 121 145 <th scope='row'><label for='$option->option_name'>$option->option_name</label></th> 122 146 <td>"; 123 147 124 125 148 if (strpos($value, "\n") !== false) echo "<textarea class='$class' name='$option->option_name' id='$option->option_name' cols='30' rows='5'>" . wp_specialchars($value) . "</textarea>"; 149 else echo "<input class='regular-text $class' type='text' name='$option->option_name' id='$option->option_name' value='" . attribute_escape($value) . "'$disabled />"; 126 150 127 151 echo "</td> 128 152 </tr>"; 129 153 endforeach; 130 154 ?>