Custom Post Type Permalinks - Version 0.7.5.6

Version Description

Download this release

Release Info

Developer Toro_Unit
Plugin Icon 128x128 Custom Post Type Permalinks
Version 0.7.5.6
Comparing to
See all releases

Code changes from version 0.7.5.2 to 0.7.5.6

Files changed (2) hide show
  1. custom-post-type-permalinks.php +51 -73
  2. readme.txt +7 -7
custom-post-type-permalinks.php CHANGED
@@ -5,7 +5,7 @@ Plugin URI: http://www.torounit.com
5
  Description: Add post archives of custom post type and customizable permalinks.
6
  Author: Toro-Unit
7
  Author URI: http://www.torounit.com/plugins/custom-post-type-permalinks/
8
- Version: 0.7.5.2
9
  Text Domain: cptp
10
  Domain Path: /
11
  */
@@ -36,42 +36,47 @@ class Custom_Post_Type_Permalinks {
36
 
37
  static public $default_structure = '/%year%/%monthnum%/%day%/%post_id%/';
38
 
39
- function __construct () {
40
- add_action('admin_init',array(&$this,'set_archive_rewrite'),99);
41
- add_action('admin_init', array(&$this,'set_rewrite'),100);
42
- add_filter('post_type_link', array(&$this,'set_permalink'),10,3);
43
 
44
- add_filter('getarchives_where', array(&$this,'get_archives_where'), 10, 2);
45
- add_filter('get_archives_link', array(&$this,'get_archives_link'));
46
 
47
- add_action('admin_init', array(&$this,'add_tax_rewrite'));
48
- add_filter('term_link', array(&$this,'set_term_link'),10,3);
 
 
49
  }
50
 
51
- function get_taxonomy_parents( $id, $taxonomy = 'category', $link = false, $separator = '/', $nicename = false, $visited = array() ) {
52
  $chain = '';
53
  $parent = &get_term( $id, $taxonomy, OBJECT, 'raw');
54
- if ( is_wp_error( $parent ) )
55
  return $parent;
 
56
 
57
- if ( $nicename )
58
  $name = $parent->slug;
59
- else
60
  $name = $parent->name;
 
61
 
62
  if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
63
  $visited[] = $parent->parent;
64
  $chain .= $this->get_taxonomy_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited );
65
  }
66
 
67
- if ( $link )
68
  $chain .= '<a href="' . get_term_link( $parent->term_id, $taxonomy ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
69
- else
70
  $chain .= $name.$separator;
 
71
  return $chain;
72
  }
73
 
74
- function set_archive_rewrite() {
75
  $post_types = get_post_types( array('_builtin'=>false, 'publicly_queryable'=>true,'show_ui' => true) );
76
 
77
  foreach ( $post_types as $post_type ):
@@ -107,13 +112,13 @@ class Custom_Post_Type_Permalinks {
107
  add_rewrite_rule( $post_type.'/date/([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$', 'index.php?year=$matches[1]&feed=$matches[2]&post_type='.$post_type, 'top' );
108
  add_rewrite_rule( $post_type.'/date/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?year=$matches[1]&paged=$matches[2]&post_type='.$post_type, 'top' );
109
  add_rewrite_rule( $post_type.'/date/([0-9]{4})/?$', 'index.php?year=$matches[1]&post_type='.$post_type, 'top' );
110
- add_rewrite_rule( $post_type.'/date/([0-9]{4})/?$', 'index.php?author=$matches[1]&post_type='.$post_type, 'top' );
111
  add_rewrite_rule( $post_type.'/?$', 'index.php?post_type='.$post_type, 'top' );
112
  }
113
  endforeach;
114
  }
115
 
