404page – your smart custom 404 error page - Version 11.2.2

Version Description

notification compatibility

Download this release

Release Info

Developer petersplugins
Plugin Icon 128x128 404page – your smart custom 404 error page
Version 11.2.2
Comparing to
See all releases

Code changes from version 11.1.4 to 11.2.2

404page.php CHANGED
@@ -9,7 +9,7 @@
9
  * Plugin Name: 404page - your smart custom 404 error page
10
  * Plugin URI: https://petersplugins.com/404page/
11
  * Description: Custom 404 the easy way! Set any page as custom 404 error page. No coding needed. Works with (almost) every Theme.
12
- * Version: 11.1.4
13
  * Author: Peter Raschendorfer
14
  * Author URI: https://petersplugins.com
15
  * Text Domain: 404page
9
  * Plugin Name: 404page - your smart custom 404 error page
10
  * Plugin URI: https://petersplugins.com/404page/
11
  * Description: Custom 404 the easy way! Set any page as custom 404 error page. No coding needed. Works with (almost) every Theme.
12
+ * Version: 11.2.2
13
  * Author: Peter Raschendorfer
14
  * Author URI: https://petersplugins.com
15
  * Text Domain: 404page
inc/class-404page-admin.php CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'WPINC' ) ) {
15
  */
16
  if ( !class_exists( 'PP_404Page_Admin' ) ) {
17
 
18
- class PP_404Page_Admin extends PPF03_Admin {
19
 
20
 
21
  /**
@@ -76,6 +76,7 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
76
  array(
77
 
78
  'section' => 'general',
 
79
  'title' => esc_html__( 'General', '404page' ),
80
  'fields' => array(
81
  array(
@@ -89,6 +90,7 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
89
  array(
90
 
91
  'section' => 'advanced',
 
92
  'title' => esc_html__( 'Advanced', '404page' ),
93
  'fields' => array(
94
  array(
@@ -123,6 +125,7 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
123
  array(
124
 
125
  'section' => 'videos',
 
126
  'title' => esc_html__( 'Explainer Videos', '404page' ),
127
  'html' => $this->add_videos(),
128
  'nosubmit' => true
@@ -133,6 +136,8 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
133
 
134
  );
135
 
 
 
136
  }
137
 
138
 
@@ -194,7 +199,7 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
194
 
195
  }
196
 
197
- echo '</p>';
198
 
199
  }
200
 
@@ -214,7 +219,45 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
214
 
215
  }
216
 
217
- echo '</p>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
218
 
219
  }
220
 
@@ -249,7 +292,7 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
249
  esc_html__( 'Send an 404 error if the page is accessed directly by its URL', '404page' ),
250
  'settings_fire_404',
251
  false,
252
- '<span class="dashicons dashicons-info"></span>&nbsp;' . esc_html__( 'Uncheck this if you want the selected page to be accessible.', '404page' ) . ( function_exists( 'wpsupercache_activate' ) ? '<br /><span class="dashicons dashicons-warning"></span>&nbsp;<strong>' . esc_html__( 'WP Super Cache Plugin detected', '404page' ) . '</strong>. ' . __ ( 'If the page you selected as 404 error page is in cache, always a HTTP code 200 is sent. To avoid this and send a HTTP code 404 you have to exlcude this page from caching', '404page' ) . ' (<a href="' . admin_url( 'options-general.php?page=wpsupercache&tab=settings#rejecturi' ) . '">' . esc_html__( 'Click here', '404page' ) . '</a>).<br />(<a href="' . esc_url( 'https://petersplugins.com/' . $this->core()->get_plugin_slug() . '/manual/#wp_super_cache' ) . '">' . esc_html__( 'Read more', '404page' ) . '</a>)' : '' )
253
  );
254
 
255
  }
@@ -398,6 +441,8 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
398
  wp_enqueue_style( '404pagelity', $this->core()->get_asset_url( 'css', 'lity.min.css' ) );
399
  wp_enqueue_style( '404pagecss', $this->core()->get_asset_url( 'css', '404page-ui.css' ) );
400
 
 
 
401
  }
402
 
403
  }
@@ -413,6 +458,8 @@ if ( !class_exists( 'PP_404Page_Admin' ) ) {
413
 
414
  wp_enqueue_script( '404page-ui', $this->core()->get_asset_url( 'js', '404page-ui.js' ), 'jquery', $this->core()->get_plugin_version(), true );
415
  wp_enqueue_script( '404page-lity', $this->core()->get_asset_url( 'js', 'lity.min.js' ), 'jquery', $this->core()->get_plugin_version(), true );
 
 
416
 
417
  }
418
 
15
  */
16
  if ( !class_exists( 'PP_404Page_Admin' ) ) {
17
 
18
+ class PP_404Page_Admin extends PPF04_Admin {
19
 
20
 
21
  /**
76
  array(
77
 
78
  'section' => 'general',
79
+ 'order' => 10,
80
  'title' => esc_html__( 'General', '404page' ),
81
  'fields' => array(
82
  array(
90
  array(
91
 
92
  'section' => 'advanced',
93
+ 'order' => 20,
94
  'title' => esc_html__( 'Advanced', '404page' ),
95
  'fields' => array(
96
  array(
125
  array(
126
 
127
  'section' => 'videos',
128
+ 'order' => 100,
129
  'title' => esc_html__( 'Explainer Videos', '404page' ),
130
  'html' => $this->add_videos(),
131
  'nosubmit' => true
136
 
137
  );
138
 
139
+ do_action( '404page_addtional_setting_sections' );
140
+
141
  }
142
 
143
 
199
 
200
  }
201
 
202
+ echo '</p><br />';
203
 
204
  }
205
 
219
 
220
  }
221
 
222
+ echo '</p><br />';
223
+
224
+ }
225
+
226
+
227
+ // WP Super Cache
228
+ // since 11.2.0
229
+ if ( defined('WPCACHEHOME') ) {
230
+
231
+ global $cache_enabled;
232
+
233
+ // is caching active?
234
+ if ( $cache_enabled ) {
235
+
236
+ echo '<p class="pp-404page-info">';
237
+ echo esc_html__( 'WP Super Cache detected. All 404 errors are automatically excluded from caching.', '404page' );
238
+ echo '</p><br />';
239
+
240
+ }
241
+
242
+ }
243
+
244
+
245
+ // W3 Total Cache
246
+ // since 11.2.1
247
+ if ( defined( 'W3TC' ) ) {
248
+
249
+ if ( class_exists( 'W3TC\Dispatcher' ) ) {
250
+
251
+ // is caching active?
252
+ if ( W3TC\Dispatcher::config()->get_boolean( 'pgcache.enabled' ) ) {
253
+
254
+ echo '<p class="pp-404page-info">';
255
+ echo esc_html__( 'W3 Total Cache detected. All 404 errors are automatically excluded from caching.', '404page' );
256
+ echo '</p><br />';
257
+
258
+ }
259
+
260
+ }
261
 
262
  }
263
 
292
  esc_html__( 'Send an 404 error if the page is accessed directly by its URL', '404page' ),
293
  'settings_fire_404',
294
  false,
295
+ '<span class="dashicons dashicons-info"></span>&nbsp;' . esc_html__( 'Uncheck this if you want the selected page to be accessible.', '404page' )
296
  );
297
 
298
  }
441
  wp_enqueue_style( '404pagelity', $this->core()->get_asset_url( 'css', 'lity.min.css' ) );
442
  wp_enqueue_style( '404pagecss', $this->core()->get_asset_url( 'css', '404page-ui.css' ) );
443
 
444
+ do_action( '404page_enqueue_css' );
445
+
446
  }
447
 
448
  }
458
 
459
  wp_enqueue_script( '404page-ui', $this->core()->get_asset_url( 'js', '404page-ui.js' ), 'jquery', $this->core()->get_plugin_version(), true );
460
  wp_enqueue_script( '404page-lity', $this->core()->get_asset_url( 'js', 'lity.min.js' ), 'jquery', $this->core()->get_plugin_version(), true );
461
+
462
+ do_action( '404page_enqueue_js' );
463
 
464
  }
465
 
inc/class-404page-block-editor.php CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'WPINC' ) ) {
15
  */
16
  if ( !class_exists( 'PP_404Page_BlockEditor' ) ) {
17
 
18
- class PP_404Page_BlockEditor extends PPF03_SubClass {
19
 
20
  /**
21
  * Do Init
15
  */
16
  if ( !class_exists( 'PP_404Page_BlockEditor' ) ) {
17
 
18
+ class PP_404Page_BlockEditor extends PPF04_SubClass {
19
 
20
  /**
21
  * Do Init
inc/class-404page-classic-editor.php CHANGED
@@ -15,7 +15,7 @@ if ( ! defined( 'WPINC' ) ) {
15
  */
16
  if ( !class_exists( 'PP_404Page_ClassicEditor' ) ) {
17
 
18
- class PP_404Page_ClassicEditor extends PPF03_SubClass {
19
 
20
  /**
21
  * Do Init
15
  */
16
  if ( !class_exists( 'PP_404Page_ClassicEditor' ) ) {
17
 
18
+ class PP_404Page_ClassicEditor extends PPF04_SubClass {
19
 
20
  /**
21
  * Do Init
inc/class-404page-deprecated.php CHANGED
@@ -17,7 +17,7 @@ if ( ! defined( 'WPINC' ) ) {
17
  */
18
  if ( !class_exists( 'PP_404Page_Deprecated' ) ) {
19
 
20
- class PP_404Page_Deprecated extends PPF03_SubClass {
21
 
22
  /**
23
  * Do Init
17
  */
18
  if ( !class_exists( 'PP_404Page_Deprecated' ) ) {
19
 
20
+ class PP_404Page_Deprecated extends PPF04_SubClass {
21
 
22
  /**
23
  * Do Init
inc/class-404page-settings.php CHANGED
@@ -17,7 +17,7 @@ if ( ! defined( 'WPINC' ) ) {
17
  */
18
  if ( !class_exists( 'PP_404Page_Settings' ) ) {
19
 
20
- class PP_404Page_Settings extends PPF03_Settings {
21
 
22
  /**
23
  * sanitize settings
17
  */
18
  if ( !class_exists( 'PP_404Page_Settings' ) ) {
19
 
20
+ class PP_404Page_Settings extends PPF04_Settings {
21
 
22
  /**
23
  * sanitize settings
inc/class-404page.php CHANGED
@@ -23,7 +23,7 @@ if ( ! defined( 'PP_404' ) ) {
23
  if ( !class_exists( 'PP_404Page' ) ) {
24
 
25
 
26
- class PP_404Page extends PPF03_Plugin {
27
 
28
 
29
  /**
@@ -287,6 +287,8 @@ if ( !class_exists( 'PP_404Page' ) ) {
287
 
288
  if ( ! $this->is_native() ) {
289
 
 
 
290
  $wp_query = null;
291
  $wp_query = new WP_Query();
292
  $wp_query->query( 'page_id=' . $this->get_page_id() );
@@ -349,6 +351,8 @@ if ( !class_exists( 'PP_404Page' ) ) {
349
 
350
  remove_action( 'pre_get_posts', array ( $this, 'exclude_404page' ) );
351
  remove_filter( 'get_pages', array ( $this, 'remove_404page_from_array' ), 10, 2 );
 
 
352
 
353
  $wp_query = null;
354
  $wp_query = new WP_Query();
@@ -356,6 +360,7 @@ if ( !class_exists( 'PP_404Page' ) ) {
356
  // @since 8
357
  // added suppress_filters for compatibilty with current WPML version
358
  $wp_query->query( array( 'page_id' => $pageid, 'suppress_filters' => true ) );
 
359
 
360
  $wp_query->the_post();
361
  $this->template = get_page_template();
@@ -366,6 +371,8 @@ if ( !class_exists( 'PP_404Page' ) ) {
366
  add_filter( 'body_class', array( $this, 'add_404_body_class' ) );
367
  add_filter( 'template_include', array( $this, 'change_404_template' ), 999 );
368
 
 
 
369
  $this->maybe_force_404();
370
  $this->do_404page_action();
371
 
@@ -406,6 +413,46 @@ if ( !class_exists( 'PP_404Page' ) ) {
406
  return $posts;
407
  }
408
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
 
410
  /**
411
  * for DW Question & Answer plugin
@@ -1111,6 +1158,19 @@ if ( !class_exists( 'PP_404Page' ) ) {
1111
  }
1112
 
1113
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1114
  }
1115
 
1116
  }
23
  if ( !class_exists( 'PP_404Page' ) ) {
24
 
25
 
26
+ class PP_404Page extends PPF04_Plugin {
27
 
28
 
29
  /**
287
 
288
  if ( ! $this->is_native() ) {
289
 
290
+ $this->disable_caching();
291
+
292
  $wp_query = null;
293
  $wp_query = new WP_Query();
294
  $wp_query->query( 'page_id=' . $this->get_page_id() );
351
 
352
  remove_action( 'pre_get_posts', array ( $this, 'exclude_404page' ) );
353
  remove_filter( 'get_pages', array ( $this, 'remove_404page_from_array' ), 10, 2 );
354
+
355
+ $this->disable_caching();
356
 
357
  $wp_query = null;
358
  $wp_query = new WP_Query();
360
  // @since 8
361
  // added suppress_filters for compatibilty with current WPML version
362
  $wp_query->query( array( 'page_id' => $pageid, 'suppress_filters' => true ) );
363
+
364
 
365
  $wp_query->the_post();
366
  $this->template = get_page_template();
371
  add_filter( 'body_class', array( $this, 'add_404_body_class' ) );
372
  add_filter( 'template_include', array( $this, 'change_404_template' ), 999 );
373
 
374
+
375
+
376
  $this->maybe_force_404();
377
  $this->do_404page_action();
378
 
413
  return $posts;
414
  }
415
 
416
+ /**
417
+ * disable caching for known caching plugins
418
+ *
419
+ * @since 11.2.0
420
+ */
421
+ function disable_caching() {
422
+
423
+ // WP Super Cache
424
+ if ( defined( 'WPCACHEHOME' ) ) {
425
+
426
+ global $cache_enabled;
427
+
428
+ // is caching active?
429
+ if ( $cache_enabled ) {
430
+
431
+ define( 'DONOTCACHEPAGE', true );
432
+
433
+ }
434
+
435
+ }
436
+
437
+
438
+ // W3 Total Cache
439
+ if ( defined( 'W3TC' ) ) {
440
+
441
+ if ( class_exists( 'W3TC\Dispatcher' ) ) {
442
+
443
+ // is caching active?
444
+ if ( W3TC\Dispatcher::config()->get_boolean( 'pgcache.enabled' ) ) {
445
+
446
+ define( 'DONOTCACHEPAGE', true );
447
+
448
+ }
449
+
450
+ }
451
+
452
+ }
453
+
454
+ }
455
+
456
 
457
  /**
458
  * for DW Question & Answer plugin
1158
  }
1159
 
1160
 
1161
+ /**
1162
+ * get settings class
1163
+ *
1164
+ * @since 11.3.0
1165
+ * @access public
1166
+ * @return object
1167
+ */
1168
+ public function admin() {
1169
+
1170
+ return $this->admin;
1171
+ }
1172
+
1173
+
1174
  }
1175
 
1176
  }
inc/ppf/loader.php CHANGED
@@ -3,9 +3,9 @@
3
  /**
4
  * Plugin Foundation Loader
5
  *
6
- * Peter's Plugins Foundation 03
7
  *
8
- * @package PPF03
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
@@ -16,4 +16,6 @@ require_once ( __DIR__ . '/ppf-plugin.php' );
16
  require_once ( __DIR__ . '/ppf-settings.php' );
17
  require_once ( __DIR__ . '/ppf-admin.php' );
18
 
 
 
19
  ?>
3
  /**
4
  * Plugin Foundation Loader
5
  *
6
+ * Peter's Plugins Foundation 04
7
  *
8
+ * @package PPF04
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
16
  require_once ( __DIR__ . '/ppf-settings.php' );
17
  require_once ( __DIR__ . '/ppf-admin.php' );
18
 
19
+ require_once ( __DIR__ . '/ppf-plugin-addon.php' );
20
+
21
  ?>
inc/ppf/ppf-admin.php CHANGED
@@ -3,27 +3,39 @@
3
  /**
4
  * Admin Class
5
  *
6
- * Peter's Plugins Foundation 03
7
  *
8
- * @package PPF03
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
- if ( !class_exists( 'PPF03_Admin' ) ) {
14
 
15
 
16
- abstract class PPF03_Admin extends PPF03_SubClass {
17
 
18
 
19
  /**
20
  * settings sections
21
  *
22
  * @since PPF01
23
- * @var string
24
  * @access private
 
 
25
  */
26
- private $_sections;
 
 
 
 
 
 
 
 
 
 
27
 
28
 
29
  /**
@@ -46,7 +58,7 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
46
  * @access private
47
  */
48
  private $_my_screen_id;
49
-
50
 
51
  /**
52
  * add multiple setting sections
@@ -55,26 +67,72 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
55
  * @param array $sections array of setting sections to add
56
  * @access public
57
  * @see add_settings()
 
 
58
  */
59
  public function add_setting_sections( $sections ) {
60
 
61
- $this->_sections = $sections;
62
-
63
  foreach( $sections as $section ) {
64
 
65
- if ( array_key_exists( 'fields', $section ) ) {
 
 
66
 
67
- $this->add_settings( $section );
68
-
69
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
 
 
 
71
  }
72
 
73
- // Register the options
74
- // since PPF03 only if there is a settings class
75
- // so we can use the same function also if we don't need any settings
76
- if ( false !== $this->settings() ) {
77
- register_setting( $this->core()->get_plugin_slug(), $this->settings()->get_option_name(), array( 'sanitize_callback' => array( $this, 'sanitize_callback' ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  }
79
 
80
 
@@ -87,11 +145,14 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
87
  * @since PPF01
88
  * @param array $settings array of settings to add
89
  * string $section => ID of the section
 
 
90
  * string $title => title for section (used by print_setting_sections())
91
  * string $html => HTML code to add to this section
92
  * array $fields => multidimensional array of fields to add
93
  * string $key => key of the option array
94
  * string $callback => function to call
 
95
  * bool $nosubmit => this section should not show the submit button
96
  * @access private
97
  */
@@ -105,7 +166,18 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
105
 
106
  $field_id = $this->core()->get_plugin_slug() . '-' . $field['key'];
107
 
108
- add_settings_field( $field_id, '' , array( $this, $field['callback'] ), $this->core()->get_plugin_slug(), $section_id );
 
 
 
 
 
 
 
 
 
 
 
109
 
110
  }
111
 
@@ -375,6 +447,33 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
375
 
376
  }
377
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
378
  if ( get_current_screen()->parent_base != 'options-general' ) {
379
 
380
  // On Option Screens settings_errors() is called automatically
@@ -513,36 +612,52 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
513
  </div>
514
  </div>
515
  <p class="wp-clearfix"><a id="<?php echo $prefix; ?>-review-later" class="<?php echo $prefix; ?>-review-action" href="javascript:void(0);"><?php echo $content['button_later']; ?></a> <a id="<?php echo $prefix; ?>-review-close" class="<?php echo $prefix; ?>-review-action" href="javascript:void(0);"><?php echo $content['button_close']; ?></a></p>
516
-
517
- <style type="text/css">
518
- #<?php echo $prefix; ?>-review-step-like, #<?php echo $prefix; ?>-review-step-dislike {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
519
  display: none;
520
  }
521
- #<?php echo $prefix; ?>-review-later, #<?php echo $prefix; ?>-review-close, #<?php echo $prefix; ?>-review-later:before, #<?php echo $prefix; ?>-review-close:before {
522
  display: block;
523
  height: 20px;
524
  line-height: 20px;
525
  text-decoration: none;
526
  }
527
- #<?php echo $prefix; ?>-review-later, #<?php echo $prefix; ?>-review-close {
528
  float: left;
529
  position: relative;
530
  padding-left: 22px;
531
  }
532
- #<?php echo $prefix; ?>-review-later {
533
  margin-right: 12px;
534
  }
535
- #<?php echo $prefix; ?>-review-later:before, #<?php echo $prefix; ?>-review-close:before {
536
  font-family: dashicons;
537
  font-size: 20px;
538
  position: absolute;
539
  left: 0;
540
  top: 0;
541
  }
542
- #<?php echo $prefix; ?>-review-later:before {
543
  content: "\f508";
544
  }
545
- #<?php echo $prefix; ?>-review-close:before {
546
  content: "\f153";
547
  }
548
  </style>
@@ -550,36 +665,34 @@ if ( !class_exists( 'PPF03_Admin' ) ) {
550
  <script type="text/javascript">
551
  jQuery( function( $ ) {
552
 
553
- $( "#<?php echo $prefix; ?>-review-happy" ).click( function() {
554
- $( "#<?php echo $prefix; ?>-review-step-1" ).fadeOut( 400, function() {
555
- $( "#<?php echo $prefix; ?>-review-step-like" ).fadeIn();
556
  });
557
  } );
558
 
559
- $( "#<?php echo $prefix; ?>-review-unhappy" ).click( function() {
560
- $( "#<?php echo $prefix; ?>-review-step-1" ).fadeOut( 400, function() {
561
- $( "#<?php echo $prefix; ?>-review-step-dislike" ).fadeIn();
562
  });
563
  } );
564
 
565
- $( ".<?php echo $prefix; ?>-review-action" ).click( function() {
566
 
567
  $.post(
568
  ajaxurl, {
569
- action : "<?php echo $prefix; ?>-review-action",
570
  command : $(this).attr( "id" ),
571
- securekey : "<?php echo $nonce; ?>"
572
  }
573
  );
574
- $( "#<?php echo $prefix; ?>-review-notice" ).fadeOut();
575
 
576
  } );
577
 
578
  } );
579
- </script>
580
-
581
- </div>
582
- <?php
583
 
584
  } );
585
 
3
  /**
4
  * Admin Class
5
  *
6
+ * Peter's Plugins Foundation 04
7
  *
8
+ * @package PPF04
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
+ if ( !class_exists( 'PPF04_Admin' ) ) {
14
 
15
 
16
+ abstract class PPF04_Admin extends PPF04_SubClass {
17
 
18
 
19
  /**
20
  * settings sections
21
  *
22
  * @since PPF01
23
+ * @var array
24
  * @access private
25
+ *
26
+ * as of PPF04 we initialize an empty array
27
  */
28
+ private $_sections = array();
29
+
30
+
31
+ /**
32
+ * is setting registered?
33
+ *
34
+ * @since PPF04
35
+ * @var bool
36
+ * @access private
37
+ */
38
+ private $_settings_registered = false;
39
 
40
 
41
  /**
58
  * @access private
59
  */
60
  private $_my_screen_id;
61
+
62
 
63
  /**
64
  * add multiple setting sections
67
  * @param array $sections array of setting sections to add
68
  * @access public
69
  * @see add_settings()
70
+ *
71
+ * as of PPF04 we add the sections to the _sections array to allow adding more sections
72
  */
73
  public function add_setting_sections( $sections ) {
74
 
 
 
75
  foreach( $sections as $section ) {
76
 
77
+ // as of PPF04 we use add_setting_section()
78
+ $this->add_setting_section( $section );
79
+
80
 
81
+ }
82
+
83
+ // since PPF04
84
+ $this->maybe_register_setting();
85
+
86
+ }
87
+
88
+
89
+ /**
90
+ * add a single setting section
91
+ *
92
+ * @since PPF04
93
+ * @param array $sections setting section to add
94
+ * @access public
95
+ * @see add_settings()
96
+ */
97
+ public function add_setting_section( $section ) {
98
+
99
+ // as of PPF04 add sections to _sections array one by one
100
+ $this->_sections[] = $section;
101
+
102
+ if ( array_key_exists( 'fields', $section ) ) {
103
 
104
+ $this->add_settings( $section );
105
+
106
  }
107
 
108
+ $this->maybe_register_setting();
109
+
110
+ }
111
+
112
+
113
+ /**
114
+ * register the setting
115
+ *
116
+ * @since PPF04
117
+ * @access private
118
+ *
119
+ * was part of add_setting_sections() before PPF04
120
+ */
121
+ public function maybe_register_setting() {
122
+
123
+ if ( ! $this->_settings_registered ) {
124
+
125
+ // Register the options
126
+ // since PPF03 only if there is a settings class
127
+ // so we can use the same function also if we don't need any settings
128
+ if ( false !== $this->settings() ) {
129
+
130
+ register_setting( $this->core()->get_plugin_slug(), $this->settings()->get_option_name(), array( 'sanitize_callback' => array( $this, 'sanitize_callback' ) ) );
131
+
132
+ }
133
+
134
+ $this->_settings_registered = true;
135
+
136
  }
137
 
138
 
145
  * @since PPF01
146
  * @param array $settings array of settings to add
147
  * string $section => ID of the section
148
+ * int $order => sort order
149
+ * this was added in PPF04, so we check if it exists for backwards compatibility
150
  * string $title => title for section (used by print_setting_sections())
151
  * string $html => HTML code to add to this section
152
  * array $fields => multidimensional array of fields to add
153
  * string $key => key of the option array
154
  * string $callback => function to call
155
+ * as of PPF04 this can be an array to enable external callbacks
156
  * bool $nosubmit => this section should not show the submit button
157
  * @access private
158
  */
166
 
167
  $field_id = $this->core()->get_plugin_slug() . '-' . $field['key'];
168
 
169
+ // since PPF04
170
+ if ( is_array( $field['callback'] ) ) {
171
+
172
+ $callback = $field['callback'];
173
+
174
+ } else {
175
+
176
+ $callback = array( $this, $field['callback'] );
177
+
178
+ }
179
+
180
+ add_settings_field( $field_id, '' , $callback, $this->core()->get_plugin_slug(), $section_id );
181
 
182
  }
183
 
447
 
448
  }
449
 
450
+
451
+ // sort the sections
452
+
453
+ // see add_settings()
454
+ $sort = false;
455
+
456
+ foreach( $this->_sections as $section ) {
457
+
458
+ if ( array_key_exists( 'order', $section ) ) {
459
+
460
+ $sort = true;
461
+ break;
462
+
463
+ }
464
+ }
465
+
466
+ if ( $sort ) {
467
+
468
+ usort( $this->_sections, function( $a, $b ) {
469
+ return $a['order'] - $b['order'];
470
+
471
+ } );
472
+
473
+ }
474
+
475
+ // end of sort
476
+
477
  if ( get_current_screen()->parent_base != 'options-general' ) {
478
 
479
  // On Option Screens settings_errors() is called automatically
612
  </div>
613
  </div>
614
  <p class="wp-clearfix"><a id="<?php echo $prefix; ?>-review-later" class="<?php echo $prefix; ?>-review-action" href="javascript:void(0);"><?php echo $content['button_later']; ?></a> <a id="<?php echo $prefix; ?>-review-close" class="<?php echo $prefix; ?>-review-action" href="javascript:void(0);"><?php echo $content['button_close']; ?></a></p>
615
+ </div>
616
+ <?php
617
+
618
+ } );
619
+
620
+
621
+ // Since PPF04 we add CSS and JS to footer for compatibility reasons
622
+
623
+ add_action( 'admin_print_footer_scripts', function() use( $content, $links, $prefix, $nonce ) {
624
+
625
+ // show notice only on certain pages
626
+ // it's not possible to check this earlier, because we need the id of the current screen for that
627
+ if ( ! in_array( get_current_screen()->id, array( 'dashboard', 'themes', 'plugins', 'options-general' , $this->get_screen_id() ) ) ) {
628
+ return;
629
+ }
630
+
631
+ echo '
632
+ <style type="text/css">
633
+ #' . $prefix . '-review-step-like, #' . $prefix . '-review-step-dislike {
634
  display: none;
635
  }
636
+ #' . $prefix . 'review-later, #' . $prefix . '-review-close, #' . $prefix . '-review-later:before, #' . $prefix . '-review-close:before {
637
  display: block;
638
  height: 20px;
639
  line-height: 20px;
640
  text-decoration: none;
641
  }
642
+ #' . $prefix . '-review-later, #' . $prefix . '-review-close {
643
  float: left;
644
  position: relative;
645
  padding-left: 22px;
646
  }
647
+ #' . $prefix . '-review-later {
648
  margin-right: 12px;
649
  }
650
+ #' . $prefix . '-review-later:before, #' . $prefix . '-review-close:before {
651
  font-family: dashicons;
652
  font-size: 20px;
653
  position: absolute;
654
  left: 0;
655
  top: 0;
656
  }
657
+ #' . $prefix . '-review-later:before {
658
  content: "\f508";
659
  }
660
+ #' . $prefix . '-review-close:before {
661
  content: "\f153";
662
  }
663
  </style>
665
  <script type="text/javascript">
666
  jQuery( function( $ ) {
667
 
668
+ $( "#' . $prefix . '-review-happy" ).click( function() {
669
+ $( "#' . $prefix . '-review-step-1" ).fadeOut( 400, function() {
670
+ $( "#' . $prefix . '-review-step-like" ).fadeIn();
671
  });
672
  } );
673
 
674
+ $( "#' . $prefix . '-review-unhappy" ).click( function() {
675
+ $( "#' . $prefix . '-review-step-1" ).fadeOut( 400, function() {
676
+ $( "#' . $prefix . '-review-step-dislike" ).fadeIn();
677
  });
678
  } );
679
 
680
+ $( ".' . $prefix . '-review-action" ).click( function() {
681
 
682
  $.post(
683
  ajaxurl, {
684
+ action : "' . $prefix . '-review-action",
685
  command : $(this).attr( "id" ),
686
+ securekey : "' . $nonce .'"
687
  }
688
  );
689
+ $( "#' . $prefix . '-review-notice" ).fadeOut();
690
 
691
  } );
692
 
693
  } );
694
+ </script>';
695
+
 
 
696
 
697
  } );
698
 
inc/ppf/ppf-class.php CHANGED
@@ -3,9 +3,9 @@
3
  /**
4
  * Base Class
5
  *
6
- * Peter's Plugins Foundation 03
7
  *
8
- * @package PPF03
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
@@ -19,10 +19,10 @@
19
  }
20
 
21
 
22
- if ( !class_exists( 'PPF03_Class' ) ) {
23
 
24
 
25
- abstract class PPF03_Class {
26
 
27
 
28
  /**
3
  /**
4
  * Base Class
5
  *
6
+ * Peter's Plugins Foundation 04
7
  *
8
+ * @package PPF04
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
19
  }
20
 
21
 
22
+ if ( !class_exists( 'PPF04_Class' ) ) {
23
 
24
 
25
+ abstract class PPF04_Class {
26
 
27
 
28
  /**
inc/ppf/ppf-plugin-addon.php ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Plugin Addon Base Class
5
+ *
6
+ * Peter's Plugins Foundation 04
7
+ *
8
+ * @package PPF04
9
+ * @author Peter Raschendorfer
10
+ * @license GPL2+
11
+ */
12
+
13
+
14
+ if ( !class_exists( 'PPF04_Plugin_Addon' ) ) {
15
+
16
+ abstract class PPF04_Plugin_Addon extends PPF04_Plugin {
17
+
18
+ /**
19
+ * Base Plugin Name
20
+ *
21
+ * @since PPF04
22
+ * @var string
23
+ * @access protected
24
+ */
25
+ protected $base_plugin_name;
26
+
27
+
28
+ /**
29
+ * Base Plugin Function
30
+ *
31
+ * @since PPF04
32
+ * @var string
33
+ * @access protected
34
+ */
35
+ protected $base_plugin_function;
36
+
37
+
38
+ /**
39
+ * Base Plugin Min Required Version
40
+ *
41
+ * @since PPF04
42
+ * @var string
43
+ * @access protected
44
+ */
45
+ protected $base_plugin_min_version;
46
+
47
+
48
+ /**
49
+ * Init the Class
50
+ *
51
+ * @since PPF04
52
+ * same as PPFxx_Plugin plus
53
+ * @type string $base_plugin_name Name of Base Plugin
54
+ * @type string $base_plugin_function Function to access Base Plugin
55
+ * @type string $base_plugin_min_version Minimal required version of Base Plugin
56
+ */
57
+ public function __construct( $settings ) {
58
+
59
+ $this->plugin_file = $settings['file'];
60
+ $this->plugin_slug = $settings['slug'];
61
+ $this->plugin_name = $settings['name'];
62
+ $this->plugin_shortname = $settings['shortname'];
63
+ $this->plugin_version = $settings['version'];
64
+
65
+ $this->base_plugin_name = $settings['base_plugin_name'];
66
+ $this->base_plugin_function = $settings['base_plugin_function'];
67
+ $this->base_plugin_min_version = $settings['base_plugin_min_version'];
68
+
69
+ $this->_data_key = str_replace( '-', '_', $settings['slug'] ) . '_data';
70
+ $this->data_load();
71
+
72
+ $this->addon_check();
73
+
74
+ }
75
+
76
+
77
+ /**
78
+ * get Base Plugin Name
79
+ *
80
+ * @since PPF04
81
+ * @access public
82
+ * @return string
83
+ */
84
+ public function get_base_plugin_name() {
85
+
86
+ return $this->base_plugin_name;
87
+
88
+ }
89
+
90
+
91
+ /**
92
+ * get Base Plugin Function
93
+ *
94
+ * @since PPF04
95
+ * @access public
96
+ * @return string
97
+ */
98
+ public function get_base_plugin_function() {
99
+
100
+ return $this->base_plugin_function;
101
+
102
+ }
103
+
104
+
105
+ /**
106
+ * get Base Plugin minimum required version^
107
+ *
108
+ * @since PPF04
109
+ * @access public
110
+ * @return string
111
+ */
112
+ public function get_base_plugin_min_version() {
113
+
114
+ return $this->base_plugin_min_version;
115
+
116
+ }
117
+
118
+
119
+ /**
120
+ * check if base plugin exists and has required minimum version
121
+ *
122
+ * @since PPF04
123
+ * @access private
124
+ */
125
+ private function addon_check() {
126
+
127
+ // we need to place all the stuff in plugins_loaded to ensure the base plugin is loaded
128
+
129
+ add_action( 'plugins_loaded', function() {
130
+
131
+ $this->plugin_install_update();
132
+
133
+ $this->plugin_init();
134
+
135
+ if ( ! $this->base_exists() ) {
136
+
137
+ add_action('admin_notices', array( $this, 'admin_notice_base_plugin_not_found' ) );
138
+
139
+ } elseif ( version_compare( $this->get_base_plugin_min_version(), $this->call_base()->get_plugin_version(), '>' ) ) {
140
+
141
+ add_action('admin_notices', array( $this, 'admin_notice_base_plugin_version_insufficient' ) );
142
+
143
+ } else {
144
+
145
+ $this->addon_init();
146
+
147
+ }
148
+
149
+ } );
150
+
151
+
152
+ }
153
+
154
+
155
+ /**
156
+ * call base plugin
157
+ *
158
+ * @since PPF04
159
+ */
160
+ public function call_base() {
161
+
162
+ $base = $this->get_base_plugin_function();
163
+
164
+ if ( function_exists( $base ) ) {
165
+
166
+ return $base();
167
+
168
+ }
169
+
170
+ return false;
171
+
172
+ }
173
+
174
+
175
+ /**
176
+ * check if base function exists
177
+ *
178
+ * @since PPF04
179
+ */
180
+ public function base_exists() {
181
+
182
+ $base = $this->get_base_plugin_function();
183
+
184
+ if ( function_exists( $base ) ) {
185
+
186
+ return true;
187
+
188
+ }
189
+
190
+ return false;
191
+
192
+ }
193
+
194
+
195
+ /**
196
+ * addon init
197
+ *
198
+ * force to be defined
199
+ *
200
+ * @since PPF04
201
+ */
202
+ abstract public function addon_init();
203
+
204
+
205
+ /**
206
+ * add admin notice if base plugin not found
207
+ *
208
+ * force to be defined
209
+ *
210
+ * @since PPF04
211
+ */
212
+ abstract public function admin_notice_base_plugin_not_found();
213
+
214
+
215
+ /**
216
+ * add admin notice if base plugin version insufficient
217
+ *
218
+ * force to be defined
219
+ *
220
+ * @since PPF04
221
+ */
222
+ abstract public function admin_notice_base_plugin_version_insufficient();
223
+
224
+
225
+ }
226
+
227
+ }
228
+
229
+ ?>
inc/ppf/ppf-plugin.php CHANGED
@@ -3,17 +3,17 @@
3
  /**
4
  * Plugin Base Class
5
  *
6
- * Peter's Plugins Foundation 03
7
  *
8
- * @package PPF03
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
 
14
- if ( !class_exists( 'PPF03_Plugin' ) ) {
15
 
16
- abstract class PPF03_Plugin extends PPF03_Class {
17
 
18
  /**
19
  * Instances
@@ -32,9 +32,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
32
  *
33
  * @since PPF01
34
  * @var string
35
- * @access private
 
36
  */
37
- private $plugin_name;
38
 
39
 
40
  /**
@@ -42,9 +43,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
42
  *
43
  * @since PPF01
44
  * @var string
45
- * @access private
 
46
  */
47
- private $plugin_shortname;
48
 
49
 
50
  /**
@@ -52,9 +54,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
52
  *
53
  * @since PPF01
54
  * @var string
55
- * @access private
 
56
  */
57
- private $plugin_file;
58
 
59
 
60
  /**
@@ -62,9 +65,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
62
  *
63
  * @since PPF01
64
  * @var string
65
- * @access private
 
66
  */
67
- private $plugin_dir;
68
 
69
 
70
  /**
@@ -72,9 +76,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
72
  *
73
  * @since PPF01
74
  * @var string
75
- * @access private
 
76
  */
77
- private $plugin_slug;
78
 
79
 
80
  /**
@@ -82,9 +87,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
82
  *
83
  * @since PPF01
84
  * @var int
85
- * @access private
 
86
  */
87
- private $plugin_version;
88
 
89
 
90
  /**
@@ -92,9 +98,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
92
  *
93
  * @since PPF01
94
  * @var string
95
- * @access private
 
96
  */
97
- private $_data_key;
98
 
99
 
100
  /**
@@ -102,9 +109,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
102
  *
103
  * @since PPF01
104
  * @var array
105
- * @access private
 
106
  */
107
- private $_data;
108
 
109
 
110
  /**
@@ -112,9 +120,10 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
112
  *
113
  * @since PPF01
114
  * @var object
115
- * @access private
 
116
  */
117
- private $settings;
118
 
119
 
120
  /**
@@ -174,17 +183,16 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
174
  * }
175
  * @return singleton
176
  */
177
- final public static function getInstance( $settings )
178
- {
179
-
180
  $calledClass = get_called_class();
181
 
182
- if ( !isset( $_instances[$calledClass] ) )
183
  {
184
- $_instances[$calledClass] = new $calledClass( $settings );
185
  }
186
 
187
- return $_instances[$calledClass];
188
  }
189
 
190
 
@@ -402,9 +410,9 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
402
  * do plugin install or update
403
  *
404
  * @since PPF01
405
- * @access private
406
  */
407
- private function plugin_install_update() {
408
 
409
  $version = $this->data_get( 'current_version' );
410
 
@@ -475,7 +483,7 @@ if ( !class_exists( 'PPF03_Plugin' ) ) {
475
  */
476
  public function data_get( $key ) {
477
 
478
- if ( array_key_exists( $key, $this->_data ) ) {
479
 
480
  return $this->_data[$key];
481
 
3
  /**
4
  * Plugin Base Class
5
  *
6
+ * Peter's Plugins Foundation 04
7
  *
8
+ * @package PPF04
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
 
14
+ if ( !class_exists( 'PPF04_Plugin' ) ) {
15
 
16
+ abstract class PPF04_Plugin extends PPF04_Class {
17
 
18
  /**
19
  * Instances
32
  *
33
  * @since PPF01
34
  * @var string
35
+ * @access protected
36
+ * was private prior to PPF04
37
  */
38
+ protected $plugin_name;
39
 
40
 
41
  /**
43
  *
44
  * @since PPF01
45
  * @var string
46
+ * @access protected
47
+ * was private prior to PPF04
48
  */
49
+ protected $plugin_shortname;
50
 
51
 
52
  /**
54
  *
55
  * @since PPF01
56
  * @var string
57
+ * @access protected
58
+ * was private prior to PPF04
59
  */
60
+ protected $plugin_file;
61
 
62
 
63
  /**
65
  *
66
  * @since PPF01
67
  * @var string
68
+ * @access protected
69
+ * was private prior to PPF04
70
  */
71
+ protected $plugin_dir;
72
 
73
 
74
  /**
76
  *
77
  * @since PPF01
78
  * @var string
79
+ * @access protected
80
+ * was private prior to PPF04
81
  */
82
+ protected $plugin_slug;
83
 
84
 
85
  /**
87
  *
88
  * @since PPF01
89
  * @var int
90
+ * @access protected
91
+ * was private prior to PPF04
92
  */
93
+ protected $plugin_version;
94
 
95
 
96
  /**
98
  *
99
  * @since PPF01
100
  * @var string
101
+ * @access protected
102
+ * was private prior to PPF04
103
  */
104
+ protected $_data_key;
105
 
106
 
107
  /**
109
  *
110
  * @since PPF01
111
  * @var array
112
+ * @access protected
113
+ * was private prior to PPF04
114
  */
115
+ protected $_data;
116
 
117
 
118
  /**
120
  *
121
  * @since PPF01
122
  * @var object
123
+ * @access protected
124
+ * was private prior to PPF04
125
  */
126
+ protected $settings;
127
 
128
 
129
  /**
183
  * }
184
  * @return singleton
185
  */
186
+ final public static function getInstance( $settings ) {
187
+
 
188
  $calledClass = get_called_class();
189
 
190
+ if ( !isset( self::$_instances[$calledClass] ) )
191
  {
192
+ self::$_instances[$calledClass] = new $calledClass( $settings );
193
  }
194
 
195
+ return self::$_instances[$calledClass];
196
  }
197
 
198
 
410
  * do plugin install or update
411
  *
412
  * @since PPF01
413
+ * @access protected (since PPF04, was private before)
414
  */
415
+ protected function plugin_install_update() {
416
 
417
  $version = $this->data_get( 'current_version' );
418
 
483
  */
484
  public function data_get( $key ) {
485
 
486
+ if ( is_array( $this->_data ) && array_key_exists( $key, $this->_data ) ) {
487
 
488
  return $this->_data[$key];
489
 
inc/ppf/ppf-settings.php CHANGED
@@ -3,26 +3,27 @@
3
  /**
4
  * Settings Class
5
  *
6
- * Peter's Plugins Foundation 03
7
  *
8
- * @package PPF03
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
- if ( !class_exists( 'PPF03_Settings' ) ) {
14
 
15
 
16
- abstract class PPF03_Settings extends PPF03_SubClass {
17
 
18
  /**
19
  * name of settings in databse (meta_key)
20
  *
21
  * @since PPF01
22
  * @var string
23
- * @access private
 
24
  */
25
- private $_key;
26
 
27
 
28
  /**
@@ -30,9 +31,10 @@ if ( !class_exists( 'PPF03_Settings' ) ) {
30
  *
31
  * @since PPF01
32
  * @var array
33
- * @access private
 
34
  */
35
- private $_settings;
36
 
37
 
38
  /**
@@ -40,9 +42,10 @@ if ( !class_exists( 'PPF03_Settings' ) ) {
40
  *
41
  * @since PPF01
42
  * @var array
43
- * @access private
 
44
  */
45
- private $_defaults;
46
 
47
 
48
  /**
@@ -126,7 +129,16 @@ if ( !class_exists( 'PPF03_Settings' ) ) {
126
  */
127
  public function get( $key ) {
128
 
129
- return $this->_settings[$key];
 
 
 
 
 
 
 
 
 
130
 
131
  }
132
 
3
  /**
4
  * Settings Class
5
  *
6
+ * Peter's Plugins Foundation 04
7
  *
8
+ * @package PPF04
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
+ if ( !class_exists( 'PPF04_Settings' ) ) {
14
 
15
 
16
+ abstract class PPF04_Settings extends PPF04_SubClass {
17
 
18
  /**
19
  * name of settings in databse (meta_key)
20
  *
21
  * @since PPF01
22
  * @var string
23
+ * @access protected
24
+ * was private prior to PPF04
25
  */
26
+ protected $_key;
27
 
28
 
29
  /**
31
  *
32
  * @since PPF01
33
  * @var array
34
+ * @access protected
35
+ * was private prior to PPF04
36
  */
37
+ protected $_settings;
38
 
39
 
40
  /**
42
  *
43
  * @since PPF01
44
  * @var array
45
+ * @access protected
46
+ * was private prior to PPF04
47
  */
48
+ protected $_defaults;
49
 
50
 
51
  /**
129
  */
130
  public function get( $key ) {
131
 
132
+ // as of PPF04 we check if the key exists
133
+ if ( array_key_exists( $key, $this->_settings ) ) {
134
+
135
+ return $this->_settings[$key];
136
+
137
+ } else {
138
+
139
+ return null;
140
+
141
+ }
142
 
143
  }
144
 
inc/ppf/ppf-subclass.php CHANGED
@@ -3,26 +3,27 @@
3
  /**
4
  * Plugin Base Sub-Class
5
  *
6
- * Peter's Plugins Foundation 03
7
  *
8
- * @package PPF03
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
- if ( !class_exists( 'PPF03_SubClass' ) ) {
14
 
15
 
16
- abstract class PPF03_SubClass extends PPF03_Class {
17
 
18
  /**
19
  * reference to core class
20
  *
21
  * @since PPF01
22
  * @var object
23
- * @access private
 
24
  */
25
- private $_core;
26
 
27
 
28
  /**
@@ -30,9 +31,10 @@ if ( !class_exists( 'PPF03_SubClass' ) ) {
30
  *
31
  * @since PPF01
32
  * @var object
33
- * @access private
 
34
  */
35
- private $_settings;
36
 
37
 
38
  /**
3
  /**
4
  * Plugin Base Sub-Class
5
  *
6
+ * Peter's Plugins Foundation 04
7
  *
8
+ * @package PPF04
9
  * @author Peter Raschendorfer
10
  * @license GPL2+
11
  */
12
 
13
+ if ( !class_exists( 'PPF04_SubClass' ) ) {
14
 
15
 
16
+ abstract class PPF04_SubClass extends PPF04_Class {
17
 
18
  /**
19
  * reference to core class
20
  *
21
  * @since PPF01
22
  * @var object
23
+ * @access protected
24
+ * was private prior to PPF04
25
  */
26
+ protected $_core;
27
 
28
 
29
  /**
31
  *
32
  * @since PPF01
33
  * @var object
34
+ * @access protected
35
+ * was private prior to PPF04
36
  */
37
+ protected $_settings;
38
 
39
 
40
  /**
loader.php CHANGED
@@ -42,7 +42,7 @@ function pp_404page() {
42
  'slug' => pathinfo( dirname( __FILE__ ) . '/404page.php', PATHINFO_FILENAME ),
43
  'name' => '404page - your smart custom 404 error page',
44
  'shortname' => '404page',
45
- 'version' => '11.1.4'
46
  ) );
47
 
48
  }
42
  'slug' => pathinfo( dirname( __FILE__ ) . '/404page.php', PATHINFO_FILENAME ),
43
  'name' => '404page - your smart custom 404 error page',
44
  'shortname' => '404page',
45
+ 'version' => '11.2.2'
46
  ) );
47
 
48
  }
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: petersplugins
3
  Tags: page, 404, error, error page, 404 page, page not found, page not found error, 404 error page, missing, broken link, template, 404 link, seo, custom 404, custom 404 page, custom 404 error, custom 404 error page, customize 404, customize 404 page, customize 404 error page, classicpress
4
  Requires at least: 4.0
5
- Tested up to: 5.3
6
- Stable tag: 11.1.4
7
  Requires PHP: 5.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -75,7 +75,7 @@ The only requirement for this plugin is that you change the Permalink Structure
75
  * [Twenty Sixteen](https://wordpress.org/themes/twentysixteen/)
76
  * [Twenty Seventeen](https://wordpress.org/themes/twentyseventeen/)
77
  * [Twenty Nineteen](https://wordpress.org/themes/twentynineteen/)
78
- * [Twenty Twenty]
79
  * [Vantage](https://wordpress.org/themes/vantage/)
80
  * [Virtue](https://wordpress.org/themes/virtue/)
81
  * [Zerif Lite](http://themeisle.com/themes/zerif-lite/)
@@ -171,6 +171,16 @@ Please use the [Support Forum](https://wordpress.org/support/plugin/404page).
171
 
172
  == Changelog ==
173
 
 
 
 
 
 
 
 
 
 
 
174
  = 11.1.4 (2019-12-29) =
175
  * urgent bug fix for PPF03
176
 
@@ -338,6 +348,15 @@ Please use the [Support Forum](https://wordpress.org/support/plugin/404page).
338
 
339
  == Upgrade Notice ==
340
 
 
 
 
 
 
 
 
 
 
341
  = 11.1.4 =
342
  urgent bug fix for PPF03
343
 
2
  Contributors: petersplugins
3
  Tags: page, 404, error, error page, 404 page, page not found, page not found error, 404 error page, missing, broken link, template, 404 link, seo, custom 404, custom 404 page, custom 404 error, custom 404 error page, customize 404, customize 404 page, customize 404 error page, classicpress
4
  Requires at least: 4.0
5
+ Tested up to: 5.4
6
+ Stable tag: 11.2.2
7
  Requires PHP: 5.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
75
  * [Twenty Sixteen](https://wordpress.org/themes/twentysixteen/)
76
  * [Twenty Seventeen](https://wordpress.org/themes/twentyseventeen/)
77
  * [Twenty Nineteen](https://wordpress.org/themes/twentynineteen/)
78
+ * [Twenty Twenty](https://wordpress.org/themes/twentytwenty/)
79
  * [Vantage](https://wordpress.org/themes/vantage/)
80
  * [Virtue](https://wordpress.org/themes/virtue/)
81
  * [Zerif Lite](http://themeisle.com/themes/zerif-lite/)
171
 
172
  == Changelog ==
173
 
174
+ = 11.2.2 (2020-03-28) =
175
+ * changes to the notification for hopefully better compatibility
176
+ * Plugin Foundation swtiched to PPF04
177
+
178
+ = 11.2.1 (2020-01-04) =
179
+ * if W3 Total Cache is installed and caching is active URLs that result in an 404 error are automatically excluded from caching
180
+
181
+ = 11.2.0 (2020-01-01) =
182
+ * if WP Super Cache is installed and caching is active URLs that result in an 404 error are automatically excluded from caching
183
+
184
  = 11.1.4 (2019-12-29) =
185
  * urgent bug fix for PPF03
186
 
348
 
349
  == Upgrade Notice ==
350
 
351
+ = 11.2.2 =
352
+ notification compatibility
353
+
354
+ = 11.2.1 =
355
+ if W3 Total Cache is installed and caching is active URLs that result in an 404 error are automatically excluded from caching
356
+
357
+ = 11.2.0 =
358
+ if WP Super Cache is installed and caching is active URLs that result in an 404 error are automatically excluded from caching
359
+
360
  = 11.1.4 =
361
  urgent bug fix for PPF03
362