Make WordPress Core

source: trunk/wp-admin/options-permalink.php @ 16431

Last change on this file since 16431 was 16431, checked in by markjaquith, 14 years ago

esc_textarea() and application for obvious textarea escaping. props alexkingorg. fixes #15454

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.0 KB
Line 
1<?php
2/**
3 * Permalink settings administration panel.
4 *
5 * @package WordPress
6 * @subpackage Administration
7 */
8
9/** WordPress Administration Bootstrap */
10require_once('./admin.php');
11
12if ( ! current_user_can( 'manage_options' ) )
13        wp_die( __( 'You do not have sufficient permissions to manage options for this site.' ) );
14
15$title = __('Permalink Settings');
16$parent_file = 'options-general.php';
17
18add_contextual_help($current_screen,
19        '<p>' . __('This screen provides some common options for your default permalinks URL structure.') . '</p>' .
20        '<p>' . __('If you pick an option other than Default, your general URL path with structure tags, terms surrounded by <code>%</code>, will also appear in the custom structure field and your path can be further modified there.') . '</p>' .
21        '<p>' . __('When you assign multiple categories or tags to a post, only one can show up in the permalink: the lowest numbered category. This applies if your custom structure includes <code>%category%</code> or <code>%tag%</code>.') . '</p>' .
22        '<p>' . __('Note that permalinks beginning with the category, tag, author or postname structure tags require more advanced server resources. Double-check your hosting details to make sure those are in place or start your permalinks with other structure tags.') . '</p>' .
23        '<p>' . __('The Optional fields let you customize the &#8220;category&#8221; and &#8220;tag&#8221; base names that will appear in archive URLs. For example, the page listing all posts in the &#8220;Uncategorized&#8221; category could be <code>/topics/uncategorized</code> instead of <code>/category/uncategorized</code>.') . '</p>' .
24        '<p>' . __('You must click the Save Changes button at the bottom of the screen for new settings to take effect.') . '</p>' .
25        '<p><strong>' . __('For more information:') . '</strong></p>' .
26        '<p>' . __('<a href="http://codex.wordpress.org/Settings_Permalinks_SubPanel" target="_blank">Permalinks Settings Documentation</a>') . '</p>' .
27        '<p>' . __('<a href="http://codex.wordpress.org/Using_Permalinks" target="_blank">Using Permalinks Documentation</a>') . '</p>' .
28        '<p>' . __('<a href="http://wordpress.org/support/" target="_blank">Support Forums</a>') . '</p>'
29);
30
31/**
32 * Display JavaScript on the page.
33 *
34 * @package WordPress
35 * @subpackage Permalink_Settings_Panel
36 */
37function add_js() {
38        ?>
39<script type="text/javascript">
40//<![CDATA[
41jQuery(document).ready(function() {
42        jQuery('input:radio.tog').change(function() {
43                if ( 'custom' == this.value )
44                        return;
45                jQuery('#permalink_structure').val( this.value );
46        });
47        jQuery('#permalink_structure').focus(function() {
48                jQuery("#custom_selection").attr('checked', 'checked');
49        });
50});
51//]]>
52</script>
53<?php
54}
55add_filter('admin_head', 'add_js');
56
57include('./admin-header.php');
58
59$home_path = get_home_path();
60$iis7_permalinks = iis7_supports_permalinks();
61
62$prefix = $blog_prefix = '';
63if ( ! got_mod_rewrite() && ! $iis7_permalinks )
64        $prefix = '/index.php';
65if ( is_multisite() && !is_subdomain_install() && is_main_site() )
66        $blog_prefix = '/blog';
67
68if ( isset($_POST['permalink_structure']) || isset($_POST['category_base']) ) {
69        check_admin_referer('update-permalink');
70
71        if ( isset( $_POST['permalink_structure'] ) ) {
72                if ( isset( $_POST['selection'] ) && 'custom' != $_POST['selection'] )
73                        $permalink_structure = $_POST['selection'];
74                else
75                        $permalink_structure = $_POST['permalink_structure'];
76
77                if ( ! empty( $permalink_structure ) ) {
78                        $permalink_structure = preg_replace( '#/+#', '/', '/' . str_replace( '#', '', $permalink_structure ) );
79                        if ( $prefix && $blog_prefix )
80                                $permalink_structure = $prefix . preg_replace( '#^/?index\.php#', '', $permalink_structure );
81                        else
82                                $permalink_structure = $blog_prefix . $permalink_structure;
83                }
84                $wp_rewrite->set_permalink_structure( $permalink_structure );
85        }
86
87        if ( isset( $_POST['category_base'] ) ) {
88                $category_base = $_POST['category_base'];
89                if ( ! empty( $category_base ) )
90                        $category_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $category_base ) );
91                $wp_rewrite->set_category_base( $category_base );
92        }
93
94        if ( isset( $_POST['tag_base'] ) ) {
95                $tag_base = $_POST['tag_base'];
96                if ( ! empty( $tag_base ) )
97                        $tag_base = $blog_prefix . preg_replace('#/+#', '/', '/' . str_replace( '#', '', $tag_base ) );
98                $wp_rewrite->set_tag_base( $tag_base );
99        }
100}
101
102$permalink_structure = get_option('permalink_structure');
103$category_base = get_option('category_base');
104$tag_base = get_option( 'tag_base' );
105
106if ( $iis7_permalinks ) {
107        if ( ( ! file_exists($home_path . 'web.config') && win_is_writable($home_path) ) || win_is_writable($home_path . 'web.config') )
108                $writable = true;
109        else
110                $writable = false;
111} else {
112        if ( ( ! file_exists($home_path . '.htaccess') && is_writable($home_path) ) || is_writable($home_path . '.htaccess') )
113                $writable = true;
114        else
115                $writable = false;
116}
117
118if ( $wp_rewrite->using_index_permalinks() )
119        $usingpi = true;
120else
121        $usingpi = false;
122
123$wp_rewrite->flush_rules();
124
125
126if (isset($_POST['submit'])) : ?>
127<div id="message" class="updated"><p><?php
128if ( ! is_multisite() ) {
129        if ( $iis7_permalinks ) {
130                if ( $permalink_structure && ! $usingpi && ! $writable )
131                        _e('You should update your web.config now');
132                else if ( $permalink_structure && ! $usingpi && $writable )
133                        _e('Permalink structure updated. Remove write access on web.config file now!');
134                else
135                        _e('Permalink structure updated');
136        } else {
137                if ( $permalink_structure && ! $usingpi && ! $writable )
138                        _e('You should update your .htaccess now.');
139                else
140                        _e('Permalink structure updated.');
141        }
142} else {
143        _e('Permalink structure updated.');
144}
145?>
146</p></div>
147<?php endif; ?>
148
149<div class="wrap">
150<?php screen_icon(); ?>
151<h2><?php echo esc_html( $title ); ?></h2>
152
153<form name="form" action="options-permalink.php" method="post">
154<?php wp_nonce_field('update-permalink') ?>
155
156  <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>
157
158<?php
159if ( is_multisite() && !is_subdomain_install() && is_main_site() ) {
160        $permalink_structure = preg_replace( '|^/?blog|', '', $permalink_structure );
161        $category_base = preg_replace( '|^/?blog|', '', $category_base );
162        $tag_base = preg_replace( '|^/?blog|', '', $tag_base );
163}
164
165$structures = array(
166        '',
167        $prefix . '/%year%/%monthnum%/%day%/%postname%/',
168        $prefix . '/%year%/%monthnum%/%postname%/',
169        $prefix . '/archives/%post_id%'
170        );
171?>
172<h3><?php _e('Common settings'); ?></h3>
173<table class="form-table">
174        <tr>
175                <th><label><input name="selection" type="radio" value="" class="tog" <?php checked('', $permalink_structure); ?> /> <?php _e('Default'); ?></label></th>
176                <td><code><?php echo get_option('home'); ?>/?p=123</code></td>
177        </tr>
178        <tr>
179                <th><label><input name="selection" type="radio" value="<?php echo esc_attr($structures[1]); ?>" class="tog" <?php checked($structures[1], $permalink_structure); ?> /> <?php _e('Day and name'); ?></label></th>
180                <td><code><?php echo get_option('home') . $blog_prefix . $prefix . '/' . date('Y') . '/' . date('m') . '/' . date('d') . '/sample-post/'; ?></code></td>
181        </tr>
182        <tr>
183                <th><label><input name="selection" type="radio" value="<?php echo esc_attr($structures[2]); ?>" class="tog" <?php checked($structures[2], $permalink_structure); ?> /> <?php _e('Month and name'); ?></label></th>
184                <td><code><?php echo get_option('home') . $blog_prefix . $prefix . '/' . date('Y') . '/' . date('m') . '/sample-post/'; ?></code></td>
185        </tr>
186        <tr>
187                <th><label><input name="selection" type="radio" value="<?php echo esc_attr($structures[3]); ?>" class="tog" <?php checked($structures[3], $permalink_structure); ?> /> <?php _e('Numeric'); ?></label></th>
188                <td><code><?php echo get_option('home') . $blog_prefix . $prefix; ?>/archives/123</code></td>
189        </tr>
190        <tr>
191                <th>
192                        <label><input name="selection" id="custom_selection" type="radio" value="custom" class="tog" <?php checked( !in_array($permalink_structure, $structures) ); ?> />
193                        <?php _e('Custom Structure'); ?>
194                        </label>
195                </th>
196                <td>
197                        <?php echo $blog_prefix; ?>
198                        <input name="permalink_structure" id="permalink_structure" type="text" value="<?php echo esc_attr($permalink_structure); ?>" class="regular-text code" />
199                </td>
200        </tr>
201</table>
202
203<h3><?php _e('Optional'); ?></h3>
204<?php if ( $is_apache || $iis7_permalinks ) : ?>
205        <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>
206<?php else : ?>
207        <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>
208<?php endif; ?>
209
210<table class="form-table">
211        <tr>
212                <th><label for="category_base"><?php /* translators: prefix for category permalinks */ _e('Category base'); ?></label></th>
213                <td><?php echo $blog_prefix; ?> <input name="category_base" id="category_base" type="text" value="<?php echo esc_attr( $category_base ); ?>" class="regular-text code" /></td>
214        </tr>
215        <tr>
216                <th><label for="tag_base"><?php _e('Tag base'); ?></label></th>
217                <td><?php echo $blog_prefix; ?> <input name="tag_base" id="tag_base" type="text" value="<?php echo esc_attr($tag_base); ?>" class="regular-text code" /></td>
218        </tr>
219        <?php do_settings_fields('permalink', 'optional'); ?>
220</table>
221
222<?php do_settings_sections('permalink'); ?>
223
224<?php submit_button(); ?>
225  </form>
226<?php if ( !is_multisite() ) { ?>
227<?php if ( $iis7_permalinks ) :
228        if ( isset($_POST['submit']) && $permalink_structure && ! $usingpi && ! $writable ) :
229                if ( file_exists($home_path . 'web.config') ) : ?>
230<p><?php _e('If your <code>web.config</code> file were <a href="http://codex.wordpress.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your <code>web.config</code> file. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this rule inside of the <code>/&lt;configuration&gt;/&lt;system.webServer&gt;/&lt;rewrite&gt;/&lt;rules&gt;</code> element in <code>web.config</code> file.') ?></p>
231<form action="options-permalink.php" method="post">
232<?php wp_nonce_field('update-permalink') ?>
233        <p><textarea rows="9" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->iis7_url_rewrite_rules() ); ?></textarea></p>
234</form>
235<p><?php _e('If you temporarily make your <code>web.config</code> file writable for us to generate rewrite rules automatically, do not forget to revert the permissions after rule has been saved.')  ?></p>
236                <?php else : ?>
237<p><?php _e('If the root directory of your site were <a href="http://codex.wordpress.org/Changing_File_Permissions">writable</a>, we could do this automatically, but it isn&#8217;t so this is the url rewrite rule you should have in your <code>web.config</code> file. Create a new file, called <code>web.config</code> in the root directory of your site. Click in the field and press <kbd>CTRL + a</kbd> to select all. Then insert this code into the <code>web.config</code> file.') ?></p>
238<form action="options-permalink.php" method="post">
239<?php wp_nonce_field('update-permalink') ?>
240        <p><textarea rows="18" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->iis7_url_rewrite_rules(true) ); ?></textarea></p>
241</form>
242<p><?php _e('If you temporarily make your site&#8217;s root directory writable for us to generate the <code>web.config</code> file automatically, do not forget to revert the permissions after the file has been created.')  ?></p>
243                <?php endif; ?>
244        <?php endif; ?>
245<?php else :
246        if ( $permalink_structure && ! $usingpi && ! $writable ) : ?>
247<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&#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>
248<form action="options-permalink.php" method="post">
249<?php wp_nonce_field('update-permalink') ?>
250        <p><textarea rows="6" class="large-text readonly" name="rules" id="rules" readonly="readonly"><?php echo esc_textarea( $wp_rewrite->mod_rewrite_rules() ); ?></textarea></p>
251</form>
252        <?php endif; ?>
253<?php endif; ?>
254<?php } // multisite ?>
255
256</div>
257
258<?php require('./admin-footer.php'); ?>
Note: See TracBrowser for help on using the repository browser.