Edit Author Slug - Version 1.4.1

Version Description

  • Release date: April 24, 2017
  • Fix failing string replacement in bulk update message.
Download this release

Release Info

Developer thebrandonallen
Plugin Icon 128x128 Edit Author Slug
Version 1.4.1
Comparing to
See all releases

Code changes from version 1.3.0 to 1.4.1

edit-author-slug.php CHANGED
@@ -1,24 +1,22 @@
1
  <?php
2
  /**
3
- * Plugin Name: Edit Author Slug
4
- * Plugin URI: https://github.com/thebrandonallen/edit-author-slug/
5
- * Description: Allows an Admin (or capable user) to edit the author slug of a user, and change the Author Base. <em>i.e. - (WordPress default structure) http://example.com/author/username/ (Plugin allows) http://example.com/ninja/master-ninja/</em>
6
- * Version: 1.3.0
7
- * Tested With: 4.3.7, 4.4.6, 4.5.5, 4.6.2, 4.7.1
8
- * Author: Brandon Allen
9
- * Author URI: https://github.com/thebrandonallen/
10
- * License: GPLv2 or later
11
- * Text Domain: edit-author-slug
12
- * Domain Path: /languages
13
  *
14
  * @package Edit_Author_Slug
15
  * @subpackage Main
16
  * @author Brandon Allen
17
- * @version 1.3.0
18
  */
19
 
20
  /*
21
- Copyright 2009-2016 Brandon Allen (email : plugins ([at]) brandonallen ([dot]) me)
22
 
23
  This program is free software; you can redistribute it and/or modify
24
  it under the terms of the GNU General Public License as published by
@@ -34,7 +32,7 @@
34
  along with this program; if not, write to the Free Software
35
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
36
 
37
- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
38
  */
39
 
40
  // Exit if accessed directly.
@@ -57,20 +55,18 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
57
  /**
58
  * The plugin version.
59
  *
60
- * @since 0.8.0
61
- * @access public
62
- * @var string
63
  */
64
- public $version = '1.3.0';
65
 
66
  /**
67
- * The database version.
68
  *
69
- * @since 0.8.0
70
- * @access public
71
- * @var int
72
  */
73
- public $db_version = 411;
74
 
75
  /**
76
  * The current installed database version.
@@ -117,15 +113,6 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
117
  */
118
  public $plugin_basename = '';
119
 
120
- /**
121
- * The text domain for Edit Author Slug.
122
- *
123
- * @since 0.9.6
124
- * @access public
125
- * @var string
126
- */
127
- public $domain = 'edit-author-slug';
128
-
129
  /**
130
  * The author base.
131
  *
@@ -204,17 +191,50 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
204
 
205
  // Only run these methods if they haven't been ran previously.
206
  if ( null === $instance ) {
207
- $instance = new BA_Edit_Author_Slug;
208
- $instance->setup_globals();
209
- $instance->includes();
210
- $instance->options_back_compat();
211
- $instance->setup_actions();
212
  }
213
 
214
  // Always return the instance.
215
  return $instance;
216
  }
217
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
  /**
219
  * Magic method to prevent notices and errors from invalid method calls.
220
  *
@@ -231,7 +251,11 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
231
  _deprecated_function( 'BA_Edit_Author_Slug::author_base_rewrite', '1.2.0', 'ba_eas_wp_rewrite_overrides' );
232
  ba_eas_wp_rewrite_overrides();
233
  } else {
234
- _doing_it_wrong( "BA_Edit_Author_Slug::{$name}", esc_html__( 'Method does not exist.', 'edit-author-slug' ), '1.0.0' );
 
 
 
 
235
  }
236
 
237
  unset( $name, $args );
@@ -250,7 +274,11 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
250
  * @return void
251
  */
252
  private function __clone() {
253
- _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'edit-author-slug' ), '1.0' );
 
 
 
 
254
  }
255
 
256
  /**
@@ -263,7 +291,11 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
263
  * @return void
264
  */
265
  private function __wakeup() {
266
- _doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'edit-author-slug' ), '1.0' );
 
 
 
 
267
  }
268
 
269
  /* Private Methods ****************************************************/
@@ -286,10 +318,12 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
286
  /* Options ********************************************************/
287
 
288
  // Load the remove front option.
289
- $this->remove_front = (bool) absint( get_option( '_ba_eas_remove_front', 0 ) );
 
290
 
291
  // Load auto-update option.
292
- $this->do_auto_update = (bool) absint( get_option( '_ba_eas_do_auto_update', 0 ) );
 
293
 
294
  // Load the default nicename structure for auto-update.
295
  $default_user_nicename = get_option( '_ba_eas_default_user_nicename' );
@@ -299,7 +333,8 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
299
  }
300
 
301
  // Load role-based author slug option.
302
- $this->do_role_based = (bool) absint( get_option( '_ba_eas_do_role_based', 0 ) );
 
303
  }
304
 
305
  /**
@@ -321,6 +356,34 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
321
  }
322
  }
323
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
324
  /**
325
  * Display Author slug edit field on User/Profile edit page.
326
  *
@@ -352,37 +415,17 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
352
  */
353
  private function options_back_compat() {
354
 
355
- // Options.
356
- if ( $base = get_option( '_ba_eas_author_base' ) ) {
357
-
358
- // Sanitize the db value.
359
- $base = ba_eas_sanitize_author_base( $base );
360
-
361
- // Author base.
362
- if ( ! empty( $base ) ) {
363
- $this->author_base = $base;
364
- }
365
-
366
- // Current DB version.
367
- $this->current_db_version = absint( get_option( '_ba_eas_db_version' ) );
368
-
369
- // Pre-0.9 Back compat.
370
- } elseif ( $options = get_option( 'ba_edit_author_slug' ) ) {
371
-
372
- // Sanitize the db value.
373
- if ( ! empty( $options['author_base'] ) ) {
374
- $base = ba_eas_sanitize_author_base( $options['author_base'] );
375
- }
376
 
377
- // Author base.
378
- if ( ! empty( $base ) ) {
379
- $this->author_base = $base;
380
- }
381
 
382
- // Current DB version.
383
- if ( ! empty( $options['db_version'] ) ) {
384
- $this->current_db_version = absint( $options['db_version'] );
385
- }
386
  }
387
  }
388
 
@@ -406,7 +449,7 @@ if ( ! class_exists( 'BA_Edit_Author_Slug' ) ) :
406
 
407
  // Look in wp-content/plugins/edit-author-slug/languages first.
408
  // Fallback to wp-content/languages/plugins.
409
- load_plugin_textdomain( $this->domain, false, dirname( $this->plugin_basename ) . '/languages/' );
410
  }
411
 
412
  /**
1
  <?php
2
  /**
3
+ * Plugin Name: Edit Author Slug
4
+ * Plugin URI: https://github.com/thebrandonallen/edit-author-slug/
5
+ * Description: Allows an Admin (or capable user) to edit the author slug of a user, and change the Author Base. <em>i.e. - (WordPress default structure) http://example.com/author/username/ (Plugin allows) http://example.com/ninja/master-ninja/</em>
6
+ * Author: Brandon Allen
7
+ * Author URI: https://github.com/thebrandonallen/
8
+ * Text Domain: edit-author-slug
9
+ * Domain Path: /languages
10
+ * Version: 1.4.1
 
 
11
  *
12
  * @package Edit_Author_Slug
13
  * @subpackage Main
14
  * @author Brandon Allen
15
+ * @version 1.4.1
16
  */
17
 
18
  /*
19
+ Copyright (C) 2009-2017 Brandon Allen (email : plugins ([at]) brandonallen ([dot]) me)
20
 
21
  This program is free software; you can redistribute it and/or modify
22
  it under the terms of the GNU General Public License as published by
32
  along with this program; if not, write to the Free Software
33
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
34
 
35
+ https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
36
  */
37
 
38
  // Exit if accessed directly.
55
  /**
56
  * The plugin version.
57
  *
58
+ * @since 1.4.0
59
+ * @var string
 
60
  */
61
+ const VERSION = '1.4.1';
62
 
63
  /**
64
+ * The plugin version.
65
  *
66
+ * @since 1.4.0
67
+ * @var int
 
68
  */
69
+ const DB_VERSION = 411;
70
 
71
  /**
72
  * The current installed database version.
113
  */
114
  public $plugin_basename = '';
115
 
 
 
 
 
 
 
 
 
 
116
  /**
117
  * The author base.
118
  *
191
 
192
  // Only run these methods if they haven't been ran previously.
193
  if ( null === $instance ) {
194
+ $instance = new self;
 
 
 
 
195
  }
196
 
197
  // Always return the instance.
198
  return $instance;
199
  }
200
 
201
+ /**
202
+ * The constructor.
203
+ *
204
+ * @since 1.4.0
205
+ */
206
+ public function __construct() {
207
+ $this->setup_globals();
208
+ $this->includes();
209
+ $this->setup_options();
210
+ $this->setup_actions();
211
+ }
212
+
213
+ /**
214
+ * Magic method for accessing custom/deprecated/nonexistent properties.
215
+ *
216
+ * @since 1.4.0
217
+ *
218
+ * @param string $name The property name.
219
+ *
220
+ * @return mixed
221
+ */
222
+ public function __get( $name ) {
223
+
224
+ // Default to null.
225
+ $retval = null;
226
+
227
+ if ( 'version' === $name ) {
228
+ // BA_Edit_Author_Slug->version was removed in 1.4.0.
229
+ $retval = self::VERSION;
230
+ } elseif ( 'db_version' === $name ) {
231
+ // BA_Edit_Author_Slug->db_version was removed in 1.4.0.
232
+ $retval = self::DB_VERSION;
233
+ }
234
+
235
+ return $retval;
236
+ }
237
+
238
  /**
239
  * Magic method to prevent notices and errors from invalid method calls.
240
  *
251
  _deprecated_function( 'BA_Edit_Author_Slug::author_base_rewrite', '1.2.0', 'ba_eas_wp_rewrite_overrides' );
252
  ba_eas_wp_rewrite_overrides();
253
  } else {
254
+ _doing_it_wrong(
255
+ esc_html( "BA_Edit_Author_Slug::{$name}" ),
256
+ esc_html__( 'Method does not exist.', 'edit-author-slug' ),
257
+ '1.0.0'
258
+ );
259
  }
260
 
261
  unset( $name, $args );
274
  * @return void
275
  */
276
  private function __clone() {
277
+ _doing_it_wrong(
278
+ __FUNCTION__,
279
+ esc_html__( 'Cheatin&#8217; huh?', 'edit-author-slug' ),
280
+ '1.0'
281
+ );
282
  }
283
 
284
  /**
291
  * @return void
292
  */
293
  private function __wakeup() {
294
+ _doing_it_wrong(
295
+ __FUNCTION__,
296
+ esc_html__( 'Cheatin&#8217; huh?', 'edit-author-slug' ),
297
+ '1.0'
298
+ );
299
  }
300
 
301
  /* Private Methods ****************************************************/
318
  /* Options ********************************************************/
319
 
320
  // Load the remove front option.
321
+ $remove_front = (int) get_option( '_ba_eas_remove_front', 0 );
322
+ $this->remove_front = (bool) $remove_front;
323
 
324
  // Load auto-update option.
325
+ $do_auto_update = (int) get_option( '_ba_eas_do_auto_update', 0 );
326
+ $this->do_auto_update = (bool) $do_auto_update;
327
 
328
  // Load the default nicename structure for auto-update.
329
  $default_user_nicename = get_option( '_ba_eas_default_user_nicename' );
333
  }
334
 
335
  // Load role-based author slug option.
336
+ $do_role_based = (int) get_option( '_ba_eas_do_role_based', 0 );
337
+ $this->do_role_based = (bool) $do_role_based;
338
  }
339
 
340
  /**
356
  }
357
  }
358
 
359
+ /**
360
+ * Get our options from the DB and set their corresponding properties.
361
+ *
362
+ * @since 1.4.0
363
+ *
364
+ * @return void
365
+ */
366
+ private function setup_options() {
367
+
368
+ // Get the author base option.
369
+ $base = get_option( '_ba_eas_author_base' );
370
+
371
+ // Options.
372
+ if ( $base ) {
373
+
374
+ // Sanitize the db value.
375
+ $this->author_base = ba_eas_sanitize_author_base( $base );
376
+
377
+ // Current DB version.
378
+ $this->current_db_version = (int) get_option( '_ba_eas_db_version', 0 );
379
+
380
+ return;
381
+ }
382
+
383
+ // If we're still here, check for pre-0.9 options.
384
+ $this->options_back_compat();
385
+ }
386
+
387
  /**
388
  * Display Author slug edit field on User/Profile edit page.
389
  *
415
  */
416
  private function options_back_compat() {
417
 
418
+ // Get the pre-0.9 options.
419
+ $options = get_option( 'ba_edit_author_slug' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
420
 
421
+ // Sanitize the db value.
422
+ if ( ! empty( $options['author_base'] ) ) {
423
+ $this->author_base = ba_eas_sanitize_author_base( $options['author_base'] );
424
+ }
425
 
426
+ // Current DB version.
427
+ if ( ! empty( $options['db_version'] ) ) {
428
+ $this->current_db_version = (int) $options['db_version'];
 
429
  }
430
  }
431
 
449
 
450
  // Look in wp-content/plugins/edit-author-slug/languages first.
451
  // Fallback to wp-content/languages/plugins.
452
+ load_plugin_textdomain( 'edit-author-slug', false, dirname( $this->plugin_basename ) . '/languages/' );
453
  }