116
- function set_rewrite() {
117
  global $wp_rewrite;
118
 
119
  $post_types = get_post_types( array('_builtin'=>false, 'publicly_queryable'=>true,'show_ui' => true) );
@@ -148,13 +153,9 @@ class Custom_Post_Type_Permalinks {
148
  endforeach;
149
 
150
  $wp_rewrite->use_verbose_page_rules = true;
151
- if(isset($_POST['submit']) && strpos($_POST['_wp_http_referer'],'options-permalink.php') !== FALSE ) {
152
- global $wp_rewrite;
153
- $wp_rewrite->flush_rules();
154
- }
155
  }
156
 
157
- function set_permalink( $post_link, $post,$leavename ) {
158
  global $wp_rewrite;
159
  $draft_or_pending = isset( $post->post_status ) && in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft' ) );
160
  if( $draft_or_pending and !$leavename )
@@ -192,22 +193,21 @@ class Custom_Post_Type_Permalinks {
192
  $user = get_userdata( $post->post_author );
193
  $permalink = str_replace( "%author%", $user->user_nicename, $permalink );
194
 
195
- $post_date = strtotime( $post->post_date);
196
- $permalink = str_replace( "%year%", date("Y",$post_date), $permalink );
197
  $permalink = str_replace( "%monthnum%", date("m",$post_date), $permalink );
198
- $permalink = str_replace( "%day%", date("d",$post_date), $permalink );
199
- $permalink = str_replace( "%hour%", date("H",$post_date), $permalink );
200
- $permalink = str_replace( "%minute%", date("i",$post_date), $permalink );
201
- $permalink = str_replace( "%second%", date("s",$post_date), $permalink );
202
 
203
  $permalink = str_replace('//', "/", $permalink );
204
 
205
 
206
- $permalink = home_url( user_trailingslashit( $permalink ) );
207
- $str = rtrim( preg_replace("/%[a-z,_]*%/","",get_option("permalink_structure")) ,'/');
208
- $permalink = str_replace($str, "", $permalink );
209
 
210
- return $permalink;
211
  }
212
 
213
  /**
@@ -217,7 +217,7 @@ class Custom_Post_Type_Permalinks {
217
 
218
  public $get_archives_where_r;
219
 
220
- function get_archives_where( $where, $r ) {
221
  $this->get_archives_where_r = $r;
222
 
223
  if ( isset($r['post_type']) )
@@ -227,9 +227,7 @@ class Custom_Post_Type_Permalinks {
227
  }
228
 
229
  function get_archives_link( $link_html ) {
230
-
231
  //$slug = get_post_type_object($this->get_archives_where_r['post_type'])->rewrite['slug'];
232
-
233
  if (isset($this->get_archives_where_r['post_type']) and $this->get_archives_where_r['type'] != 'postbypost'){
234
  $blog_url = get_bloginfo("url");
235
  if($str = rtrim( preg_replace("/%[a-z,_]*%/","",get_option("permalink_structure")) ,'/')) {
@@ -246,8 +244,7 @@ class Custom_Post_Type_Permalinks {
246
  /**
247
  * fix permalink custom taxonomy
248
  */
249
- function add_tax_rewrite() {
250
-
251
  if(get_option('no_taxonomy_structure'))
252
  return false;
253
 
@@ -267,18 +264,19 @@ class Custom_Post_Type_Permalinks {
267
  add_rewrite_rule( $slug.'/'.$taxonomy.'/(.+?)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$taxonomy.'=$matches[1]&feed=$matches[2]', 'top' );
268
  add_rewrite_rule( $slug.'/'.$taxonomy.'/(.+?)/page/?([0-9]{1,})/?$', 'index.php?'.$taxonomy.'=$matches[1]&paged=$matches[2]', 'top' );
269
 
270
- add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/?$', 'index.php?'.$taxonomy.'=$matches[1]', 'top' );
271
- add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$taxonomy.'=$matches[1]&feed=$matches[2]', 'top' );
272
- add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$taxonomy.'=$matches[1]&feed=$matches[2]', 'top' );
273
- add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/page/?([0-9]{1,})/?$', 'index.php?'.$taxonomy.'=$matches[1]&paged=$matches[2]', 'top' );
 
 
274
 
275
  endforeach;
276
 
277
  endforeach;
278
  }
279
 
280
- function set_term_link( $termlink, $term, $taxonomy ) {
281
-
282
  if( get_option('no_taxonomy_structure') )
283
  return $termlink;
284
 
@@ -305,17 +303,16 @@ class Custom_Post_Type_Permalinks {
305
 
306
  class Custom_Post_Type_Permalinks_Admin {
307
 
308
- function __construct () {
309
  add_action('init', array(&$this,'load_textdomain'));
310
  add_action('admin_init', array(&$this,'settings_api_init'),30);
311
- //add_action('admin_init', array(&$this,'set_rules'),50);
312
  }
313
 
314
- function load_textdomain() {
315
  load_plugin_textdomain('cptp',false,'custom-post-type-permalinks');
316
  }
317
 
318
- function settings_api_init() {
319
  add_settings_section('cptp_setting_section',
320
  __("Permalink Setting for custom post type",'cptp'),
321
  array(&$this,'setting_section_callback_function'),
@@ -344,7 +341,6 @@ class Custom_Post_Type_Permalinks_Admin {
344
 
345
  update_option($post_type.'_structure', $structure );
346
  }
347
-
348
  }
349
 
350
  add_settings_field($post_type.'_structure',
@@ -368,7 +364,7 @@ class Custom_Post_Type_Permalinks_Admin {
368
 
369
  register_setting('permalink','no_taxonomy_structure');
370
 
371
- if(isset($_POST['submit']) && strpos($_POST['_wp_http_referer'],'options-permalink.php') !== FALSE ) {
372
 
373
  if(!isset($_POST['no_taxonomy_structure'])){
374
  $set = true;
@@ -376,21 +372,10 @@ class Custom_Post_Type_Permalinks_Admin {
376
  $set = false;
377
  }
378
  update_option('no_taxonomy_structure', $set);
379
-
380
  }
381
-
382
  }
383
 
384
- function set_rules() {
385
-
386
- global $wp_rewrite;
387
- if( strpos($_SERVER["REQUEST_URI"],'options-permalink.php') !== FALSE ) {
388
- $wp_rewrite->flush_rules();
389
- }
390
- }
391
-
392
- function setting_section_callback_function() {
393
-
394
  ?>
395
  <p><?php _e("Setting permalinks of custom post type.",'cptp');?><br />
396
  <?php _e("The tags you can use is WordPress Structure Tags and '%{custom_taxonomy_slug}%'.",'cptp');?><br />
@@ -400,12 +385,9 @@ class Custom_Post_Type_Permalinks_Admin {
400
  <?php _e("If you don't entered permalink structure, permalink is configured /%year%/%monthnum%/%day%/%post_id%/.",'cptp');?>
401
  </p>
402
  <?php
403
-
404
-
405
  }
406
 
407
- function setting_structure_callback_function( $option ) {
408
-
409
  $post_type = str_replace('_structure',"" ,$option);
410
  $slug = get_post_type_object($post_type)->rewrite['slug'];
411
  if( !$slug )
@@ -414,16 +396,12 @@ class Custom_Post_Type_Permalinks_Admin {
414
  echo '/'.$slug.' <input name="'.$option.'" id="'.$option.'" type="text" class="regular-text code" value="' . get_option($option) .'" />';
415
  }
416
 
417
- function setting_no_tax_structure_callback_function(){
418
-
419
  echo '<input name="no_taxonomy_structure" id="no_taxonomy_structure" type="checkbox" value="1" class="code" ' . checked( false, get_option('no_taxonomy_structure'),false) . ' /> ';
420
  _e("If you check,The custom taxonomy's permalinks is example.com/post_type/taxonomy/term.","cptp");
421
  }
422
- }
423
 
 
424
 
425
-
426
- if(get_option("permalink_structure") != "")
427
- new Custom_Post_Type_Permalinks;
428
-
429
  new Custom_Post_Type_Permalinks_Admin;
5
  Description: Add post archives of custom post type and customizable permalinks.
6
  Author: Toro-Unit
7
  Author URI: http://www.torounit.com/plugins/custom-post-type-permalinks/
8
+ Version: 0.7.5.6
9
  Text Domain: cptp
10
  Domain Path: /
11
  */
36
 
37
  static public $default_structure = '/%year%/%monthnum%/%day%/%post_id%/';
38
 
39
+ public function __construct () {
40
+ add_action('wp_loaded',array(&$this,'set_archive_rewrite'),99);
41
+ add_action('wp_loaded', array(&$this,'set_rewrite'),100);
42
+ add_action('wp_loaded', array(&$this,'add_tax_rewrite'));
43
 
44
+ if(get_option("permalink_structure") != "") {
45
+ add_filter('post_type_link', array(&$this,'set_permalink'),10,3);
46
 
47
+ add_filter('getarchives_where', array(&$this,'get_archives_where'), 10, 2);
48
+ add_filter('get_archives_link', array(&$this,'get_archives_link'));
49
+ add_filter('term_link', array(&$this,'set_term_link'),10,3);
50
+ }
51
  }
52
 
53
+ public function get_taxonomy_parents( $id, $taxonomy = 'category', $link = false, $separator = '/', $nicename = false, $visited = array() ) {
54
  $chain = '';
55
  $parent = &get_term( $id, $taxonomy, OBJECT, 'raw');
56
+ if ( is_wp_error( $parent ) ) {
57
  return $parent;
58
+ }
59
 
60
+ if ( $nicename ){
61
  $name = $parent->slug;
62
+ }else {
63
  $name = $parent->name;
64
+ }
65
 
66
  if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
67
  $visited[] = $parent->parent;
68
  $chain .= $this->get_taxonomy_parents( $parent->parent, $taxonomy, $link, $separator, $nicename, $visited );
69
  }
70
 
71
+ if ( $link ) {
72
  $chain .= '<a href="' . get_term_link( $parent->term_id, $taxonomy ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
73
+ }else {
74
  $chain .= $name.$separator;
75
+ }
76
  return $chain;
77
  }
78
 
79
+ public function set_archive_rewrite() {
80
  $post_types = get_post_types( array('_builtin'=>false, 'publicly_queryable'=>true,'show_ui' => true) );
81
 
82
  foreach ( $post_types as $post_type ):
112
  add_rewrite_rule( $post_type.'/date/([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$', 'index.php?year=$matches[1]&feed=$matches[2]&post_type='.$post_type, 'top' );
113
  add_rewrite_rule( $post_type.'/date/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?year=$matches[1]&paged=$matches[2]&post_type='.$post_type, 'top' );
114
  add_rewrite_rule( $post_type.'/date/([0-9]{4})/?$', 'index.php?year=$matches[1]&post_type='.$post_type, 'top' );
115
+ add_rewrite_rule( $post_type.'/author/([0-9]{4})/?$', 'index.php?author=$matches[1]&post_type='.$post_type, 'top' );
116
  add_rewrite_rule( $post_type.'/?$', 'index.php?post_type='.$post_type, 'top' );
117
  }
118
  endforeach;
119
  }
120
 
121
+ public function set_rewrite() {
122
  global $wp_rewrite;
123
 
124
  $post_types = get_post_types( array('_builtin'=>false, 'publicly_queryable'=>true,'show_ui' => true) );
153
  endforeach;
154
 
155
  $wp_rewrite->use_verbose_page_rules = true;
 
 
 
 
156
  }
157
 
158
+ public function set_permalink( $post_link, $post,$leavename ) {
159
  global $wp_rewrite;
160
  $draft_or_pending = isset( $post->post_status ) && in_array( $post->post_status, array( 'draft', 'pending', 'auto-draft' ) );
161
  if( $draft_or_pending and !$leavename )
193
  $user = get_userdata( $post->post_author );
194
  $permalink = str_replace( "%author%", $user->user_nicename, $permalink );
195
 
196
+ $post_date = strtotime( $post->post_date );
197
+ $permalink = str_replace( "%year%", date("Y",$post_date), $permalink );
198
  $permalink = str_replace( "%monthnum%", date("m",$post_date), $permalink );
199
+ $permalink = str_replace( "%day%", date("d",$post_date), $permalink );
200
+ $permalink = str_replace( "%hour%", date("H",$post_date), $permalink );
201
+ $permalink = str_replace( "%minute%", date("i",$post_date), $permalink );
202
+ $permalink = str_replace( "%second%", date("s",$post_date), $permalink );
203
 
204
  $permalink = str_replace('//', "/", $permalink );
205
 
206
 
207
+ return $permalink = home_url( user_trailingslashit( $permalink ) );
208
+ //$str = rtrim( preg_replace("/%[a-z,_]*%/","",get_option("permalink_structure")) ,'/');
209
+ //$permalink = str_replace($str, "", $permalink );
210
 
 
211
  }
212
 
213
  /**
217
 
218
  public $get_archives_where_r;
219
 
220
+ public function get_archives_where( $where, $r ) {
221
  $this->get_archives_where_r = $r;
222
 
223
  if ( isset($r['post_type']) )
227
  }
228
 
229
  function get_archives_link( $link_html ) {
 
230
  //$slug = get_post_type_object($this->get_archives_where_r['post_type'])->rewrite['slug'];
 
231
  if (isset($this->get_archives_where_r['post_type']) and $this->get_archives_where_r['type'] != 'postbypost'){
232
  $blog_url = get_bloginfo("url");
233
  if($str = rtrim( preg_replace("/%[a-z,_]*%/","",get_option("permalink_structure")) ,'/')) {
244
  /**
245
  * fix permalink custom taxonomy
246
  */
247
+ public function add_tax_rewrite() {
 
248
  if(get_option('no_taxonomy_structure'))
249
  return false;
250
 
264
  add_rewrite_rule( $slug.'/'.$taxonomy.'/(.+?)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$taxonomy.'=$matches[1]&feed=$matches[2]', 'top' );
265
  add_rewrite_rule( $slug.'/'.$taxonomy.'/(.+?)/page/?([0-9]{1,})/?$', 'index.php?'.$taxonomy.'=$matches[1]&paged=$matches[2]', 'top' );
266
 
267
+ if( $slug != $post_type ){
268
+ add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/?$', 'index.php?'.$taxonomy.'=$matches[1]', 'top' );
269
+ add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$taxonomy.'=$matches[1]&feed=$matches[2]', 'top' );
270
+ add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$taxonomy.'=$matches[1]&feed=$matches[2]', 'top' );
271
+ add_rewrite_rule( $post_type.'/'.$taxonomy.'/(.+?)/page/?([0-9]{1,})/?$', 'index.php?'.$taxonomy.'=$matches[1]&paged=$matches[2]', 'top' );
272
+ }
273
 
274
  endforeach;
275
 
276
  endforeach;
277
  }
278
 
279
+ public function set_term_link( $termlink, $term, $taxonomy ) {
 
280
  if( get_option('no_taxonomy_structure') )
281
  return $termlink;
282
 
303
 
304
  class Custom_Post_Type_Permalinks_Admin {
305
 
306
+ public function __construct () {
307
  add_action('init', array(&$this,'load_textdomain'));
308
  add_action('admin_init', array(&$this,'settings_api_init'),30);
 
309
  }
310
 
311
+ public function load_textdomain() {
312
  load_plugin_textdomain('cptp',false,'custom-post-type-permalinks');
313
  }
314
 
315
+ public function settings_api_init() {
316
  add_settings_section('cptp_setting_section',
317
  __("Permalink Setting for custom post type",'cptp'),
318
  array(&$this,'setting_section_callback_function'),
341
 
342
  update_option($post_type.'_structure', $structure );
343
  }
 
344
  }
345
 
346
  add_settings_field($post_type.'_structure',
364
 
365
  register_setting('permalink','no_taxonomy_structure');
366
 
367
+ if(isset($_POST['submit']) && isset($_POST['_wp_http_referer']) && strpos($_POST['_wp_http_referer'],'options-permalink.php') !== FALSE ) {
368
 
369
  if(!isset($_POST['no_taxonomy_structure'])){
370
  $set = true;
372
  $set = false;
373
  }
374
  update_option('no_taxonomy_structure', $set);
 
375
  }
 
376
  }
377
 
378
+ public function setting_section_callback_function() {
 
 
 
 
 
 
 
 
 
379
  ?>
380
  <p><?php _e("Setting permalinks of custom post type.",'cptp');?><br />
381
  <?php _e("The tags you can use is WordPress Structure Tags and '%{custom_taxonomy_slug}%'.",'cptp');?><br />
385
  <?php _e("If you don't entered permalink structure, permalink is configured /%year%/%monthnum%/%day%/%post_id%/.",'cptp');?>
386
  </p>
387
  <?php
 
 
388
  }
389
 
390
+ public function setting_structure_callback_function( $option ) {
 
391
  $post_type = str_replace('_structure',"" ,$option);
392
  $slug = get_post_type_object($post_type)->rewrite['slug'];
393
  if( !$slug )
396
  echo '/'.$slug.' <input name="'.$option.'" id="'.$option.'" type="text" class="regular-text code" value="' . get_option($option) .'" />';
397
  }
398
 
399
+ public function setting_no_tax_structure_callback_function(){
 
400
  echo '<input name="no_taxonomy_structure" id="no_taxonomy_structure" type="checkbox" value="1" class="code" ' . checked( false, get_option('no_taxonomy_structure'),false) . ' /> ';
401
  _e("If you check,The custom taxonomy's permalinks is example.com/post_type/taxonomy/term.","cptp");
402
  }
 
403
 
404
+ }
405
 
406
+ new Custom_Post_Type_Permalinks;
 
 
 
407
  new Custom_Post_Type_Permalinks_Admin;
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Toro_Unit
3
  Tags: custom post type,permalink
4
  Requires at least: 3.2
5
  Tested up to: 3.3
6
- Stable tag: 0.7.5.2
7
 
8
  Lets you edit the permalink of custom post type.
9
 
@@ -32,25 +32,25 @@ That's it. You can access the permalinks setting by going to *Settings -> Permal
32
 
33
  == Changelog ==
34
 
35
- =0.7.5=
36
  * Add ability to disable to change custom taxonomy archive's permalink.
37
 
38
 
39
- =0.7.4=
40
  * Bug fix taxonomy rewrite.
41
 
42
 
43
- =0.7.3=
44
  * Changed part for saving the data.
45
 
46
- =0.7.2=
47
  * Reweite bug fix.
48
  * Prewview bug fix.
49
 
50
- =0.7.1=
51
  * Bug fix.
52
 
53
- =0.7=
54
  * Add %{taxonomy}% tag.
55
  * A large number of Bug Fix.
56
  * Change Setting Page. Use Setting API.
3
  Tags: custom post type,permalink
4
  Requires at least: 3.2
5
  Tested up to: 3.3
6
+ Stable tag: 0.7.5.6
7
 
8
  Lets you edit the permalink of custom post type.
9
 
32
 
33
  == Changelog ==
34
 
35
+ = 0.7.5 =
36
  * Add ability to disable to change custom taxonomy archive's permalink.
37
 
38
 
39
+ = 0.7.4 =
40
  * Bug fix taxonomy rewrite.
41
 
42
 
43
+ = 0.7.3 =
44
  * Changed part for saving the data.
45
 
46
+ = 0.7.2 =
47
  * Reweite bug fix.
48
  * Prewview bug fix.
49
 
50
+ = 0.7.1 =
51
  * Bug fix.
52
 
53
+ = 0.7 =
54
  * Add %{taxonomy}% tag.
55
  * A large number of Bug Fix.
56
  * Change Setting Page. Use Setting API.