454
 
455
  /**
includes/admin.php CHANGED
@@ -26,39 +26,23 @@ defined( 'ABSPATH' ) || exit;
26
  function ba_eas_show_user_nicename( $user ) {
27
 
28
  // Return early if the user can't edit the author slug.
29
- if ( ! ba_eas_can_edit_author_slug() ) {
30
  return;
31
  }
32
 
33
  // Setup the nicename.
34
- $nicename = '';
35
- if ( ! empty( $user->user_nicename ) ) {
36
- $nicename = $user->user_nicename;
37
- }
38
 
39
  // Setup options array.
40
- $options = array();
41
- $options['username'] = ba_eas_sanitize_nicename( $user->nickname );
42
- $options['displayname'] = ba_eas_sanitize_nicename( $user->display_name );
43
-
44
- // Setup the first name.
45
- if ( ! empty( $user->first_name ) ) {
46
- $options['firstname'] = ba_eas_sanitize_nicename( $user->first_name );
47
- }
48
-
49
- // Setup the last name.
50
- if ( ! empty( $user->last_name ) ) {
51
- $options['lastname'] = ba_eas_sanitize_nicename( $user->last_name );
52
- }
53
-
54
- // Setup the first/last name combos.
55
- if ( ! empty( $options['firstname'] ) && ! empty( $options['lastname'] ) ) {
56
- $options['firslast'] = $options['firstname'] . '-' . $options['lastname'];
57
- $options['lastfirst'] = $options['lastname'] . '-' . $options['firstname'];
58
- }
59
-
60
- // Setup the user id.
61
- $options['userid'] = (int) $user->ID;
62
 
63
  /**
64
  * Filters the array of user nicename options.
@@ -153,7 +137,8 @@ function ba_eas_update_user_nicename( $errors, $update, $user ) {
153
  // Stash the original user object.
154
  $_user = get_userdata( $user->ID );
155
 
156
- $user_nicename = $user_nicename_custom = '';
 
157
 
158
  if ( isset( $_POST['ba_eas_author_slug'] ) ) {
159
  $user_nicename = trim( wp_unslash( $_POST['ba_eas_author_slug'] ) );
@@ -184,7 +169,8 @@ function ba_eas_update_user_nicename( $errors, $update, $user ) {
184
  $ascii = ba_eas_nicename_is_ascii( $user_nicename );
185
 
186
  // Sanitize the author slug and cache the pre-filtered, sanitized version.
187
- $user_nicename = $raw_nicename_sanitized = ba_eas_sanitize_nicename( $user_nicename );
 
188
 
189
  /**
190
  * Filters the sanitized user nicename before any final checks are run.
@@ -248,6 +234,7 @@ function ba_eas_update_user_nicename( $errors, $update, $user ) {
248
  if ( $exists && (int) $exists->ID !== $user->ID ) {
249
 
250
  // Setup the error message.
 
251
  $message = __(
252
  '<strong>ERROR</strong>: The author slug, %1$s, already exists. Please try something different.',
253
  'edit-author-slug'
@@ -368,7 +355,7 @@ function ba_eas_show_user_nicename_scripts( $hook_suffix = '' ) {
368
  );
369
 
370
  // Bail if we shouldn't add our js.
371
- if ( ! in_array( $hook_suffix, $user_pages ) || ! ba_eas_can_edit_author_slug() ) {
372
  return;
373
  }
374
 
@@ -448,7 +435,9 @@ function ba_eas_register_admin_settings() {
448
  'ba_eas_admin_setting_callback_author_base',
449
  'edit-author-slug',
450
  'ba_eas_author_base',
451
- array( 'label_for' => '_ba_eas_author_base' )
 
 
452
  );
453
  register_setting( 'edit-author-slug', '_ba_eas_author_base', 'ba_eas_sanitize_author_base' );
454
 
@@ -460,7 +449,9 @@ function ba_eas_register_admin_settings() {
460
  'ba_eas_admin_setting_callback_remove_front',
461
  'edit-author-slug',
462
  'ba_eas_author_base',
463
- array( 'label_for' => '_ba_eas_remove_front' )
 
 
464
  );
465
  register_setting( 'edit-author-slug', '_ba_eas_remove_front', 'intval' );
466
  }
@@ -472,7 +463,9 @@ function ba_eas_register_admin_settings() {
472
  'ba_eas_admin_setting_callback_do_role_based',
473
  'edit-author-slug',
474
  'ba_eas_author_base',
475
- array( 'label_for' => '_ba_eas_do_role_based' )
 
 
476
  );
477
  register_setting( 'edit-author-slug', '_ba_eas_do_role_based', 'intval' );
478
 
@@ -501,7 +494,9 @@ function ba_eas_register_admin_settings() {
501
  'ba_eas_admin_setting_callback_do_auto_update',
502
  'edit-author-slug',
503
  'ba_eas_auto_update',
504
- array( 'label_for' => '_ba_eas_do_auto_update' )
 
 
505
  );
506
  register_setting( 'edit-author-slug', '_ba_eas_do_auto_update', 'intval' );
507
 
@@ -512,7 +507,9 @@ function ba_eas_register_admin_settings() {
512
  'ba_eas_admin_setting_callback_default_user_nicename',
513
  'edit-author-slug',
514
  'ba_eas_auto_update',
515
- array( 'label_for' => '_ba_eas_default_user_nicename' )
 
 
516
  );
517
  register_setting( 'edit-author-slug', '_ba_eas_default_user_nicename', 'sanitize_key' );
518
 
@@ -531,7 +528,9 @@ function ba_eas_register_admin_settings() {
531
  'ba_eas_admin_setting_callback_bulk_update',
532
  'edit-author-slug',
533
  'ba_eas_bulk_update',
534
- array( 'label_for' => '_ba_eas_bulk_update' )
 
 
535
  );
536
  register_setting( 'edit-author-slug', '_ba_eas_bulk_update', 'ba_eas_auto_update_user_nicename_bulk' );
537
 
@@ -542,7 +541,9 @@ function ba_eas_register_admin_settings() {
542
  'ba_eas_admin_setting_callback_bulk_update_structure',
543
  'edit-author-slug',
544
  'ba_eas_bulk_update',
545
- array( 'label_for' => '_ba_eas_bulk_update_structure' )
 
 
546
  );
547
  register_setting( 'edit-author-slug', '_ba_eas_bulk_update_structure', '__return_false' );
548
  }
@@ -581,18 +582,27 @@ function ba_eas_admin_setting_callback_auto_update_section() {
581
  function ba_eas_admin_setting_callback_author_base() {
582
 
583
  $author_base = ba_eas_sanitize_author_base( ba_eas()->author_base );
 
584
 
585
- // Build the demo author link.
586
- $author_link = esc_url( home_url( '/' ) );
587
- $author_link = $author_link . '<span class="eas-demo-author-base-front">' . esc_html( trim( $GLOBALS['wp_rewrite']->front, '/' ) ) . '/</span>';
588
- $author_link = $author_link . '<span class="eas-demo-author-base">' . $author_base . '</span>';
589
- $author_link = $author_link . user_trailingslashit( '/author-slug' );
590
  ?>
591
 
592
  <input id="_ba_eas_author_base" name="_ba_eas_author_base" type="text" value="<?php echo esc_attr( $author_base ); ?>" class="regular-text code" />
593
  <em><?php esc_html_e( "Defaults to 'author'", 'edit-author-slug' ); ?></em>
594
  <br /><br />
595
- <strong>Demo:</strong> <em><?php echo $author_link; ?></em>
 
 
 
 
 
 
 
 
 
596
 
597
  <?php
598
  }
@@ -625,6 +635,7 @@ function ba_eas_admin_setting_callback_do_role_based() {
625
  <?php esc_html_e( "Set user's Author Base according to their role.", 'edit-author-slug' ); ?>
626
  <br /><br />
627
  <?php echo sprintf(
 
628
  esc_html__(
629
  'Use the %1$s rewrite tag to customize the role-based author base. If you set the author base to "%2$s", the resulting author structure will be something like "%3$s".',
630
  'edit-author-slug'
@@ -845,7 +856,15 @@ function ba_eas_admin_setting_callback_bulk_update_structure() {
845
  function ba_eas_add_settings_link( $links, $file ) {
846
 
847
  if ( ba_eas()->plugin_basename === $file ) {
848
- $settings_link = '<a href="' . esc_url( add_query_arg( array( 'page' => 'edit-author-slug' ), admin_url( 'options-general.php' ) ) ) . '">' . esc_html__( 'Settings', 'edit-author-slug' ) . '</a>';
 
 
 
 
 
 
 
 
849
  array_unshift( $links, $settings_link );
850
  }
851
 
@@ -900,13 +919,13 @@ function ba_eas_default_user_nicename_options_list() {
900
  */
901
  function ba_eas_settings_updated() {
902
 
903
- // Make sure we're on the Edit Author Slug settings page.
904
- if ( ! isset( $_REQUEST['option_page'] ) || 'edit-author-slug' !== $_REQUEST['option_page'] ) {
905
  return;
906
  }
907
 
908
- // Check that a valid nonce was passed.
909
- if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'edit-author-slug-options' ) ) {
910
  return;
911
  }
912
 
26
  function ba_eas_show_user_nicename( $user ) {
27
 
28
  // Return early if the user can't edit the author slug.
29
+ if ( empty( $user->ID ) || ! ba_eas_can_edit_author_slug() ) {
30
  return;
31
  }
32
 
33
  // Setup the nicename.
34
+ $nicename = $user->user_nicename;
 
 
 
35
 
36
  // Setup options array.
37
+ $options = array(
38
+ 'username' => ba_eas_get_nicename_by_structure( $user->ID, 'username' ),
39
+ 'displayname' => ba_eas_get_nicename_by_structure( $user->ID, 'displayname' ),
40
+ 'firstname' => ba_eas_get_nicename_by_structure( $user->ID, 'firstname' ),
41
+ 'lastname' => ba_eas_get_nicename_by_structure( $user->ID, 'lastname' ),
42
+ 'firstlast' => ba_eas_get_nicename_by_structure( $user->ID, 'firstlast' ),
43
+ 'lastfirst' => ba_eas_get_nicename_by_structure( $user->ID, 'lastfirst' ),
44
+ 'userid' => ba_eas_get_nicename_by_structure( $user->ID, 'userid' ),
45
+ );
 
 
 
 
 
 
 
 
 
 
 
 
 
46
 
47
  /**
48
  * Filters the array of user nicename options.
137
  // Stash the original user object.
138
  $_user = get_userdata( $user->ID );
139
 
140
+ $user_nicename = '';
141
+ $user_nicename_custom = '';
142
 
143
  if ( isset( $_POST['ba_eas_author_slug'] ) ) {
144
  $user_nicename = trim( wp_unslash( $_POST['ba_eas_author_slug'] ) );
169
  $ascii = ba_eas_nicename_is_ascii( $user_nicename );
170
 
171
  // Sanitize the author slug and cache the pre-filtered, sanitized version.
172
+ $user_nicename = ba_eas_sanitize_nicename( $user_nicename );
173
+ $raw_nicename_sanitized = $user_nicename;
174
 
175
  /**
176
  * Filters the sanitized user nicename before any final checks are run.
234
  if ( $exists && (int) $exists->ID !== $user->ID ) {
235
 
236
  // Setup the error message.
237
+ /* translators: 1: author slug */
238
  $message = __(
239
  '<strong>ERROR</strong>: The author slug, %1$s, already exists. Please try something different.',
240
  'edit-author-slug'
355
  );
356
 
357
  // Bail if we shouldn't add our js.
358
+ if ( ! in_array( $hook_suffix, $user_pages, true ) || ! ba_eas_can_edit_author_slug() ) {
359
  return;
360
  }
361
 
435
  'ba_eas_admin_setting_callback_author_base',
436
  'edit-author-slug',
437
  'ba_eas_author_base',
438
+ array(
439
+ 'label_for' => '_ba_eas_author_base',
440
+ )
441
  );
442
  register_setting( 'edit-author-slug', '_ba_eas_author_base', 'ba_eas_sanitize_author_base' );
443
 
449
  'ba_eas_admin_setting_callback_remove_front',
450
  'edit-author-slug',
451
  'ba_eas_author_base',
452
+ array(
453
+ 'label_for' => '_ba_eas_remove_front',
454
+ )
455
  );
456
  register_setting( 'edit-author-slug', '_ba_eas_remove_front', 'intval' );
457
  }
463
  'ba_eas_admin_setting_callback_do_role_based',
464
  'edit-author-slug',
465
  'ba_eas_author_base',
466
+ array(
467
+ 'label_for' => '_ba_eas_do_role_based',
468
+ )
469
  );
470
  register_setting( 'edit-author-slug', '_ba_eas_do_role_based', 'intval' );
471
 
494
  'ba_eas_admin_setting_callback_do_auto_update',
495
  'edit-author-slug',
496
  'ba_eas_auto_update',
497
+ array(
498
+ 'label_for' => '_ba_eas_do_auto_update',
499
+ )
500
  );
501
  register_setting( 'edit-author-slug', '_ba_eas_do_auto_update', 'intval' );
502
 
507
  'ba_eas_admin_setting_callback_default_user_nicename',
508
  'edit-author-slug',
509
  'ba_eas_auto_update',
510
+ array(
511
+ 'label_for' => '_ba_eas_default_user_nicename',
512
+ )
513
  );
514
  register_setting( 'edit-author-slug', '_ba_eas_default_user_nicename', 'sanitize_key' );
515
 
528
  'ba_eas_admin_setting_callback_bulk_update',
529
  'edit-author-slug',
530
  'ba_eas_bulk_update',
531
+ array(
532
+ 'label_for' => '_ba_eas_bulk_update',
533
+ )
534
  );
535
  register_setting( 'edit-author-slug', '_ba_eas_bulk_update', 'ba_eas_auto_update_user_nicename_bulk' );
536
 
541
  'ba_eas_admin_setting_callback_bulk_update_structure',
542
  'edit-author-slug',
543
  'ba_eas_bulk_update',
544
+ array(
545
+ 'label_for' => '_ba_eas_bulk_update_structure',
546
+ )
547
  );
548
  register_setting( 'edit-author-slug', '_ba_eas_bulk_update_structure', '__return_false' );
549
  }
582
  function ba_eas_admin_setting_callback_author_base() {
583
 
584
  $author_base = ba_eas_sanitize_author_base( ba_eas()->author_base );
585
+ $front = trim( $GLOBALS['wp_rewrite']->front, '/' );
586
 
587
+ // Add the trailing slash back if `$front` isn't empty.
588
+ if ( ! empty( $front ) ) {
589
+ $front = trailingslashit( $front );
590
+ }
 
591
  ?>
592
 
593
  <input id="_ba_eas_author_base" name="_ba_eas_author_base" type="text" value="<?php echo esc_attr( $author_base ); ?>" class="regular-text code" />
594
  <em><?php esc_html_e( "Defaults to 'author'", 'edit-author-slug' ); ?></em>
595
  <br /><br />
596
+ <strong>Demo:</strong>
597
+ <em><?php
598
+ echo sprintf(
599
+ '%1$s%2$s%3$s%4$s',
600
+ esc_url( home_url( '/' ) ),
601
+ '<span class="eas-demo-author-base-front">' . esc_html( $front ) . '</span>',
602
+ '<span class="eas-demo-author-base">' . esc_html( $author_base ) . '</span>',
603
+ esc_html( user_trailingslashit( '/author-slug' ) )
604
+ );
605
+ ?></em>
606
 
607
  <?php
608
  }
635
  <?php esc_html_e( "Set user's Author Base according to their role.", 'edit-author-slug' ); ?>
636
  <br /><br />
637
  <?php echo sprintf(
638
+ /* translators: 1: rewrite tag, 2: rewrite tag demo usage, 3: demo URL using rewrite tag */
639
  esc_html__(
640
  'Use the %1$s rewrite tag to customize the role-based author base. If you set the author base to "%2$s", the resulting author structure will be something like "%3$s".',
641
  'edit-author-slug'
856
  function ba_eas_add_settings_link( $links, $file ) {
857
 
858
  if ( ba_eas()->plugin_basename === $file ) {
859
+
860
+ $settings_url = add_query_arg(
861
+ array(
862
+ 'page' => 'edit-author-slug',
863
+ ),
864
+ admin_url( 'options-general.php' )
865
+ );
866
+
867
+ $settings_link = '<a href="' . esc_url( $settings_url ) . '">' . esc_html__( 'Settings', 'edit-author-slug' ) . '</a>';
868
  array_unshift( $links, $settings_link );
869
  }
870
 
919
  */
920
  function ba_eas_settings_updated() {
921
 
922
+ // Check that a valid nonce was passed.
923
+ if ( ! isset( $_REQUEST['_wpnonce'] ) || ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'edit-author-slug-options' ) ) {
924
  return;
925
  }
926
 
927
+ // Make sure we're on the Edit Author Slug settings page.
928
+ if ( ! isset( $_REQUEST['option_page'] ) || 'edit-author-slug' !== $_REQUEST['option_page'] ) {
929
  return;
930
  }
931
 
includes/functions.php CHANGED
@@ -32,6 +32,32 @@ function ba_eas_do_auto_update() {
32
  return (bool) apply_filters( 'ba_eas_do_auto_update', ba_eas()->do_auto_update );
33
  }
34
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
  /**
36
  * Auto-update the user_nicename for a given user.
37
  *
@@ -80,88 +106,11 @@ function ba_eas_auto_update_user_nicename( $user_id, $bulk = false, $structure =
80
  */
81
  $structure = apply_filters( 'ba_eas_auto_update_user_nicename_structure', $structure, $user_id );
82
 
83
- // Make sure we have a structure.
84
- if ( empty( $structure ) ) {
85
- $structure = 'username';
86
- }
87
-
88
  // Setup the current nicename.
89
- $old_nicename = $user->user_login;
90
- if ( ! empty( $user->user_nicename ) ) {
91
- $old_nicename = $user->user_nicename;
92
- }
93
-
94
- // Setup default nicename.
95
- $nicename = $old_nicename;
96
-
97
- // Setup the new nicename based on the provided structure.
98
- switch ( $structure ) {
99
-
100
- case 'username':
101
-
102
- if ( ! empty( $user->user_login ) ) {
103
- $nicename = $user->user_login;
104
- }
105
-
106
- break;
107
-
108
- case 'nickname':
109
-
110
- if ( ! empty( $user->nickname ) ) {
111
- $nicename = $user->nickname;
112
- }
113
-
114
- break;
115
-
116
- case 'displayname':
117
-
118
- if ( ! empty( $user->display_name ) ) {
119
- $nicename = $user->display_name;
120
- }
121
-
122
- break;
123
-
124
- case 'firstname':
125
-
126
- if ( ! empty( $user->first_name ) ) {
127
- $nicename = $user->first_name;
128
- }
129
-
130
- break;
131
-
132
- case 'lastname':
133
-
134
- if ( ! empty( $user->last_name ) ) {
135
- $nicename = $user->last_name;
136
- }
137
-
138
- break;
139
-
140
- case 'firstlast':
141
-
142
- if ( ! empty( $user->first_name ) && ! empty( $user->last_name ) ) {
143
- $nicename = $user->first_name . '-' . $user->last_name;
144
- }
145
-
146
- break;
147
-
148
- case 'lastfirst':
149
-
150
- if ( ! empty( $user->first_name ) && ! empty( $user->last_name ) ) {
151
- $nicename = $user->last_name . '-' . $user->first_name;
152
- }
153
-
154
- break;
155
-
156
- case 'userid':
157
-
158
- $nicename = $user_id;
159
-
160
- break;
161
- }
162
 
163
  // Sanitize and trim the new user nicename.
164
- $nicename = ba_eas_trim_nicename( ba_eas_sanitize_nicename( $nicename ) );
165
 
166
  /**
167
  * Filters the auto-updated user nicename before being saved.
@@ -183,7 +132,10 @@ function ba_eas_auto_update_user_nicename( $user_id, $bulk = false, $structure =
183
  remove_action( 'profile_update', 'ba_eas_auto_update_user_nicename' );
184
 
185
  // Update if there's a change.
186
- $user_id = wp_update_user( array( 'ID' => $user_id, 'user_nicename' => $nicename ) );
 
 
 
187
 
188
  // Add it back in case other plugins do some updating.
189
  add_action( 'profile_update', 'ba_eas_auto_update_user_nicename' );
@@ -226,16 +178,21 @@ function ba_eas_auto_update_user_nicename_single( $user_id = 0 ) {
226
  *
227
  * @since 0.9.0
228
  *
229
- * @param string $value The option value passed to the settings API.
230
  *
231
  * @return bool False to prevent the setting from being saved to the db.
232
  */
233
- function ba_eas_auto_update_user_nicename_bulk( $value = false ) {
234
 
235
  // Nonce check.
236
  check_admin_referer( 'edit-author-slug-options' );
237
 
238
- // Default the structure to the auto-update structure.
 
 
 
 
 
239
  $structure = ba_eas()->default_user_nicename;
240
 
241
  // If a bulk update structure was passed, use that.
@@ -243,16 +200,10 @@ function ba_eas_auto_update_user_nicename_bulk( $value = false ) {
243
  $structure = sanitize_key( $_POST['_ba_eas_bulk_update_structure'] );
244
  }
245
 
246
- // Sanitize the option value.
247
- $value = (bool) absint( $value );
248
-
249
- // Bail if the user didn't ask to run the bulk update.
250
- if ( ! $value ) {
251
- return false;
252
- }
253
-
254
  // Get an array of ids of all users.
255
- $users = get_users( array( 'fields' => 'ID' ) );
 
 
256
 
257
  /**
258
  * Filters the array of user ids who will have their user nicenames updated.
@@ -267,22 +218,37 @@ function ba_eas_auto_update_user_nicename_bulk( $value = false ) {
267
  $updated = 0;
268
 
269
  // Loop through all the users and maybe update their nicenames.
270
- foreach ( $users as $user_id ) {
 
 
 
271
 
272
  // Maybe update the user nicename.
273
  $id = ba_eas_auto_update_user_nicename( $user_id, true, $structure );
274
 
275
- // If updating was a success, the bump the updated count.
276
  if ( ! empty( $id ) && ! is_wp_error( $id ) ) {
277
  $updated++;
278
  }
 
 
 
279
  }
280
 
281
  // Add a message to the settings page denoting user how many users were updated.
282
  add_settings_error(
283
  '_ba_eas_bulk_auto_update',
284
  'bulk_user_nicenames_updated',
285
- sprintf( __( '%d user author slug(s) updated.', 'edit-author-slug' ), $updated ),
 
 
 
 
 
 
 
 
 
286
  'updated'
287
  );
288
 
@@ -325,18 +291,18 @@ function ba_eas_sanitize_author_base( $author_base = 'author' ) {
325
  $original_author_base = $author_base;
326
 
327
  // Only do extra sanitization when needed.
328
- if ( ! empty( $author_base ) || 'author' !== $author_base ) {
329
 
330
  // Split the author base string on forward slashes.
331
  $parts = explode( '/', $author_base );
 
332
 
333
  // Sanitize all parts except our rewrite tag, `%ba_eas_author_role%`.
334
  foreach ( $parts as $key => $part ) {
 
335
  if ( '%ba_eas_author_role%' !== $part ) {
336
- $part = sanitize_title( $part );
337
  }
338
-
339
- $parts[ $key ] = $part;
340
  }
341
 
342
  // Sanitize the parts, and put them back together.
@@ -351,6 +317,8 @@ function ba_eas_sanitize_author_base( $author_base = 'author' ) {
351
  /**
352
  * Filters the sanitized author base.
353
  *
 
 
354
  * @param string $author_base The sanitized author base.
355
  * @param string $original_author_base The unsanitized author base.
356
  */
@@ -408,6 +376,101 @@ function ba_eas_nicename_is_ascii( $nicename = '' ) {
408
  return ba_eas_sanitize_nicename( $nicename ) === ba_eas_sanitize_nicename( $nicename, false );
409
  }
410
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  /** Author Base ***************************************************************/
412
 
413
  /**
@@ -693,6 +756,8 @@ function ba_eas_get_user_role( $roles = array(), $user_id = 0 ) {
693
  * WP_Roles object. This is a wrapper function for `wp_roles()` with a fallback
694
  * for those on WP < 4.3.
695
  *
 
 
696
  * @global WP_Roles $wp_roles
697
  *
698
  * @return WP_Roles
@@ -704,10 +769,8 @@ function ba_eas_get_wp_roles() {
704
 
705
  } else {
706
 
707
- global $wp_roles;
708
-
709
  // Make sure the `$wp_roles` global has been set.
710
- if ( ! isset( $wp_roles ) ) {
711
  $wp_roles = new WP_Roles();
712
  }
713
  }
@@ -813,7 +876,7 @@ if ( ! function_exists( 'array_replace_recursive' ) ) {
813
  /**
814
  * Add array_replace_recursive() for users of PHP 5.2.x
815
  *
816
- * http://php.net/manual/en/function.array-replace-recursive.php#109390
817
  *
818
  * @since 1.0.2
819
  *
@@ -850,7 +913,7 @@ if ( ! function_exists( 'array_replace_recursive' ) ) {
850
 
851
  return $base;
852
  }
853
- } // end function exists check.
854
 
855
  /**
856
  * Clean and update the nicename cache.
32
  return (bool) apply_filters( 'ba_eas_do_auto_update', ba_eas()->do_auto_update );
33
  }
34
 
35
+ /**
36
+ * Determines if a bulk update should occur.
37
+ *
38
+ * @since 1.4.0
39
+ *
40
+ * @param mixed $do_bulk Whether or not to perform a bulk update.
41
+ *
42
+ * @return bool True if bulk update should occur.
43
+ */
44
+ function ba_eas_do_bulk_update( $do_bulk = false ) {
45
+
46
+ // Sanitize the option value.
47
+ $retval = ( is_numeric( $do_bulk ) || is_bool( $do_bulk ) )
48
+ ? (bool) $do_bulk
49
+ : false;
50
+
51
+ /**
52
+ * Filters the return of the `ba_eas_do_bulk_update()`.
53
+ *
54
+ * @since 1.4.0
55
+ *
56
+ * @param bool $retval The `do_auto_update` option.
57
+ */
58
+ return (bool) apply_filters( 'ba_eas_do_bulk_update', $retval );
59
+ }
60
+
61
  /**
62
  * Auto-update the user_nicename for a given user.
63
  *
106
  */
107
  $structure = apply_filters( 'ba_eas_auto_update_user_nicename_structure', $structure, $user_id );
108
 
 
 
 
 
 
109
  // Setup the current nicename.
110
+ $old_nicename = $user->user_nicename;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
  // Sanitize and trim the new user nicename.
113
+ $nicename = ba_eas_get_nicename_by_structure( $user_id, $structure );
114
 
115
  /**
116
  * Filters the auto-updated user nicename before being saved.
132
  remove_action( 'profile_update', 'ba_eas_auto_update_user_nicename' );
133
 
134
  // Update if there's a change.
135
+ $user_id = wp_update_user( array(
136
+ 'ID' => $user_id,
137
+ 'user_nicename' => $nicename,
138
+ ) );
139
 
140
  // Add it back in case other plugins do some updating.
141
  add_action( 'profile_update', 'ba_eas_auto_update_user_nicename' );
178
  *
179
  * @since 0.9.0
180
  *
181
+ * @param string|bool $do_bulk The option value passed to the settings API.
182
  *
183
  * @return bool False to prevent the setting from being saved to the db.
184
  */
185
+ function ba_eas_auto_update_user_nicename_bulk( $do_bulk = false ) {
186
 
187
  // Nonce check.
188
  check_admin_referer( 'edit-author-slug-options' );
189
 
190
+ // Bail if the user didn't ask to run the bulk update.
191
+ if ( ! ba_eas_do_bulk_update( $do_bulk ) ) {
192
+ return false;
193
+ }
194
+
195
+ // Default to the auto-update nicename structure.
196
  $structure = ba_eas()->default_user_nicename;
197
 
198
  // If a bulk update structure was passed, use that.
200
  $structure = sanitize_key( $_POST['_ba_eas_bulk_update_structure'] );
201
  }
202
 
 
 
 
 
 
 
 
 
203
  // Get an array of ids of all users.
204
+ $users = get_users( array(
205
+ 'fields' => 'ID',
206
+ ) );
207
 
208
  /**
209
  * Filters the array of user ids who will have their user nicenames updated.
218
  $updated = 0;
219
 
220
  // Loop through all the users and maybe update their nicenames.
221
+ foreach ( $users as $key => $user_id ) {
222
+
223
+ // Reset the max execution time.
224
+ set_time_limit( 30 );
225
 
226
  // Maybe update the user nicename.
227
  $id = ba_eas_auto_update_user_nicename( $user_id, true, $structure );
228
 
229
+ // If updating was a success, then bump the updated count.
230
  if ( ! empty( $id ) && ! is_wp_error( $id ) ) {
231
  $updated++;
232
  }
233
+
234
+ // Remove the processed user from the users array.
235
+ unset( $users[ $key ] );
236
  }
237
 
238
  // Add a message to the settings page denoting user how many users were updated.
239
  add_settings_error(
240
  '_ba_eas_bulk_auto_update',
241
  'bulk_user_nicenames_updated',
242
+ sprintf(
243
+ /* translators: Updated author slugs count. */
244
+ _n(
245
+ '%d user author slug updated.',
246
+ '%d user author slugs updated.',
247
+ $updated,
248
+ 'edit-author-slug'
249
+ ),
250
+ $updated
251
+ ),
252
  'updated'
253
  );
254
 
291
  $original_author_base = $author_base;
292
 
293
  // Only do extra sanitization when needed.
294
+ if ( ! empty( $author_base ) && 'author' !== $author_base ) {
295
 
296
  // Split the author base string on forward slashes.
297
  $parts = explode( '/', $author_base );
298
+ $parts = array_filter( array_map( 'trim', $parts ) );
299
 
300
  // Sanitize all parts except our rewrite tag, `%ba_eas_author_role%`.
301
  foreach ( $parts as $key => $part ) {
302
+
303
  if ( '%ba_eas_author_role%' !== $part ) {
304
+ $parts[ $key ] = sanitize_title( $part );
305
  }
 
 
306
  }
307
 
308
  // Sanitize the parts, and put them back together.
317
  /**
318
  * Filters the sanitized author base.
319
  *
320
+ * @since 1.2.0
321
+ *
322
  * @param string $author_base The sanitized author base.
323
  * @param string $original_author_base The unsanitized author base.
324
  */
376
  return ba_eas_sanitize_nicename( $nicename ) === ba_eas_sanitize_nicename( $nicename, false );
377
  }
378
 
379
+ /**
380
+ * Returns a nicename built according to the passed structure.
381
+ *
382
+ * @since 1.4.0
383
+ *
384
+ * @param int $user_id The user id.
385
+ * @param string $structure The structure to build the nicename against.
386
+ *
387
+ * @return string Defaults to empty.
388
+ */
389
+ function ba_eas_get_nicename_by_structure( $user_id = 0, $structure = '' ) {
390
+
391
+ // Validate the user id.
392
+ $user = get_userdata( $user_id );
393
+
394
+ // Bail if we don't have a valid user id.
395
+ if ( empty( $user->ID ) ) {
396
+ return '';
397
+ }
398
+
399
+ // Set the default nicename.
400
+ $nicename = '';
401
+
402
+ // Setup the new nicename based on the provided structure.
403
+ switch ( $structure ) {
404
+
405
+ case 'username':
406
+
407
+ if ( ! empty( $user->user_login ) ) {
408
+ $nicename = $user->user_login;
409
+ }
410
+
411
+ break;
412
+
413
+ case 'nickname':
414
+
415
+ if ( ! empty( $user->nickname ) ) {
416
+ $nicename = $user->nickname;
417
+ }
418
+
419
+ break;
420
+
421
+ case 'displayname':
422
+
423
+ if ( ! empty( $user->display_name ) ) {
424
+ $nicename = $user->display_name;
425
+ }
426
+
427
+ break;
428
+
429
+ case 'firstname':
430
+
431
+ if ( ! empty( $user->first_name ) ) {
432
+ $nicename = $user->first_name;
433
+ }
434
+
435
+ break;
436
+
437
+ case 'lastname':
438
+
439
+ if ( ! empty( $user->last_name ) ) {
440
+ $nicename = $user->last_name;
441
+ }
442
+
443
+ break;
444
+
445
+ case 'firstlast':
446
+
447
+ if ( ! empty( $user->first_name ) && ! empty( $user->last_name ) ) {
448
+ $nicename = $user->first_name . '-' . $user->last_name;
449
+ }
450
+
451
+ break;
452
+
453
+ case 'lastfirst':
454
+
455
+ if ( ! empty( $user->first_name ) && ! empty( $user->last_name ) ) {
456
+ $nicename = $user->last_name . '-' . $user->first_name;
457
+ }
458
+
459
+ break;
460
+
461
+ case 'userid':
462
+
463
+ $nicename = $user->ID;
464
+
465
+ break;
466
+ } // End switch().
467
+
468
+ // Sanitize and trim the new user nicename.
469
+ $nicename = ba_eas_trim_nicename( ba_eas_sanitize_nicename( $nicename ) );
470
+
471
+ return apply_filters( 'ba_eas_get_nicename_by_structure', $nicename, $user_id, $structure );
472
+ }
473
+
474
  /** Author Base ***************************************************************/
475
 
476
  /**
756
  * WP_Roles object. This is a wrapper function for `wp_roles()` with a fallback
757
  * for those on WP < 4.3.
758
  *
759
+ * @since 1.2.0
760
+ *
761
  * @global WP_Roles $wp_roles
762
  *
763
  * @return WP_Roles
769
 
770
  } else {
771
 
 
 
772
  // Make sure the `$wp_roles` global has been set.
773
+ if ( ! isset( $GLOBALS['wp_roles'] ) ) {
774
  $wp_roles = new WP_Roles();
775
  }
776
  }
876
  /**
877
  * Add array_replace_recursive() for users of PHP 5.2.x
878
  *
879
+ * @see http://php.net/manual/en/function.array-replace-recursive.php#109390
880
  *
881
  * @since 1.0.2
882
  *
913
 
914
  return $base;
915
  }
916
+ } // End if().
917
 
918
  /**
919
  * Clean and update the nicename cache.
js/edit-author-slug.min.js CHANGED
@@ -1,2 +1,2 @@
1
- /*! edit-author-slug - v1.3.0 - 2017-01-25 6:16:50 AM UTC - https://github.com/thebrandonallen/edit-author-slug/ */
2
  jQuery(document).ready(function(a){a('input[name="_ba_eas_remove_front"]').prop("checked")&&a('span[class="eas-demo-author-base-front"]').addClass("hidden"),a('input[name="_ba_eas_remove_front"]').on("click",function(){a(this).prop("checked")?a('span[class="eas-demo-author-base-front"]').fadeOut("fast",function(){a(this).addClass("hidden")}):a('span[class="eas-demo-author-base-front hidden"]').fadeIn("slow",function(){a(this).removeClass("hidden")})}),a('input[name="ba_eas_author_slug"]').click(function(){"ba_eas_author_slug_custom_radio"!==a(this).attr("id")&&a('input[name="ba_eas_author_slug_custom"]').val(a(this).val()).text(a(this).siblings("span").text())}),a('input[name="ba_eas_author_slug_custom"]').focus(function(){a("#ba_eas_author_slug_custom_radio").attr("checked","checked")}),a('input[class="eas-checkbox"]').not(":checked").parents("tr").next("tr").addClass("hidden"),a('input[class="eas-checkbox"]').on("click",function(){a(this).prop("checked")?a(this).parents("tr").next("tr").fadeIn("slow",function(){a(this).removeClass("hidden")}):a(this).parents("tr").next("tr").fadeOut("fast",function(){a(this).addClass("hidden")})})});
1
+ /*! edit-author-slug - v1.4.1 - 2017-04-24 8:00:07 PM UTC - https://github.com/thebrandonallen/edit-author-slug/ */
2
  jQuery(document).ready(function(a){a('input[name="_ba_eas_remove_front"]').prop("checked")&&a('span[class="eas-demo-author-base-front"]').addClass("hidden"),a('input[name="_ba_eas_remove_front"]').on("click",function(){a(this).prop("checked")?a('span[class="eas-demo-author-base-front"]').fadeOut("fast",function(){a(this).addClass("hidden")}):a('span[class="eas-demo-author-base-front hidden"]').fadeIn("slow",function(){a(this).removeClass("hidden")})}),a('input[name="ba_eas_author_slug"]').click(function(){"ba_eas_author_slug_custom_radio"!==a(this).attr("id")&&a('input[name="ba_eas_author_slug_custom"]').val(a(this).val()).text(a(this).siblings("span").text())}),a('input[name="ba_eas_author_slug_custom"]').focus(function(){a("#ba_eas_author_slug_custom_radio").attr("checked","checked")}),a('input[class="eas-checkbox"]').not(":checked").parents("tr").next("tr").addClass("hidden"),a('input[class="eas-checkbox"]').on("click",function(){a(this).prop("checked")?a(this).parents("tr").next("tr").fadeIn("slow",function(){a(this).removeClass("hidden")}):a(this).parents("tr").next("tr").fadeOut("fast",function(){a(this).addClass("hidden")})})});
languages/edit-author-slug.pot CHANGED
@@ -3,227 +3,233 @@
3
  # Submit translations to https://translate.wordpress.org/projects/wp-plugins/edit-author-slug.
4
  msgid ""
5
  msgstr ""
6
- "Project-Id-Version: Edit Author Slug 1.3.0\n"
7
  "Report-Msgid-Bugs-To: "
8
  "https://github.com/thebrandonallen/edit-author-slug/issues\n"
9
- "POT-Creation-Date: 2017-01-25 06:16:50+00:00\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=utf-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
14
  "Last-Translator: BRANDON ALLEN <plugins@brandonallen.me>\n"
15
  "Language-Team: ENGLISH <plugins@brandonallen.me>\n"
16
- "X-Generator: grunt-wp-i18n 0.5.4\n"
17
- "X-Poedit-KeywordsList: "
18
- "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
19
- "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
20
  "Language: en\n"
21
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
22
  "X-Poedit-Country: United States\n"
23
  "X-Poedit-SourceCharset: UTF-8\n"
 
 
 
24
  "X-Poedit-Basepath: ../\n"
25
  "X-Poedit-SearchPath-0: .\n"
26
  "X-Poedit-Bookmarks: \n"
27
  "X-Textdomain-Support: yes\n"
 
28
 
29
- #: edit-author-slug.php:234
30
  msgid "Method does not exist."
31
  msgstr ""
32
 
33
- #: edit-author-slug.php:253 edit-author-slug.php:266
34
  msgid "Cheatin&#8217; huh?"
35
  msgstr ""
36
 
37
- #: includes/admin.php:82
38
  msgid ""
39
  "Choose an Author Slug based on the above profile information, or create "
40
  "your own."
41
  msgstr ""
42
 
43
- #: includes/admin.php:82
44
  msgid "ie. - 'user-name', 'firstname-lastname', or 'master-ninja'"
45
  msgstr ""
46
 
47
- #: includes/admin.php:85 includes/admin.php:87 includes/admin.php:315
48
  msgid "Author Slug"
49
  msgstr ""
50
 
51
- #: includes/admin.php:105
52
  msgid "Custom:"
53
  msgstr ""
54
 
55
- #: includes/admin.php:106
56
  msgid "Enter a custom author slug in the following field"
57
  msgstr ""
58
 
59
- #: includes/admin.php:108
60
  msgid "Custom author slug:"
61
  msgstr ""
62
 
63
- #: includes/admin.php:175
64
  msgid "<strong>ERROR</strong>: An author slug cannot be blank. Please try again."
65
  msgstr ""
66
 
67
- #: includes/admin.php:220
68
  msgid ""
69
  "<strong>ERROR</strong>: An author slug can only contain alphanumeric "
70
  "characters, underscores (_) and dashes (-)."
71
  msgstr ""
72
 
73
- #: includes/admin.php:229
74
  msgid ""
75
  "<strong>ERROR</strong>: That author slug appears to be invalid. Please try "
76
  "something different."
77
  msgstr ""
78
 
79
- #: includes/admin.php:238
80
  msgid "<strong>ERROR</strong>: An author slug may not be longer than 50 characters."
81
  msgstr ""
82
 
83
- #: includes/admin.php:251
 
84
  msgid ""
85
  "<strong>ERROR</strong>: The author slug, %1$s, already exists. Please try "
86
  "something different."
87
  msgstr ""
88
 
89
- #: includes/admin.php:397 includes/admin.php:415
90
  msgid "Edit Author Slug Settings"
91
  msgstr ""
92
 
93
- #: includes/admin.php:439 includes/admin.php:447
94
  msgid "Author Base"
95
  msgstr ""
96
 
97
- #: includes/admin.php:459
98
  msgid "Remove Front"
99
  msgstr ""
100
 
101
- #: includes/admin.php:471
102
  msgid "Role-Based Author Base"
103
  msgstr ""
104
 
105
- #: includes/admin.php:482
106
  msgid "Role Slugs"
107
  msgstr ""
108
 
109
- #: includes/admin.php:492
110
  msgid "Automatic Author Slug Creation"
111
  msgstr ""
112
 
113
- #: includes/admin.php:500
114
  msgid "Automatically Update"
115
  msgstr ""
116
 
117
- #: includes/admin.php:511 includes/admin.php:541
118
  msgid "Author Slug Structure"
119
  msgstr ""
120
 
121
- #: includes/admin.php:522
122
  msgid "Bulk Update Author Slugs"
123
  msgstr ""
124
 
125
- #: includes/admin.php:530
126
  msgid "Bulk Update"
127
  msgstr ""
128
 
129
- #: includes/admin.php:558
130
  msgid "Change your author base to something more fun!"
131
  msgstr ""
132
 
133
- #: includes/admin.php:571
134
  msgid ""
135
  "Allow Author Slugs to be automatically updated, and set the default Author "
136
  "Slug structure for users. Automatic updating will only occur when a user "
137
  "can't edit Author Slugs on their own."
138
  msgstr ""
139
 
140
- #: includes/admin.php:571
141
  msgid ""
142
  "This could have SEO repercussions if users update their profiles "
143
  "frequently, and it will override any manual editing of the Author Slug you "
144
  "may have previously completed."
145
  msgstr ""
146
 
147
- #: includes/admin.php:593
148
  msgid "Defaults to 'author'"
149
  msgstr ""
150
 
151
- #: includes/admin.php:611
152
  msgid "Remove the \"front\" portion of the author permalink structure."
153
  msgstr ""
154
 
155
- #: includes/admin.php:625
156
  msgid "Set user's Author Base according to their role."
157
  msgstr ""
158
 
159
- #: includes/admin.php:628
 
 
160
  msgid ""
161
  "Use the %1$s rewrite tag to customize the role-based author base. If you "
162
  "set the author base to \"%2$s\", the resulting author structure will be "
163
  "something like \"%3$s\"."
164
  msgstr ""
165
 
166
- #: includes/admin.php:741
167
  msgid "Automatically update Author Slug when a user updates their profile."
168
  msgstr ""
169
 
170
- #: includes/admin.php:765
171
  msgid "Default author slug options"
172
  msgstr ""
173
 
174
- #: includes/admin.php:785
175
  msgid "Update all users at once based on the specified Author Slug structure."
176
  msgstr ""
177
 
178
- #: includes/admin.php:801
179
  msgid ""
180
  "Update all users according to the below Author Slug setting. This will only "
181
  "be run after clicking \"Save Changes\"."
182
  msgstr ""
183
 
184
- #: includes/admin.php:825
185
  msgid "Default bulk update author slug options"
186
  msgstr ""
187
 
188
- #: includes/admin.php:848
189
  msgid "Settings"
190
  msgstr ""
191
 
192
- #: includes/admin.php:873 tests/test-admin.php:551
193
  msgid "username (Default)"
194
  msgstr ""
195
 
196
- #: includes/admin.php:874 tests/test-admin.php:552
197
  msgid "nickname"
198
  msgstr ""
199
 
200
- #: includes/admin.php:875 tests/test-admin.php:553
201
  msgid "displayname"
202
  msgstr ""
203
 
204
- #: includes/admin.php:876 tests/test-admin.php:554
205
  msgid "firstname"
206
  msgstr ""
207
 
208
- #: includes/admin.php:877 tests/test-admin.php:555
209
  msgid "lastname"
210
  msgstr ""
211
 
212
- #: includes/admin.php:878 tests/test-admin.php:556
213
  msgid "firstname-lastname"
214
  msgstr ""
215
 
216
- #: includes/admin.php:879 tests/test-admin.php:557
217
  msgid "lastname-firstname"
218
  msgstr ""
219
 
220
- #: includes/admin.php:880 tests/test-admin.php:558
221
  msgid "userid (Experimental)"
222
  msgstr ""
223
 
224
- #: includes/functions.php:285
225
- msgid "%d user author slug(s) updated."
226
- msgstr ""
 
 
 
227
 
228
  #. Description of the plugin/theme
229
  msgid ""
3
  # Submit translations to https://translate.wordpress.org/projects/wp-plugins/edit-author-slug.
4
  msgid ""
5
  msgstr ""
6
+ "Project-Id-Version: Edit Author Slug 1.4.1\n"
7
  "Report-Msgid-Bugs-To: "
8
  "https://github.com/thebrandonallen/edit-author-slug/issues\n"
9
+ "POT-Creation-Date: 2017-04-24 20:00:08+00:00\n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=utf-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
  "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
14
  "Last-Translator: BRANDON ALLEN <plugins@brandonallen.me>\n"
15
  "Language-Team: ENGLISH <plugins@brandonallen.me>\n"
 
 
 
 
16
  "Language: en\n"
17
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
  "X-Poedit-Country: United States\n"
19
  "X-Poedit-SourceCharset: UTF-8\n"
20
+ "X-Poedit-KeywordsList: "
21
+ "__;_e;_x:1,2c;_ex:1,2c;_n:1,2;_nx:1,2,4c;_n_noop:1,2;_nx_noop:1,2,3c;esc_"
22
+ "attr__;esc_html__;esc_attr_e;esc_html_e;esc_attr_x:1,2c;esc_html_x:1,2c;\n"
23
  "X-Poedit-Basepath: ../\n"
24
  "X-Poedit-SearchPath-0: .\n"
25
  "X-Poedit-Bookmarks: \n"
26
  "X-Textdomain-Support: yes\n"
27
+ "X-Generator: grunt-wp-i18n1.0.0\n"
28
 
29
+ #: edit-author-slug.php:256
30
  msgid "Method does not exist."
31
  msgstr ""
32
 
33
+ #: edit-author-slug.php:279 edit-author-slug.php:296
34
  msgid "Cheatin&#8217; huh?"
35
  msgstr ""
36
 
37
+ #: includes/admin.php:66
38
  msgid ""
39
  "Choose an Author Slug based on the above profile information, or create "
40
  "your own."
41
  msgstr ""
42
 
43
+ #: includes/admin.php:66
44
  msgid "ie. - 'user-name', 'firstname-lastname', or 'master-ninja'"
45
  msgstr ""
46
 
47
+ #: includes/admin.php:69 includes/admin.php:71 includes/admin.php:302
48
  msgid "Author Slug"
49
  msgstr ""
50
 
51
+ #: includes/admin.php:89
52
  msgid "Custom:"
53
  msgstr ""
54
 
55
+ #: includes/admin.php:90
56
  msgid "Enter a custom author slug in the following field"
57
  msgstr ""
58
 
59
+ #: includes/admin.php:92
60
  msgid "Custom author slug:"
61
  msgstr ""
62
 
63
+ #: includes/admin.php:160
64
  msgid "<strong>ERROR</strong>: An author slug cannot be blank. Please try again."
65
  msgstr ""
66
 
67
+ #: includes/admin.php:206
68
  msgid ""
69
  "<strong>ERROR</strong>: An author slug can only contain alphanumeric "
70
  "characters, underscores (_) and dashes (-)."
71
  msgstr ""
72
 
73
+ #: includes/admin.php:215
74
  msgid ""
75
  "<strong>ERROR</strong>: That author slug appears to be invalid. Please try "
76
  "something different."
77
  msgstr ""
78
 
79
+ #: includes/admin.php:224
80
  msgid "<strong>ERROR</strong>: An author slug may not be longer than 50 characters."
81
  msgstr ""
82
 
83
+ #: includes/admin.php:238
84
+ #. translators: 1: author slug
85
  msgid ""
86
  "<strong>ERROR</strong>: The author slug, %1$s, already exists. Please try "
87
  "something different."
88
  msgstr ""
89
 
90
+ #: includes/admin.php:384 includes/admin.php:402
91
  msgid "Edit Author Slug Settings"
92
  msgstr ""
93
 
94
+ #: includes/admin.php:426 includes/admin.php:434
95
  msgid "Author Base"
96
  msgstr ""
97
 
98
+ #: includes/admin.php:448
99
  msgid "Remove Front"
100
  msgstr ""
101
 
102
+ #: includes/admin.php:462
103
  msgid "Role-Based Author Base"
104
  msgstr ""
105
 
106
+ #: includes/admin.php:475
107
  msgid "Role Slugs"
108
  msgstr ""
109
 
110
+ #: includes/admin.php:485
111
  msgid "Automatic Author Slug Creation"
112
  msgstr ""
113
 
114
+ #: includes/admin.php:493
115
  msgid "Automatically Update"
116
  msgstr ""
117
 
118
+ #: includes/admin.php:506 includes/admin.php:540
119
  msgid "Author Slug Structure"
120
  msgstr ""
121
 
122
+ #: includes/admin.php:519
123
  msgid "Bulk Update Author Slugs"
124
  msgstr ""
125
 
126
+ #: includes/admin.php:527
127
  msgid "Bulk Update"
128
  msgstr ""
129
 
130
+ #: includes/admin.php:559
131
  msgid "Change your author base to something more fun!"
132
  msgstr ""
133
 
134
+ #: includes/admin.php:572
135
  msgid ""
136
  "Allow Author Slugs to be automatically updated, and set the default Author "
137
  "Slug structure for users. Automatic updating will only occur when a user "
138
  "can't edit Author Slugs on their own."
139
  msgstr ""
140
 
141
+ #: includes/admin.php:572
142
  msgid ""
143
  "This could have SEO repercussions if users update their profiles "
144
  "frequently, and it will override any manual editing of the Author Slug you "
145
  "may have previously completed."
146
  msgstr ""
147
 
148
+ #: includes/admin.php:594
149
  msgid "Defaults to 'author'"
150
  msgstr ""
151
 
152
+ #: includes/admin.php:621
153
  msgid "Remove the \"front\" portion of the author permalink structure."
154
  msgstr ""
155
 
156
+ #: includes/admin.php:635
157
  msgid "Set user's Author Base according to their role."
158
  msgstr ""
159
 
160
+ #: includes/admin.php:639
161
+ #. translators: 1: rewrite tag, 2: rewrite tag demo usage, 3: demo URL using
162
+ #. rewrite tag
163
  msgid ""
164
  "Use the %1$s rewrite tag to customize the role-based author base. If you "
165
  "set the author base to \"%2$s\", the resulting author structure will be "
166
  "something like \"%3$s\"."
167
  msgstr ""
168
 
169
+ #: includes/admin.php:752
170
  msgid "Automatically update Author Slug when a user updates their profile."
171
  msgstr ""
172
 
173
+ #: includes/admin.php:776
174
  msgid "Default author slug options"
175
  msgstr ""
176
 
177
+ #: includes/admin.php:796
178
  msgid "Update all users at once based on the specified Author Slug structure."
179
  msgstr ""
180
 
181
+ #: includes/admin.php:812
182
  msgid ""
183
  "Update all users according to the below Author Slug setting. This will only "
184
  "be run after clicking \"Save Changes\"."
185
  msgstr ""
186
 
187
+ #: includes/admin.php:836
188
  msgid "Default bulk update author slug options"
189
  msgstr ""
190
 
191
+ #: includes/admin.php:867
192
  msgid "Settings"
193
  msgstr ""
194
 
195
+ #: includes/admin.php:892 tests/test-admin.php:622
196
  msgid "username (Default)"
197
  msgstr ""
198
 
199
+ #: includes/admin.php:893 tests/test-admin.php:623
200
  msgid "nickname"
201
  msgstr ""
202
 
203
+ #: includes/admin.php:894 tests/test-admin.php:624
204
  msgid "displayname"
205
  msgstr ""
206
 
207
+ #: includes/admin.php:895 tests/test-admin.php:625
208
  msgid "firstname"
209
  msgstr ""
210
 
211
+ #: includes/admin.php:896 tests/test-admin.php:626
212
  msgid "lastname"
213
  msgstr ""
214
 
215
+ #: includes/admin.php:897 tests/test-admin.php:627
216
  msgid "firstname-lastname"
217
  msgstr ""
218
 
219
+ #: includes/admin.php:898 tests/test-admin.php:628
220
  msgid "lastname-firstname"
221
  msgstr ""
222
 
223
+ #: includes/admin.php:899 tests/test-admin.php:629
224
  msgid "userid (Experimental)"
225
  msgstr ""
226
 
227
+ #: includes/functions.php:244
228
+ #. translators: Updated author slugs count.
229
+ msgid "%d user author slug updated."
230
+ msgid_plural "%d user author slugs updated."
231
+ msgstr[0] ""
232
+ msgstr[1] ""
233
 
234
  #. Description of the plugin/theme
235
  msgid ""
readme.md CHANGED
@@ -2,8 +2,8 @@
2
  **Contributors:** [thebrandonallen](https://profiles.wordpress.org/thebrandonallen)
3
  **Tags:** author, author base, author slug, user nicename, nicename, permalink, permalinks, slug, users, user, role, roles
4
  **Requires at least:** 4.3
5
- **Tested up to:** 4.7.1
6
- **Stable tag:** 1.3.0
7
  **License:** GPLv2 or later
8
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -39,28 +39,57 @@ Translations should be submitted to [Translate WordPress](https://translate.word
39
 
40
  ## Frequently Asked Questions ##
41
 
42
- ### Why can't I edit my Author Slug? ###
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  Make sure you are an admin, or have been assigned the `edit_users` capability.
45
 
46
- ### Why isn't my new Author Slug working? ###
47
 
48
- While I've made every attempt to prevent this, I may have missed a spot or two. First things first, go to Settings > Permalinks and click "Save Changes." You don't need to actually need to make any changes for this to work. Hopefully, this should kick your new Author Slug into gear.
49
 
50
  If this doesn't work, make sure you don't have any slug conflicts from other posts/pages/plugins/permalink setting/etc. If you're still experiencing the issue, feel free to post a support request in the forums.
51
 
52
  ## Changelog ##
53
 
 
 
 
 
 
 
 
 
 
 
 
54
  ### 1.3.0 ###
 
55
  * Fix a potential bug where a sanitized author base could end up with double forward slashes.
56
  * Introduce the `%ba_eas_author_role%` permalink structure tag. This can be used to customize role-based author bases.
57
  * Bonus: All alternative facts are now free!
58
 
59
  ### 1.2.1 ###
 
60
  * Fixed stupid error where the default user nicename wasn't being properly retrieved from the database. Sorry about that :(
61
  * Unfortunately, some unicorns were lost during the development of this release, but they are a resilient creature.
62
 
63
  ### 1.2.0 ###
 
64
  * Added the ability to use forward slashes in the author base.
65
  * Improved display on the settings page, and storing, of role slugs.
66
  * Packaged translations are now removed. Anyone interested in translating the plugin should do so at [Translate WordPress](https://translate.wordpress.org/projects/wp-plugins/edit-author-slug).
@@ -69,50 +98,62 @@ If this doesn't work, make sure you don't have any slug conflicts from other pos
69
  * Accessibility improvements to the settings page.
70
 
71
  ### 1.1.2 ###
 
72
  * Fix loading of minified JS in the admin. Props nuyensgert.
73
 
74
  ### 1.1.1 ###
 
75
  * Fix a few minor output escaping issues missed in the 1.1.0 release.
76
 
77
  ### 1.1.0 ###
 
78
  * Added the ability to update all author slugs at once with the "Bulk Update" tool.
79
  * Greatly improved the checks and error messages when manually updating an author slug for a user.
80
  * Further accessibility improvements to match WP 4.3.
81
  * Improved validation of author slugs to better match that of WP.
82
 
83
  ### 1.0.6 ###
 
84
  * Fix potential, although unlikely, persistent XSS vulnerability.
85
  * Prevent debug notice in admin. Props chesio.
86
  * Update heading tags to h1 to match WP 4.3.
87
 
88
  ### 1.0.5.1 ###
 
89
  * Identical to 1.0.5, which failed to commit properly.
90
 
91
  ### 1.0.5 ###
 
92
  * Add WP_User object as a parameter passed to the `ba_eas_show_user_nicename_options_list` filter
93
  * Add Japanese translation files. Props SmokyJp.
94
  * Fixed possible (although unlikely) cache invalidation issue
95
  * Minor code improvements and optimizations.
96
 
97
  ### 1.0.4 ###
 
98
  * Improve upgrade routine for older installs
99
  * Improve output escaping
100
  * Various minor fixes and improvements
101
 
102
  ### 1.0.3 ###
 
 
103
  I swear I tested this! :(
104
 
105
  * Fix custom roles slugs not saving
106
 
107
  ### 1.0.2 ###
 
108
  * A number of localization fixes and improvements
109
  * Role slug improvements
110
  * Temporary, semi work-around for Co-Authors Plus [https://github.com/Automattic/Co-Authors-Plus/pull/204]
111
 
112
  ### 1.0.1 ###
 
113
  * Fix possible syntax error when updating a profile (props Christine https://wordpress.org/support/topic/undefined-property-error-1)
114
 
115
  ### 1.0 ###
 
116
  * Added ability to do role-based author bases
117
  * Added ability to use role-based author templates
118
  * Moderate code refactoring
@@ -121,35 +162,44 @@ I swear I tested this! :(
121
  * First pass at unit test (only checks if the plugin is installed, for now)
122
 
123
  ### 0.9.6 ###
 
124
  * Fixed loading of translation files. Looks in wp-content/plugins/edit-author-slug/languages. If you're running 3.7+ (and you are... aren't you?), it will fall back to wp-content/languages/plugins if a proper localization can't be found in the edit-author-slug folder.
125
 
126
  ### 0.9.5 ###
 
127
  * Fixed instances where the Author Base wouldn't change, or would result in a 404
128
 
129
  ### 0.9.4 ###
 
130
  * Update readme references to plugin settings
131
  * Fix some copy pasta in settings
132
  * Update screenshots
133
 
134
  ### 0.9.3 ###
 
135
  * Quickly caught a few things I missed, so this release was skipped. See 0.9.4 for changes
136
 
137
  ### 0.9.2 ###
 
138
  * Fix issue where any profile information other than the Author Slug could not be updated
139
  * Minor code improvement
140
 
141
  ### 0.9.1 ###
 
142
  * Add 'Settings' link to plugins list table
143
 
144
  ### 0.9 ###
 
145
  * Allow Author Slug to be automatically created/updated based on a defined structure
146
  * Switched to using the Settings API, which also means that all options moved to the Settings > Edit Author Slug page
147
  * Various code improvements/optimizations
148
 
149
  ### 0.8.1 ###
 
150
  * Fix a bug that prevented non-admin users from updating their profile
151
 
152
  ### 0.8 ###
 
153
  * Drastically improved error handling and feedback for author slug editing.
154
  * Restore duplicate author slug check as old method could alter the slug without any sort of warning.
155
  * Further improve the logic for flushing rewrite rules.
@@ -157,12 +207,15 @@ I swear I tested this! :(
157
  * Add message in plugins list warning users of WP less than 3.2 that 0.8 is the last update they'll receive.
158
 
159
  ### 0.7.2 ###
 
160
  * Remove overzealous cap check.
161
 
162
  ### 0.7.1 ###
 
163
  * Fix some unfortunate errors I missed before tagging 0.7.
164
 
165
  ### 0.7 ###
 
166
  * Significant code refactoring.
167
  * Added custom capability to give site admins the ability to add author slug access to other roles.
168
  * Improvements/optimizations to code logic.
@@ -171,56 +224,69 @@ I swear I tested this! :(
171
  * Got rid of wp_die() statement on duplicate author slugs in favor of WP's built-in duplicate author slug method.
172
 
173
  ### 0.6.1 ###
 
174
  * Added Dutch translation - props Juliette Reinders Folmer.
175
  * Don't hard code the languages folder path.
176
  * Improve class check/initialization.
177
 
178
  ### 0.6 ###
 
179
  * Some code cleanup.
180
  * More security hardening.
181
  * Added filter to allow for the complete removal of the Author Base (http://brandonallen.org/2010/11/03/how-to-remove-the-author-base-with-edit-author-slug/).
182
  * Flush rewrite rules only when necessary instead of every page load.
183
 
184
  ### 0.5 ###
 
185
  * Added 'Author Slug' column to Users > Authors & Users (Users > Users in 3.0) page (props Yonat Sharon for the jumpstart).
186
  * Ended support for the WP 2.8 branch. Most likely still works, but I will not support it.
187
  * Various bug fixes.
188
 
189
  ### 0.4 ###
 
190
  * Added ability to change the Author Base.
191
  * Updated documentation.
192
  * Added some extra security via WP esc_* functions.
193
  * Added Belorussian translation, props Marcis G.
194
 
195
  ### 0.3.1 ###
 
196
  * Added Hebrew Translation, props Yonat Sharon.
197
 
198
  ### 0.3 ###
 
199
  * Now localization friendly.
200
 
201
  ### 0.2.1 ###
 
202
  * Fixed a bug that prevented updating a user if the author slug did not change.
203
 
204
  ### 0.2 ###
 
205
  * Added a check to avoid duplicate slugs.
206
  * Properly sanitize slug before comparison and database insertion.
207
  * Updated plugin URI.
208
 
209
  ### 0.1.4 ###
210
- * Update tags to reflect WordPress 2.9.1 compatability.
 
211
  * Update link to plugin homepage.
212
 
213
  ### 0.1.3 ###
214
- * Update tags to reflect WordPress 2.9 compatability.
 
215
 
216
  ### 0.1.2 ###
 
217
  * Fix version number issues.
218
 
219
  ### 0.1.1 ###
 
220
  * Remove extra debug functions left behind.
221
  * Add screenshot.
222
 
223
  ### 0.1 ###
 
224
  * Initial release.
225
 
226
  ## Upgrade Notice ##
2
  **Contributors:** [thebrandonallen](https://profiles.wordpress.org/thebrandonallen)
3
  **Tags:** author, author base, author slug, user nicename, nicename, permalink, permalinks, slug, users, user, role, roles
4
  **Requires at least:** 4.3
5
+ **Tested up to:** 4.7.3
6
+ **Stable tag:** 1.4.1
7
  **License:** GPLv2 or later
8
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
9
 
39
 
40
  ## Frequently Asked Questions ##
41
 
42
+ ### What is an author slug? ###
43
+
44
+ On standard WordPress installs, it's the final part of an author permalink.
45
+ e.g. - https://example.com/author/author-slug/
46
+
47
+ In relation to WordPress internals, the author slug is the same as the `user_nicename` field found in a `WP_User` object, or the users table in the database.
48
+
49
+ ### Will my changes persist if I deactivate or delete the Edit Author Slug plugin? ###
50
+
51
+ It depends.
52
+
53
+ Changing a user's author slug is permanent, as this changes the user's `user_nicename` field in the database.
54
+
55
+ If you've changed the author base, deactivating or deleting the plugin will revert your author base back to `author`.
56
+
57
+ ### Why can't I edit my Author Slug? ###
58
 
59
  Make sure you are an admin, or have been assigned the `edit_users` capability.
60
 
61
+ ### Why isn't my new Author Slug working? ###
62
 
63
+ While I've made every attempt to prevent this, I may have missed a spot or two. First things first, go to Settings > Permalinks and click "Save Changes." You don't need to actually need to make any changes for this to work. Hopefully, this should kick your new Author Slug into gear.
64
 
65
  If this doesn't work, make sure you don't have any slug conflicts from other posts/pages/plugins/permalink setting/etc. If you're still experiencing the issue, feel free to post a support request in the forums.
66
 
67
  ## Changelog ##
68
 
69
+ ### 1.4.1 ###
70
+ * Release date: April 24, 2017
71
+ * Fix failing string replacement in bulk update message.
72
+
73
+ ### 1.4.0 ###
74
+ * Release date: April 4, 2017
75
+ * Lots of code cleanup to better adhere to WordPress Coding Standards.
76
+ * Improved performance of `ba_eas_sanitize_author_base()` by preventing unnecessary processing.
77
+ * Fixed an issue where the demo author permalink URL could have a double slash.
78
+ * Improvements to bulk update for sites with a large user base.
79
+
80
  ### 1.3.0 ###
81
+ * Release date: January 25, 2017
82
  * Fix a potential bug where a sanitized author base could end up with double forward slashes.
83
  * Introduce the `%ba_eas_author_role%` permalink structure tag. This can be used to customize role-based author bases.
84
  * Bonus: All alternative facts are now free!
85
 
86
  ### 1.2.1 ###
87
+ * Release date: February 29, 2016
88
  * Fixed stupid error where the default user nicename wasn't being properly retrieved from the database. Sorry about that :(
89
  * Unfortunately, some unicorns were lost during the development of this release, but they are a resilient creature.
90
 
91
  ### 1.2.0 ###
92
+ * Release date: February 1, 2016
93
  * Added the ability to use forward slashes in the author base.
94
  * Improved display on the settings page, and storing, of role slugs.
95
  * Packaged translations are now removed. Anyone interested in translating the plugin should do so at [Translate WordPress](https://translate.wordpress.org/projects/wp-plugins/edit-author-slug).
98
  * Accessibility improvements to the settings page.
99
 
100
  ### 1.1.2 ###
101
+ * Release date: October 11, 2015
102
  * Fix loading of minified JS in the admin. Props nuyensgert.
103
 
104
  ### 1.1.1 ###
105
+ * Release date: September 29, 2015
106
  * Fix a few minor output escaping issues missed in the 1.1.0 release.
107
 
108
  ### 1.1.0 ###
109
+ * Release date: September 29, 2015
110
  * Added the ability to update all author slugs at once with the "Bulk Update" tool.
111
  * Greatly improved the checks and error messages when manually updating an author slug for a user.
112
  * Further accessibility improvements to match WP 4.3.
113
  * Improved validation of author slugs to better match that of WP.
114
 
115
  ### 1.0.6 ###
116
+ * Release date: September 14, 2015
117
  * Fix potential, although unlikely, persistent XSS vulnerability.
118
  * Prevent debug notice in admin. Props chesio.
119
  * Update heading tags to h1 to match WP 4.3.
120
 
121
  ### 1.0.5.1 ###
122
+ * Release date: August 4, 2015
123
  * Identical to 1.0.5, which failed to commit properly.
124
 
125
  ### 1.0.5 ###
126
+ * Release date: August 4, 2015
127
  * Add WP_User object as a parameter passed to the `ba_eas_show_user_nicename_options_list` filter
128
  * Add Japanese translation files. Props SmokyJp.
129
  * Fixed possible (although unlikely) cache invalidation issue
130
  * Minor code improvements and optimizations.
131
 
132
  ### 1.0.4 ###
133
+ * Release date: April 21, 2015
134
  * Improve upgrade routine for older installs
135
  * Improve output escaping
136
  * Various minor fixes and improvements
137
 
138
  ### 1.0.3 ###
139
+ * Release date: October 8, 2014
140
+
141
  I swear I tested this! :(
142
 
143
  * Fix custom roles slugs not saving
144
 
145
  ### 1.0.2 ###
146
+ * Release date: September 4, 2014
147
  * A number of localization fixes and improvements
148
  * Role slug improvements
149
  * Temporary, semi work-around for Co-Authors Plus [https://github.com/Automattic/Co-Authors-Plus/pull/204]
150
 
151
  ### 1.0.1 ###
152
+ * Release date: April 17, 2014
153
  * Fix possible syntax error when updating a profile (props Christine https://wordpress.org/support/topic/undefined-property-error-1)
154
 
155
  ### 1.0 ###
156
+ * Release date: February 26, 2014
157
  * Added ability to do role-based author bases
158
  * Added ability to use role-based author templates
159
  * Moderate code refactoring
162
  * First pass at unit test (only checks if the plugin is installed, for now)
163
 
164
  ### 0.9.6 ###
165
+ * Release date: December 18, 2013
166
  * Fixed loading of translation files. Looks in wp-content/plugins/edit-author-slug/languages. If you're running 3.7+ (and you are... aren't you?), it will fall back to wp-content/languages/plugins if a proper localization can't be found in the edit-author-slug folder.
167
 
168
  ### 0.9.5 ###
169
+ * Release date: April 29, 2013
170
  * Fixed instances where the Author Base wouldn't change, or would result in a 404
171
 
172
  ### 0.9.4 ###
173
+ * Release date: January 31, 2013
174
  * Update readme references to plugin settings
175
  * Fix some copy pasta in settings
176
  * Update screenshots
177
 
178
  ### 0.9.3 ###
179
+ * Release date: January 31, 2013
180
  * Quickly caught a few things I missed, so this release was skipped. See 0.9.4 for changes
181
 
182
  ### 0.9.2 ###
183
+ * Release date: June 25, 2012
184
  * Fix issue where any profile information other than the Author Slug could not be updated
185
  * Minor code improvement
186
 
187
  ### 0.9.1 ###
188
+ * Release date: June 14, 2012
189
  * Add 'Settings' link to plugins list table
190
 
191
  ### 0.9 ###
192
+ * Release date: June 13, 2012
193
  * Allow Author Slug to be automatically created/updated based on a defined structure
194
  * Switched to using the Settings API, which also means that all options moved to the Settings > Edit Author Slug page
195
  * Various code improvements/optimizations
196
 
197
  ### 0.8.1 ###
198
+ * Release date: February 14, 2012
199
  * Fix a bug that prevented non-admin users from updating their profile
200
 
201
  ### 0.8 ###
202
+ * Release date: December 15, 2011
203
  * Drastically improved error handling and feedback for author slug editing.
204
  * Restore duplicate author slug check as old method could alter the slug without any sort of warning.
205
  * Further improve the logic for flushing rewrite rules.
207
  * Add message in plugins list warning users of WP less than 3.2 that 0.8 is the last update they'll receive.
208
 
209
  ### 0.7.2 ###
210
+ * Release date: February 13, 2011
211
  * Remove overzealous cap check.
212
 
213
  ### 0.7.1 ###
214
+ * Release date: February 13, 2011
215
  * Fix some unfortunate errors I missed before tagging 0.7.
216
 
217
  ### 0.7 ###
218
+ * Release date: February 13, 2011
219
  * Significant code refactoring.
220
  * Added custom capability to give site admins the ability to add author slug access to other roles.
221
  * Improvements/optimizations to code logic.
224
  * Got rid of wp_die() statement on duplicate author slugs in favor of WP's built-in duplicate author slug method.
225
 
226
  ### 0.6.1 ###
227
+ * Release date: December 14, 2010
228
  * Added Dutch translation - props Juliette Reinders Folmer.
229
  * Don't hard code the languages folder path.
230
  * Improve class check/initialization.
231
 
232
  ### 0.6 ###
233
+ * Release date: November 3, 2010
234
  * Some code cleanup.
235
  * More security hardening.
236
  * Added filter to allow for the complete removal of the Author Base (http://brandonallen.org/2010/11/03/how-to-remove-the-author-base-with-edit-author-slug/).
237
  * Flush rewrite rules only when necessary instead of every page load.
238
 
239
  ### 0.5 ###
240
+ * Release date: June 22, 2010
241
  * Added 'Author Slug' column to Users > Authors & Users (Users > Users in 3.0) page (props Yonat Sharon for the jumpstart).
242
  * Ended support for the WP 2.8 branch. Most likely still works, but I will not support it.
243
  * Various bug fixes.
244
 
245
  ### 0.4 ###
246
+ * Release date: May 18, 2010
247
  * Added ability to change the Author Base.
248
  * Updated documentation.
249
  * Added some extra security via WP esc_* functions.
250
  * Added Belorussian translation, props Marcis G.
251
 
252
  ### 0.3.1 ###
253
+ * Release date: March 21, 2010
254
  * Added Hebrew Translation, props Yonat Sharon.
255
 
256
  ### 0.3 ###
257
+ * Release date: March 21, 2010
258
  * Now localization friendly.
259
 
260
  ### 0.2.1 ###
261
+ * Release date: February 15, 2010
262
  * Fixed a bug that prevented updating a user if the author slug did not change.
263
 
264
  ### 0.2 ###
265
+ * Release date: January 27, 2010
266
  * Added a check to avoid duplicate slugs.
267
  * Properly sanitize slug before comparison and database insertion.
268
  * Updated plugin URI.
269
 
270
  ### 0.1.4 ###
271
+ * Release date: January 18, 2010
272
+ * Update tags to reflect WordPress 2.9.1 compatibility.
273
  * Update link to plugin homepage.
274
 
275
  ### 0.1.3 ###
276
+ * Release date: December 21, 2009
277
+ * Update tags to reflect WordPress 2.9 compatibility.
278
 
279
  ### 0.1.2 ###
280
+ * Release date: November 28, 2009
281
  * Fix version number issues.
282
 
283
  ### 0.1.1 ###
284
+ * Release date: November 27, 2009
285
  * Remove extra debug functions left behind.
286
  * Add screenshot.
287
 
288
  ### 0.1 ###
289
+ * Release date: November 27, 2009
290
  * Initial release.
291
 
292
  ## Upgrade Notice ##
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: thebrandonallen
3
  Tags: author, author base, author slug, user nicename, nicename, permalink, permalinks, slug, users, user, role, roles
4
  Requires at least: 4.3
5
- Tested up to: 4.7.1
6
- Stable tag: 1.3.0
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -39,28 +39,57 @@ Translations should be submitted to [Translate WordPress](https://translate.word
39
 
40
  == Frequently Asked Questions ==
41
 
42
- = Why can't I edit my Author Slug? =
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
 
44
  Make sure you are an admin, or have been assigned the `edit_users` capability.
45
 
46
- = Why isn't my new Author Slug working? =
47
 
48
- While I've made every attempt to prevent this, I may have missed a spot or two. First things first, go to Settings > Permalinks and click "Save Changes." You don't need to actually need to make any changes for this to work. Hopefully, this should kick your new Author Slug into gear.
49
 
50
  If this doesn't work, make sure you don't have any slug conflicts from other posts/pages/plugins/permalink setting/etc. If you're still experiencing the issue, feel free to post a support request in the forums.
51
 
52
  == Changelog ==
53
 
 
 
 
 
 
 
 
 
 
 
 
54
  = 1.3.0 =
 
55
  * Fix a potential bug where a sanitized author base could end up with double forward slashes.
56
  * Introduce the `%ba_eas_author_role%` permalink structure tag. This can be used to customize role-based author bases.
57
  * Bonus: All alternative facts are now free!
58
 
59
  = 1.2.1 =
 
60
  * Fixed stupid error where the default user nicename wasn't being properly retrieved from the database. Sorry about that :(
61
  * Unfortunately, some unicorns were lost during the development of this release, but they are a resilient creature.
62
 
63
  = 1.2.0 =
 
64
  * Added the ability to use forward slashes in the author base.
65
  * Improved display on the settings page, and storing, of role slugs.
66
  * Packaged translations are now removed. Anyone interested in translating the plugin should do so at [Translate WordPress](https://translate.wordpress.org/projects/wp-plugins/edit-author-slug).
@@ -69,50 +98,62 @@ If this doesn't work, make sure you don't have any slug conflicts from other pos
69
  * Accessibility improvements to the settings page.
70
 
71
  = 1.1.2 =
 
72
  * Fix loading of minified JS in the admin. Props nuyensgert.
73
 
74
  = 1.1.1 =
 
75
  * Fix a few minor output escaping issues missed in the 1.1.0 release.
76
 
77
  = 1.1.0 =
 
78
  * Added the ability to update all author slugs at once with the "Bulk Update" tool.
79
  * Greatly improved the checks and error messages when manually updating an author slug for a user.
80
  * Further accessibility improvements to match WP 4.3.
81
  * Improved validation of author slugs to better match that of WP.
82
 
83
  = 1.0.6 =
 
84
  * Fix potential, although unlikely, persistent XSS vulnerability.
85
  * Prevent debug notice in admin. Props chesio.
86
  * Update heading tags to h1 to match WP 4.3.
87
 
88
  = 1.0.5.1 =
 
89
  * Identical to 1.0.5, which failed to commit properly.
90
 
91
  = 1.0.5 =
 
92
  * Add WP_User object as a parameter passed to the `ba_eas_show_user_nicename_options_list` filter
93
  * Add Japanese translation files. Props SmokyJp.
94
  * Fixed possible (although unlikely) cache invalidation issue
95
  * Minor code improvements and optimizations.
96
 
97
  = 1.0.4 =
 
98
  * Improve upgrade routine for older installs
99
  * Improve output escaping
100
  * Various minor fixes and improvements
101
 
102
  = 1.0.3 =
 
 
103
  I swear I tested this! :(
104
 
105
  * Fix custom roles slugs not saving
106
 
107
  = 1.0.2 =
 
108
  * A number of localization fixes and improvements
109
  * Role slug improvements
110
  * Temporary, semi work-around for Co-Authors Plus [https://github.com/Automattic/Co-Authors-Plus/pull/204]
111
 
112
  = 1.0.1 =
 
113
  * Fix possible syntax error when updating a profile (props Christine https://wordpress.org/support/topic/undefined-property-error-1)
114
 
115
  = 1.0 =
 
116
  * Added ability to do role-based author bases
117
  * Added ability to use role-based author templates
118
  * Moderate code refactoring
@@ -121,35 +162,44 @@ I swear I tested this! :(
121
  * First pass at unit test (only checks if the plugin is installed, for now)
122
 
123
  = 0.9.6 =
 
124
  * Fixed loading of translation files. Looks in wp-content/plugins/edit-author-slug/languages. If you're running 3.7+ (and you are... aren't you?), it will fall back to wp-content/languages/plugins if a proper localization can't be found in the edit-author-slug folder.
125
 
126
  = 0.9.5 =
 
127
  * Fixed instances where the Author Base wouldn't change, or would result in a 404
128
 
129
  = 0.9.4 =
 
130
  * Update readme references to plugin settings
131
  * Fix some copy pasta in settings
132
  * Update screenshots
133
 
134
  = 0.9.3 =
 
135
  * Quickly caught a few things I missed, so this release was skipped. See 0.9.4 for changes
136
 
137
  = 0.9.2 =
 
138
  * Fix issue where any profile information other than the Author Slug could not be updated
139
  * Minor code improvement
140
 
141
  = 0.9.1 =
 
142
  * Add 'Settings' link to plugins list table
143
 
144
  = 0.9 =
 
145
  * Allow Author Slug to be automatically created/updated based on a defined structure
146
  * Switched to using the Settings API, which also means that all options moved to the Settings > Edit Author Slug page
147
  * Various code improvements/optimizations
148
 
149
  = 0.8.1 =
 
150
  * Fix a bug that prevented non-admin users from updating their profile
151
 
152
  = 0.8 =
 
153
  * Drastically improved error handling and feedback for author slug editing.
154
  * Restore duplicate author slug check as old method could alter the slug without any sort of warning.
155
  * Further improve the logic for flushing rewrite rules.
@@ -157,12 +207,15 @@ I swear I tested this! :(
157
  * Add message in plugins list warning users of WP less than 3.2 that 0.8 is the last update they'll receive.
158
 
159
  = 0.7.2 =
 
160
  * Remove overzealous cap check.
161
 
162
  = 0.7.1 =
 
163
  * Fix some unfortunate errors I missed before tagging 0.7.
164
 
165
  = 0.7 =
 
166
  * Significant code refactoring.
167
  * Added custom capability to give site admins the ability to add author slug access to other roles.
168
  * Improvements/optimizations to code logic.
@@ -171,56 +224,69 @@ I swear I tested this! :(
171
  * Got rid of wp_die() statement on duplicate author slugs in favor of WP's built-in duplicate author slug method.
172
 
173
  = 0.6.1 =
 
174
  * Added Dutch translation - props Juliette Reinders Folmer.
175
  * Don't hard code the languages folder path.
176
  * Improve class check/initialization.
177
 
178
  = 0.6 =
 
179
  * Some code cleanup.
180
  * More security hardening.
181
  * Added filter to allow for the complete removal of the Author Base (http://brandonallen.org/2010/11/03/how-to-remove-the-author-base-with-edit-author-slug/).
182
  * Flush rewrite rules only when necessary instead of every page load.
183
 
184
  = 0.5 =
 
185
  * Added 'Author Slug' column to Users > Authors & Users (Users > Users in 3.0) page (props Yonat Sharon for the jumpstart).
186
  * Ended support for the WP 2.8 branch. Most likely still works, but I will not support it.
187
  * Various bug fixes.
188
 
189
  = 0.4 =
 
190
  * Added ability to change the Author Base.
191
  * Updated documentation.
192
  * Added some extra security via WP esc_* functions.
193
  * Added Belorussian translation, props Marcis G.
194
 
195
  = 0.3.1 =
 
196
  * Added Hebrew Translation, props Yonat Sharon.
197
 
198
  = 0.3 =
 
199
  * Now localization friendly.
200
 
201
  = 0.2.1 =
 
202
  * Fixed a bug that prevented updating a user if the author slug did not change.
203
 
204
  = 0.2 =
 
205
  * Added a check to avoid duplicate slugs.
206
  * Properly sanitize slug before comparison and database insertion.
207
  * Updated plugin URI.
208
 
209
  = 0.1.4 =
210
- * Update tags to reflect WordPress 2.9.1 compatability.
 
211
  * Update link to plugin homepage.
212
 
213
  = 0.1.3 =
214
- * Update tags to reflect WordPress 2.9 compatability.
 
215
 
216
  = 0.1.2 =
 
217
  * Fix version number issues.
218
 
219
  = 0.1.1 =
 
220
  * Remove extra debug functions left behind.
221
  * Add screenshot.
222
 
223
  = 0.1 =
 
224
  * Initial release.
225
 
226
  == Upgrade Notice ==
2
  Contributors: thebrandonallen
3
  Tags: author, author base, author slug, user nicename, nicename, permalink, permalinks, slug, users, user, role, roles
4
  Requires at least: 4.3
5
+ Tested up to: 4.7.3
6
+ Stable tag: 1.4.1
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
39
 
40
  == Frequently Asked Questions ==
41
 
42
+ = What is an author slug? =
43
+
44
+ On standard WordPress installs, it's the final part of an author permalink.
45
+ e.g. - https://example.com/author/author-slug/
46
+
47
+ In relation to WordPress internals, the author slug is the same as the `user_nicename` field found in a `WP_User` object, or the users table in the database.
48
+
49
+ = Will my changes persist if I deactivate or delete the Edit Author Slug plugin? =
50
+
51
+ It depends.
52
+
53
+ Changing a user's author slug is permanent, as this changes the user's `user_nicename` field in the database.
54
+
55
+ If you've changed the author base, deactivating or deleting the plugin will revert your author base back to `author`.
56
+
57
+ = Why can't I edit my Author Slug? =
58
 
59
  Make sure you are an admin, or have been assigned the `edit_users` capability.
60
 
61
+ = Why isn't my new Author Slug working? =
62
 
63
+ While I've made every attempt to prevent this, I may have missed a spot or two. First things first, go to Settings > Permalinks and click "Save Changes." You don't need to actually need to make any changes for this to work. Hopefully, this should kick your new Author Slug into gear.
64
 
65
  If this doesn't work, make sure you don't have any slug conflicts from other posts/pages/plugins/permalink setting/etc. If you're still experiencing the issue, feel free to post a support request in the forums.
66
 
67
  == Changelog ==
68
 
69
+ = 1.4.1 =
70
+ * Release date: April 24, 2017
71
+ * Fix failing string replacement in bulk update message.
72
+
73
+ = 1.4.0 =
74
+ * Release date: April 4, 2017
75
+ * Lots of code cleanup to better adhere to WordPress Coding Standards.
76
+ * Improved performance of `ba_eas_sanitize_author_base()` by preventing unnecessary processing.
77
+ * Fixed an issue where the demo author permalink URL could have a double slash.
78
+ * Improvements to bulk update for sites with a large user base.
79
+
80
  = 1.3.0 =
81
+ * Release date: January 25, 2017
82
  * Fix a potential bug where a sanitized author base could end up with double forward slashes.
83
  * Introduce the `%ba_eas_author_role%` permalink structure tag. This can be used to customize role-based author bases.
84
  * Bonus: All alternative facts are now free!
85
 
86
  = 1.2.1 =
87
+ * Release date: February 29, 2016
88
  * Fixed stupid error where the default user nicename wasn't being properly retrieved from the database. Sorry about that :(
89
  * Unfortunately, some unicorns were lost during the development of this release, but they are a resilient creature.
90
 
91
  = 1.2.0 =
92
+ * Release date: February 1, 2016
93
  * Added the ability to use forward slashes in the author base.
94
  * Improved display on the settings page, and storing, of role slugs.
95
  * Packaged translations are now removed. Anyone interested in translating the plugin should do so at [Translate WordPress](https://translate.wordpress.org/projects/wp-plugins/edit-author-slug).
98
  * Accessibility improvements to the settings page.
99
 
100
  = 1.1.2 =
101
+ * Release date: October 11, 2015
102
  * Fix loading of minified JS in the admin. Props nuyensgert.
103
 
104
  = 1.1.1 =
105
+ * Release date: September 29, 2015
106
  * Fix a few minor output escaping issues missed in the 1.1.0 release.
107
 
108
  = 1.1.0 =
109
+ * Release date: September 29, 2015
110
  * Added the ability to update all author slugs at once with the "Bulk Update" tool.
111
  * Greatly improved the checks and error messages when manually updating an author slug for a user.
112
  * Further accessibility improvements to match WP 4.3.
113
  * Improved validation of author slugs to better match that of WP.
114
 
115
  = 1.0.6 =
116
+ * Release date: September 14, 2015
117
  * Fix potential, although unlikely, persistent XSS vulnerability.
118
  * Prevent debug notice in admin. Props chesio.
119
  * Update heading tags to h1 to match WP 4.3.
120
 
121
  = 1.0.5.1 =
122
+ * Release date: August 4, 2015
123
  * Identical to 1.0.5, which failed to commit properly.
124
 
125
  = 1.0.5 =
126
+ * Release date: August 4, 2015
127
  * Add WP_User object as a parameter passed to the `ba_eas_show_user_nicename_options_list` filter
128
  * Add Japanese translation files. Props SmokyJp.
129
  * Fixed possible (although unlikely) cache invalidation issue
130
  * Minor code improvements and optimizations.
131
 
132
  = 1.0.4 =
133
+ * Release date: April 21, 2015
134
  * Improve upgrade routine for older installs
135
  * Improve output escaping
136
  * Various minor fixes and improvements
137
 
138
  = 1.0.3 =
139
+ * Release date: October 8, 2014
140
+
141
  I swear I tested this! :(
142
 
143
  * Fix custom roles slugs not saving
144
 
145
  = 1.0.2 =
146
+ * Release date: September 4, 2014
147
  * A number of localization fixes and improvements
148
  * Role slug improvements
149
  * Temporary, semi work-around for Co-Authors Plus [https://github.com/Automattic/Co-Authors-Plus/pull/204]
150
 
151
  = 1.0.1 =
152
+ * Release date: April 17, 2014
153
  * Fix possible syntax error when updating a profile (props Christine https://wordpress.org/support/topic/undefined-property-error-1)
154
 
155
  = 1.0 =
156
+ * Release date: February 26, 2014
157
  * Added ability to do role-based author bases
158
  * Added ability to use role-based author templates
159
  * Moderate code refactoring
162
  * First pass at unit test (only checks if the plugin is installed, for now)
163
 
164
  = 0.9.6 =
165
+ * Release date: December 18, 2013
166
  * Fixed loading of translation files. Looks in wp-content/plugins/edit-author-slug/languages. If you're running 3.7+ (and you are... aren't you?), it will fall back to wp-content/languages/plugins if a proper localization can't be found in the edit-author-slug folder.
167
 
168
  = 0.9.5 =
169
+ * Release date: April 29, 2013
170
  * Fixed instances where the Author Base wouldn't change, or would result in a 404
171
 
172
  = 0.9.4 =
173
+ * Release date: January 31, 2013
174
  * Update readme references to plugin settings
175
  * Fix some copy pasta in settings
176
  * Update screenshots
177
 
178
  = 0.9.3 =
179
+ * Release date: January 31, 2013
180
  * Quickly caught a few things I missed, so this release was skipped. See 0.9.4 for changes
181
 
182
  = 0.9.2 =
183
+ * Release date: June 25, 2012
184
  * Fix issue where any profile information other than the Author Slug could not be updated
185
  * Minor code improvement
186
 
187
  = 0.9.1 =
188
+ * Release date: June 14, 2012
189
  * Add 'Settings' link to plugins list table
190
 
191
  = 0.9 =
192
+ * Release date: June 13, 2012
193
  * Allow Author Slug to be automatically created/updated based on a defined structure
194
  * Switched to using the Settings API, which also means that all options moved to the Settings > Edit Author Slug page
195
  * Various code improvements/optimizations
196
 
197
  = 0.8.1 =
198
+ * Release date: February 14, 2012
199
  * Fix a bug that prevented non-admin users from updating their profile
200
 
201
  = 0.8 =
202
+ * Release date: December 15, 2011
203
  * Drastically improved error handling and feedback for author slug editing.
204
  * Restore duplicate author slug check as old method could alter the slug without any sort of warning.
205
  * Further improve the logic for flushing rewrite rules.
207
  * Add message in plugins list warning users of WP less than 3.2 that 0.8 is the last update they'll receive.
208
 
209
  = 0.7.2 =
210
+ * Release date: February 13, 2011
211
  * Remove overzealous cap check.
212
 
213
  = 0.7.1 =
214
+ * Release date: February 13, 2011
215
  * Fix some unfortunate errors I missed before tagging 0.7.
216
 
217
  = 0.7 =
218
+ * Release date: February 13, 2011
219
  * Significant code refactoring.
220
  * Added custom capability to give site admins the ability to add author slug access to other roles.
221
  * Improvements/optimizations to code logic.
224
  * Got rid of wp_die() statement on duplicate author slugs in favor of WP's built-in duplicate author slug method.
225
 
226
  = 0.6.1 =
227
+ * Release date: December 14, 2010
228
  * Added Dutch translation - props Juliette Reinders Folmer.
229
  * Don't hard code the languages folder path.
230
  * Improve class check/initialization.
231
 
232
  = 0.6 =
233
+ * Release date: November 3, 2010
234
  * Some code cleanup.
235
  * More security hardening.
236
  * Added filter to allow for the complete removal of the Author Base (http://brandonallen.org/2010/11/03/how-to-remove-the-author-base-with-edit-author-slug/).
237
  * Flush rewrite rules only when necessary instead of every page load.
238
 
239
  = 0.5 =
240
+ * Release date: June 22, 2010
241
  * Added 'Author Slug' column to Users > Authors & Users (Users > Users in 3.0) page (props Yonat Sharon for the jumpstart).
242
  * Ended support for the WP 2.8 branch. Most likely still works, but I will not support it.
243
  * Various bug fixes.
244
 
245
  = 0.4 =
246
+ * Release date: May 18, 2010
247
  * Added ability to change the Author Base.
248
  * Updated documentation.
249
  * Added some extra security via WP esc_* functions.
250
  * Added Belorussian translation, props Marcis G.
251
 
252
  = 0.3.1 =
253
+ * Release date: March 21, 2010
254
  * Added Hebrew Translation, props Yonat Sharon.
255
 
256
  = 0.3 =
257
+ * Release date: March 21, 2010
258
  * Now localization friendly.
259
 
260
  = 0.2.1 =
261
+ * Release date: February 15, 2010
262
  * Fixed a bug that prevented updating a user if the author slug did not change.
263
 
264
  = 0.2 =
265
+ * Release date: January 27, 2010
266
  * Added a check to avoid duplicate slugs.
267
  * Properly sanitize slug before comparison and database insertion.
268
  * Updated plugin URI.
269
 
270
  = 0.1.4 =
271
+ * Release date: January 18, 2010
272
+ * Update tags to reflect WordPress 2.9.1 compatibility.
273
  * Update link to plugin homepage.
274
 
275
  = 0.1.3 =
276
+ * Release date: December 21, 2009
277
+ * Update tags to reflect WordPress 2.9 compatibility.
278
 
279
  = 0.1.2 =
280
+ * Release date: November 28, 2009
281
  * Fix version number issues.
282
 
283
  = 0.1.1 =
284
+ * Release date: November 27, 2009
285
  * Remove extra debug functions left behind.
286
  * Add screenshot.
287
 
288
  = 0.1 =
289
+ * Release date: November 27, 2009
290
  * Initial release.
291
 
292
  == Upgrade Notice ==