Version Description
Enhanced compatibility. Automated Operating Method select removed. Several fixes.
Download this release
Release Info
Developer | smartware.cc |
Plugin | 404page – your smart custom 404 error page |
Version | 2.2 |
Comparing to | |
See all releases |
Code changes from version 2.1 to 2.2
- 404page.php +228 -150
- pluginicon.png +0 -0
- readme.txt +51 -22
404page.php
CHANGED
@@ -1,35 +1,23 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: 404page - your smart custom 404 error page
|
4 |
-
Plugin URI: http://
|
5 |
Description: Custom 404 the easy way! Set any page as custom 404 error page. No coding needed. Works with (almost) every Theme.
|
6 |
-
Version: 2.
|
7 |
-
Author:
|
8 |
-
Author URI: http://
|
9 |
Text Domain: 404page
|
10 |
-
License: GPL2
|
|
|
11 |
*/
|
12 |
|
13 |
-
/* Copyright 2016 Peter Raschendorfer (email : sw@smartware.cc)
|
14 |
-
|
15 |
-
This program is free software; you can redistribute it and/or modify
|
16 |
-
it under the terms of the GNU General Public License, version 2, as
|
17 |
-
published by the Free Software Foundation.
|
18 |
-
|
19 |
-
This program is distributed in the hope that it will be useful,
|
20 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
21 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
22 |
-
GNU General Public License for more details.
|
23 |
-
|
24 |
-
You should have received a copy of the GNU General Public License
|
25 |
-
along with this program; if not, write to the Free Software
|
26 |
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
27 |
-
*/
|
28 |
|
29 |
if ( ! defined( 'WPINC' ) ) {
|
30 |
die;
|
31 |
}
|
32 |
|
|
|
|
|
33 |
class Smart404Page {
|
34 |
public $plugin_name;
|
35 |
public $plugin_slug;
|
@@ -44,7 +32,7 @@ class Smart404Page {
|
|
44 |
public function __construct() {
|
45 |
$this->plugin_name = '404page';
|
46 |
$this->plugin_slug = '404page';
|
47 |
-
$this->version = '2.
|
48 |
$this->get_settings();
|
49 |
$this->init();
|
50 |
}
|
@@ -55,17 +43,20 @@ class Smart404Page {
|
|
55 |
$this->settings['404page_page_id'] = $this->get_404page_id();
|
56 |
$this->settings['404page_hide'] = $this->get_404page_hide();
|
57 |
$this->settings['404page_fire_error'] = $this->get_404page_fire_error();
|
58 |
-
$this->settings['404page_method'] = $this->get_404page_method();
|
|
|
59 |
}
|
60 |
|
61 |
// do plugin init
|
62 |
private function init() {
|
63 |
|
64 |
-
|
|
|
65 |
|
66 |
if ( !is_admin() ) {
|
67 |
|
68 |
-
add_action( '
|
|
|
69 |
|
70 |
} else {
|
71 |
|
@@ -78,11 +69,6 @@ class Smart404Page {
|
|
78 |
add_action( 'pre_get_posts' ,array ( $this, 'exclude_404page' ) );
|
79 |
}
|
80 |
|
81 |
-
if ( 'NOT_DISMISSED' == get_option( '404page_notice_dismissed', 'NOT_DISMISSED' ) ) {
|
82 |
-
add_action( 'admin_notices', array( $this, 'admin_notice' ) );
|
83 |
-
add_action( 'wp_ajax_nopriv_404page_dismiss_admin_notice', array( $this, 'dismiss_admin_notice' ) );
|
84 |
-
add_action( 'wp_ajax_404page_dismiss_admin_notice', array( $this, 'dismiss_admin_notice' ) );
|
85 |
-
}
|
86 |
}
|
87 |
|
88 |
}
|
@@ -90,30 +76,33 @@ class Smart404Page {
|
|
90 |
// init filters
|
91 |
function set_mode() {
|
92 |
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
|
|
|
|
|
105 |
// Compatibility Mode
|
106 |
add_filter( 'posts_results', array( $this, 'show404_compatiblity_mode' ), 999 );
|
107 |
-
|
108 |
} else {
|
109 |
-
|
110 |
// Standard Mode
|
111 |
add_filter( '404_template', array( $this, 'show404_standard_mode' ), 999 );
|
112 |
if ( $this->settings['404page_fire_error'] ) {
|
113 |
add_action( 'template_redirect', array( $this, 'do_404_header_standard_mode' ) );
|
114 |
}
|
115 |
-
|
116 |
}
|
|
|
117 |
}
|
118 |
|
119 |
}
|
@@ -124,13 +113,15 @@ class Smart404Page {
|
|
124 |
global $wp_query;
|
125 |
$pageid = $this->settings['404page_page_id'];
|
126 |
if ( $pageid > 0 ) {
|
127 |
-
$
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
|
|
|
|
134 |
$this->do_404page_action();
|
135 |
}
|
136 |
return $template;
|
@@ -144,23 +135,11 @@ class Smart404Page {
|
|
144 |
remove_filter( 'posts_results', array( $this, 'show404_compatiblity_mode' ), 999 );
|
145 |
|
146 |
$pageid = $this->settings['404page_page_id'];
|
147 |
-
if ( 0
|
148 |
-
if ( empty( $posts ) && is_main_query() && !is_robots() && !is_home() && !is_feed() && !is_search() &&( !defined('DOING_AJAX') || !DOING_AJAX ) ) {
|
149 |
// we need to get the 404 page
|
150 |
|
151 |
-
|
152 |
-
|
153 |
-
// WPML is active
|
154 |
-
$pageid = apply_filters( 'wpml_object_id', $pageid, 'page', true );
|
155 |
-
|
156 |
-
} elseif ( defined( 'POLYLANG_VERSION' ) ) {
|
157 |
-
|
158 |
-
// Polylang is active
|
159 |
-
$translatedpageid = pll_get_post( $pageid );
|
160 |
-
if ( !empty( $translatedpageid ) && 'publish' == get_post_status( $translatedpageid ) ) {
|
161 |
-
$pageid = $translatedpageid;
|
162 |
-
}
|
163 |
-
}
|
164 |
|
165 |
// as of v2.1 we do not alter the posts argument here because this does not work with SiteOrigin's Page Builder Plugin, template_include filter introduced
|
166 |
$this->postid = $pageid;
|
@@ -170,6 +149,7 @@ class Smart404Page {
|
|
170 |
}
|
171 |
add_action( 'wp', array( $this, 'do_404_header' ) );
|
172 |
add_filter( 'body_class', array( $this, 'add_404_body_class' ) );
|
|
|
173 |
|
174 |
$posts[] = get_post( $pageid );
|
175 |
|
@@ -204,10 +184,21 @@ class Smart404Page {
|
|
204 |
}
|
205 |
|
206 |
}
|
|
|
|
|
207 |
}
|
208 |
return $posts;
|
209 |
}
|
210 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
// send a 404 HTTP header - Standard Mode
|
212 |
function do_404_header_standard_mode() {
|
213 |
if ( is_page() && get_the_ID() == $this->settings['404page_page_id'] && !is_404() ) {
|
@@ -233,25 +224,37 @@ class Smart404Page {
|
|
233 |
|
234 |
// show title - Customizr Compatibility Mode
|
235 |
function show404title_customizr_mode( $title ) {
|
236 |
-
|
|
|
|
|
|
|
|
|
237 |
}
|
238 |
|
239 |
// show content - Customizr Compatibility Mode
|
240 |
function show404_customizr_mode( $content ) {
|
241 |
-
|
|
|
|
|
|
|
|
|
242 |
$this->do_404page_action();
|
243 |
}
|
244 |
|
245 |
// change article selectors - Customizr Compatibility Mode
|
246 |
function show404articleselectors_customizr_mode( $selectors ) {
|
247 |
-
|
|
|
|
|
|
|
|
|
248 |
}
|
249 |
|
250 |
// init the admin section
|
251 |
function admin_init() {
|
252 |
$this->wp_url = 'https://wordpress.org/plugins/' . $this->plugin_slug;
|
253 |
-
$this->my_url = 'http://
|
254 |
-
$this->dc_url = 'http://
|
255 |
load_plugin_textdomain( '404page' );
|
256 |
add_settings_section( '404page-settings', null, null, '404page_settings_section' );
|
257 |
register_setting( '404page_settings', '404page_page_id' );
|
@@ -304,41 +307,66 @@ class Smart404Page {
|
|
304 |
|
305 |
// handle the settings field method
|
306 |
function admin_method() {
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
echo '<p><input type="radio" id="404page_settings_method_compatibility" name="404page_method" value="CMP"' . checked( 'CMP', $this->settings['404page_method'], false ) . $dis . '/>';
|
316 |
-
echo '<label for="404page_settings_method_compatibility">' . __( 'Compatibility Mode', '404page' ) . '</label></p>';
|
317 |
|
318 |
-
if ( defined( 'CUSTOMIZR_VER' ) ) {
|
319 |
-
echo '<p><span class="dashicons dashicons-warning"></span> ' . __( 'Customizr Theme detected. The 404page Plugin works in Customizr Compatibility Mode.', '404page' ) . ' (<a href="' . $this->dc_url . '/#customizr_mode">' . __( 'Read more', '404page' ) . '</a>)</p>';
|
320 |
} elseif ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
321 |
-
|
|
|
|
|
322 |
} elseif ( defined( 'POLYLANG_VERSION' ) ) {
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
} elseif ( class_exists( 'bbPress' ) ) {
|
327 |
-
echo '<p><span class="dashicons dashicons-warning"></span> ' . __( 'bbPress Plugin detected. Operating Method set to Compatibility Mode automatically.', '404page' ) . ' (<a href="' . $this->dc_url . '/#compatibilty_mode">' . __( 'Read more', '404page' ) . '</a>)</p>';
|
328 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
329 |
echo '<p><span class="dashicons dashicons-info"></span> ' . __( 'Standard Mode uses the WordPress Template System and should work in most cases. If the 404page plugin does not work properly, probably you are using a theme or plugin that modifies the WordPress Template System. In this case the Compatibility Mode maybe can fix the problem, although it cannot be guaranteed that every possible configuration can be handled by Compatibility Mode. Standard Mode is the recommended method, only switch to Compatibility Mode if you have any problems.', '404page' ) . '</p>';
|
|
|
330 |
}
|
|
|
331 |
}
|
332 |
|
333 |
// this function hides the selected page from the list of pages
|
334 |
function exclude_404page( $query ) {
|
335 |
-
|
336 |
-
|
337 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
}
|
339 |
return $query;
|
340 |
}
|
341 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
342 |
// adds the options page to admin menu
|
343 |
function admin_menu() {
|
344 |
$page_handle = add_theme_page ( __( '404 Error Page', "404page" ), __( '404 Error Page', '404page' ), 'manage_options', '404pagesettings', array( $this, 'admin_page' ) );
|
@@ -358,7 +386,7 @@ class Smart404Page {
|
|
358 |
?>
|
359 |
<div class="wrap">
|
360 |
<?php screen_icon(); ?>
|
361 |
-
<h2 style="min-height: 32px; line-height: 32px; padding-left: 40px; background-image: url(<?php echo plugins_url( 'pluginicon.png', __FILE__ ); ?>); background-repeat: no-repeat; background-position: left center"><a href="
|
362 |
<?php settings_errors(); ?>
|
363 |
<hr />
|
364 |
<p>Plugin Version: <?php echo $this->version; ?> <a class="dashicons dashicons-editor-help" href="<?php echo $this->wp_url; ?>/changelog/"></a></p>
|
@@ -387,57 +415,6 @@ class Smart404Page {
|
|
387 |
<?php
|
388 |
}
|
389 |
|
390 |
-
// show a dismissible notice
|
391 |
-
function admin_notice() {
|
392 |
-
if ( current_user_can( 'manage_options' ) ) {
|
393 |
-
echo '<div class="notice notice-info is-dismissible" id="404page_admin_notice"><p><strong>404page Plugin:</strong> ';
|
394 |
-
if ( defined( 'CUSTOMIZR_VER' ) ) {
|
395 |
-
// Customizr Theme
|
396 |
-
_e( 'Customizr Theme detected. The 404page Plugin works in Customizr Compatibility Mode.', '404page' );
|
397 |
-
} elseif ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
398 |
-
// WPML
|
399 |
-
_e( 'WPML Plugin detected. Operating Method is set to Compatibility Mode automatically to make the 404page Plugin work with WPML.', '404page' );
|
400 |
-
} elseif ( defined( 'POLYLANG_VERSION' ) ) {
|
401 |
-
// Polylang
|
402 |
-
_e( 'Polylang Plugin detected. Operating Method is set to Compatibility Mode automatically to make the 404page Plugin work with Polylang.', '404page' );
|
403 |
-
} elseif ( defined( 'SITEORIGIN_PANELS_VERSION' ) ) {
|
404 |
-
// Page Builder by SiteOrigin
|
405 |
-
_e( 'Page Builder by SiteOrigin Plugin detected. Operating Method is set to Compatibility Mode automatically to make the 404page Plugin work with Page Builder by SiteOrigin.', '404page' );
|
406 |
-
} elseif ( class_exists( 'bbPress' ) ) {
|
407 |
-
// bbPress
|
408 |
-
_e( 'bbPress Plugin detected. Operating Method is set to Compatibility Mode automatically to make the 404page Plugin work with bbPress.', '404page' );
|
409 |
-
} elseif ( function_exists( 'wpsupercache_activate' ) ) {
|
410 |
-
// WP Super Cache
|
411 |
-
_e( 'WP Super Cache Plugin detected. Please check Settings!', '404page' );
|
412 |
-
} else {
|
413 |
-
_e( 'Please check Operating Method.', '404page' );
|
414 |
-
}
|
415 |
-
echo '<br /><a href="' . admin_url( 'themes.php?page=404pagesettings' ) . '">' . __( 'Settings', '404page' ) . '</a>';
|
416 |
-
echo '</p></div>';
|
417 |
-
}
|
418 |
-
}
|
419 |
-
|
420 |
-
// dismiss the notice (AJAX)
|
421 |
-
function dismiss_admin_notice() {
|
422 |
-
update_option( '404page_notice_dismissed', 'DISMISSED' );
|
423 |
-
}
|
424 |
-
|
425 |
-
// Reset dismiss state for notice on plugin activation
|
426 |
-
function init_admin_notice( $network_wide ) {
|
427 |
-
global $wpdb;
|
428 |
-
if ( is_multisite() && $network_wide ) {
|
429 |
-
$current_blog = $wpdb->blogid;
|
430 |
-
$blog_ids = $wpdb->get_col( "SELECT blog_id FROM $wpdb->blogs" );
|
431 |
-
foreach ( $blog_ids as $blog_id ) {
|
432 |
-
switch_to_blog( $blog_id );
|
433 |
-
delete_option( '404page_notice_dismissed' );
|
434 |
-
}
|
435 |
-
switch_to_blog( $current_blog );
|
436 |
-
} else {
|
437 |
-
delete_option( '404page_notice_dismissed' );
|
438 |
-
}
|
439 |
-
}
|
440 |
-
|
441 |
// returns the id of the 404 page if one is defined, returns 0 if none is defined, returns -1 if the defined page id does not exist
|
442 |
private function get_404page_id() {
|
443 |
$pageid = get_option( '404page_page_id', 0 );
|
@@ -452,8 +429,8 @@ class Smart404Page {
|
|
452 |
|
453 |
// returns the selected method
|
454 |
private function get_404page_method() {
|
455 |
-
if ( defined( 'ICL_SITEPRESS_VERSION' ) || defined( 'POLYLANG_VERSION' )
|
456 |
-
// WPML or
|
457 |
return 'CMP';
|
458 |
} else {
|
459 |
return get_option( '404page_method', 'STD' );
|
@@ -470,6 +447,28 @@ class Smart404Page {
|
|
470 |
return (bool)get_option( '404page_fire_error', true );
|
471 |
}
|
472 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
473 |
// make plugin expandable
|
474 |
function do_404page_action() {
|
475 |
do_action( '404page_after_404' );
|
@@ -486,9 +485,9 @@ class Smart404Page {
|
|
486 |
<ul>
|
487 |
<li><div class="dashicons dashicons-wordpress"></div> <a href="<?php echo $this->wp_url; ?>/"><?php _e( 'Please rate the plugin', '404page' ); ?></a></li>
|
488 |
<li><div class="dashicons dashicons-admin-home"></div> <a href="<?php echo $this->my_url; ?>/"><?php _e( 'Plugin homepage', '404page'); ?></a></li>
|
489 |
-
<li><div class="dashicons dashicons-admin-home"></div> <a href="http://
|
490 |
-
<li><div class="dashicons dashicons-googleplus"></div> <a href="http://g.
|
491 |
-
<li><div class="dashicons dashicons-facebook-alt"></div> <a href="http://f.
|
492 |
</ul>
|
493 |
</div>
|
494 |
</div>
|
@@ -499,7 +498,7 @@ class Smart404Page {
|
|
499 |
<li><div class="dashicons dashicons-book-alt"></div> <a href="<?php echo $this->dc_url; ?>"><?php _e( 'Take a look at the Plugin Doc', '404page' ); ?></a></li>
|
500 |
<li><div class="dashicons dashicons-wordpress"></div> <a href="<?php echo $this->wp_url; ?>/faq/"><?php _e( 'Take a look at the FAQ section', '404page' ); ?></a></li>
|
501 |
<li><div class="dashicons dashicons-wordpress"></div> <a href="http://wordpress.org/support/plugin/<?php echo $this->plugin_slug; ?>/"><?php _e( 'Take a look at the Support section', '404page'); ?></a></li>
|
502 |
-
<li><div class="dashicons dashicons-admin-comments"></div> <a href="http://
|
503 |
</ul>
|
504 |
</div>
|
505 |
</div>
|
@@ -547,8 +546,87 @@ class Smart404Page {
|
|
547 |
delete_option( $key );
|
548 |
}
|
549 |
}
|
550 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
551 |
}
|
552 |
|
553 |
$smart404page = new Smart404Page();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
554 |
?>
|
1 |
<?php
|
2 |
/*
|
3 |
Plugin Name: 404page - your smart custom 404 error page
|
4 |
+
Plugin URI: http://petersplugins.com/free-wordpress-plugins/404page/
|
5 |
Description: Custom 404 the easy way! Set any page as custom 404 error page. No coding needed. Works with (almost) every Theme.
|
6 |
+
Version: 2.2
|
7 |
+
Author: Peter's Plugins, smartware.cc
|
8 |
+
Author URI: http://petersplugins.com
|
9 |
Text Domain: 404page
|
10 |
+
License: GPL2+
|
11 |
+
License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
12 |
*/
|
13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
|
15 |
if ( ! defined( 'WPINC' ) ) {
|
16 |
die;
|
17 |
}
|
18 |
|
19 |
+
define( 'PP_404', true );
|
20 |
+
|
21 |
class Smart404Page {
|
22 |
public $plugin_name;
|
23 |
public $plugin_slug;
|
32 |
public function __construct() {
|
33 |
$this->plugin_name = '404page';
|
34 |
$this->plugin_slug = '404page';
|
35 |
+
$this->version = '2.2';
|
36 |
$this->get_settings();
|
37 |
$this->init();
|
38 |
}
|
43 |
$this->settings['404page_page_id'] = $this->get_404page_id();
|
44 |
$this->settings['404page_hide'] = $this->get_404page_hide();
|
45 |
$this->settings['404page_fire_error'] = $this->get_404page_fire_error();
|
46 |
+
// $this->settings['404page_method'] = $this->get_404page_method(); --> moved to set_mode in v 2.2 because this may be too early here
|
47 |
+
$this->settings['404page_native'] = false;
|
48 |
}
|
49 |
|
50 |
// do plugin init
|
51 |
private function init() {
|
52 |
|
53 |
+
// as of v 2.2 always call set_mode
|
54 |
+
add_action( 'init', array( $this, 'set_mode' ) );
|
55 |
|
56 |
if ( !is_admin() ) {
|
57 |
|
58 |
+
add_action( 'pre_get_posts', array ( $this, 'exclude_404page' ) );
|
59 |
+
add_filter( 'get_pages', array ( $this, 'remove_404page_from_array' ), 10, 2 );
|
60 |
|
61 |
} else {
|
62 |
|
69 |
add_action( 'pre_get_posts' ,array ( $this, 'exclude_404page' ) );
|
70 |
}
|
71 |
|
|
|
|
|
|
|
|
|
|
|
72 |
}
|
73 |
|
74 |
}
|
76 |
// init filters
|
77 |
function set_mode() {
|
78 |
|
79 |
+
$this->settings['404page_method'] = $this->get_404page_method();
|
80 |
+
|
81 |
+
if ( !is_admin() ) {
|
82 |
+
|
83 |
+
if ( defined( 'CUSTOMIZR_VER' ) ) {
|
84 |
+
|
85 |
+
// Customizr Compatibility Mode
|
86 |
+
|
87 |
+
add_filter( 'tc_404_header_content', array( $this, 'show404title_customizr_mode' ), 999 );
|
88 |
+
add_filter( 'tc_404_content', array( $this, 'show404_customizr_mode' ), 999 );
|
89 |
+
add_filter( 'tc_404_selectors', array( $this, 'show404articleselectors_customizr_mode' ), 999 );
|
90 |
|
91 |
+
} elseif ( $this->settings['404page_method'] != 'STD' ) {
|
92 |
+
|
93 |
// Compatibility Mode
|
94 |
add_filter( 'posts_results', array( $this, 'show404_compatiblity_mode' ), 999 );
|
95 |
+
|
96 |
} else {
|
97 |
+
|
98 |
// Standard Mode
|
99 |
add_filter( '404_template', array( $this, 'show404_standard_mode' ), 999 );
|
100 |
if ( $this->settings['404page_fire_error'] ) {
|
101 |
add_action( 'template_redirect', array( $this, 'do_404_header_standard_mode' ) );
|
102 |
}
|
103 |
+
|
104 |
}
|
105 |
+
|
106 |
}
|
107 |
|
108 |
}
|
113 |
global $wp_query;
|
114 |
$pageid = $this->settings['404page_page_id'];
|
115 |
if ( $pageid > 0 ) {
|
116 |
+
if ( ! $this->settings['404page_native'] ) {
|
117 |
+
$wp_query = null;
|
118 |
+
$wp_query = new WP_Query();
|
119 |
+
$wp_query->query( 'page_id=' . $pageid );
|
120 |
+
$wp_query->the_post();
|
121 |
+
$template = get_page_template();
|
122 |
+
rewind_posts();
|
123 |
+
add_filter( 'body_class', array( $this, 'add_404_body_class' ) );
|
124 |
+
}
|
125 |
$this->do_404page_action();
|
126 |
}
|
127 |
return $template;
|
135 |
remove_filter( 'posts_results', array( $this, 'show404_compatiblity_mode' ), 999 );
|
136 |
|
137 |
$pageid = $this->settings['404page_page_id'];
|
138 |
+
if ( $pageid > 0 && ! $this->settings['404page_native'] ) {
|
139 |
+
if ( empty( $posts ) && is_main_query() && !is_robots() && !is_home() && !is_feed() && !is_search() && !is_archive() && ( !defined('DOING_AJAX') || !DOING_AJAX ) ) {
|
140 |
// we need to get the 404 page
|
141 |
|
142 |
+
$pageid = $this->get_page_id( $pageid );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
|
144 |
// as of v2.1 we do not alter the posts argument here because this does not work with SiteOrigin's Page Builder Plugin, template_include filter introduced
|
145 |
$this->postid = $pageid;
|
149 |
}
|
150 |
add_action( 'wp', array( $this, 'do_404_header' ) );
|
151 |
add_filter( 'body_class', array( $this, 'add_404_body_class' ) );
|
152 |
+
add_filter( 'template_include', array( $this, 'change_404_template' ), 999 );
|
153 |
|
154 |
$posts[] = get_post( $pageid );
|
155 |
|
184 |
}
|
185 |
|
186 |
}
|
187 |
+
} elseif ( $pageid > 0 && $this->settings['404page_native'] ) {
|
188 |
+
$this->do_404page_action();
|
189 |
}
|
190 |
return $posts;
|
191 |
}
|
192 |
|
193 |
+
// this function overrides the page template in compatibilty mode
|
194 |
+
function change_404_template( $template ) {
|
195 |
+
// we have to check if the template file is there because if the theme was changed maybe a wrong template is stored in the database
|
196 |
+
if ( file_exists( $this->template ) || '' != locate_template( $this->template ) ) {
|
197 |
+
return $this->template;
|
198 |
+
}
|
199 |
+
return $template;
|
200 |
+
}
|
201 |
+
|
202 |
// send a 404 HTTP header - Standard Mode
|
203 |
function do_404_header_standard_mode() {
|
204 |
if ( is_page() && get_the_ID() == $this->settings['404page_page_id'] && !is_404() ) {
|
224 |
|
225 |
// show title - Customizr Compatibility Mode
|
226 |
function show404title_customizr_mode( $title ) {
|
227 |
+
if ( ! $this->settings['404page_native'] ) {
|
228 |
+
return '<h1 class="entry-title">' . get_the_title( $this->settings['404page_page_id'] ) . '</h1>';
|
229 |
+
} else {
|
230 |
+
return $title;
|
231 |
+
}
|
232 |
}
|
233 |
|
234 |
// show content - Customizr Compatibility Mode
|
235 |
function show404_customizr_mode( $content ) {
|
236 |
+
if ( ! $this->settings['404page_native'] ) {
|
237 |
+
return '<div class="entry-content">' . apply_filters( 'the_content', get_post_field( 'post_content', $this->settings['404page_page_id'] ) ) . '</div>';
|
238 |
+
} else {
|
239 |
+
return $content;
|
240 |
+
}
|
241 |
$this->do_404page_action();
|
242 |
}
|
243 |
|
244 |
// change article selectors - Customizr Compatibility Mode
|
245 |
function show404articleselectors_customizr_mode( $selectors ) {
|
246 |
+
if ( ! $this->settings['404page_native'] ) {
|
247 |
+
return 'id="post-' . $this->settings['404page_page_id'] . '" ' . 'class="' . join( ' ', get_post_class( 'row-fluid', $this->settings['404page_page_id'] ) ) . '"';
|
248 |
+
} else {
|
249 |
+
return $selectors;
|
250 |
+
}
|
251 |
}
|
252 |
|
253 |
// init the admin section
|
254 |
function admin_init() {
|
255 |
$this->wp_url = 'https://wordpress.org/plugins/' . $this->plugin_slug;
|
256 |
+
$this->my_url = 'http://petersplugins.com/free-wordpress-plugins/' . $this->plugin_slug;
|
257 |
+
$this->dc_url = 'http://petersplugins.com/docs/' . $this->plugin_slug;
|
258 |
load_plugin_textdomain( '404page' );
|
259 |
add_settings_section( '404page-settings', null, null, '404page_settings_section' );
|
260 |
register_setting( '404page_settings', '404page_page_id' );
|
307 |
|
308 |
// handle the settings field method
|
309 |
function admin_method() {
|
310 |
+
|
311 |
+
if ( $this->settings['404page_native'] ) {
|
312 |
+
|
313 |
+
echo '<p><span class="dashicons dashicons-info"></span> ' . __( 'This setting is not available because the Theme you are using natively supports the 404page plugin.', '404page' ) . ' (<a href="' . $this->dc_url . '/#native_mode">' . __( 'Read more', '404page' ) . '</a>)</p>';
|
314 |
+
|
315 |
+
} elseif ( defined( 'CUSTOMIZR_VER' ) ) {
|
316 |
+
|
317 |
+
echo '<p><span class="dashicons dashicons-info"></span> ' . __( 'This setting is not availbe because the 404page Plugin works in Customizr Compatibility Mode.', '404page' ) . ' (<a href="' . $this->dc_url . '/#special_modes">' . __( 'Read more', '404page' ) . '</a>)</p>';
|
|
|
|
|
318 |
|
|
|
|
|
319 |
} elseif ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
320 |
+
|
321 |
+
echo '<p><span class="dashicons dashicons-info"></span> ' . __( 'This setting is not availbe because the 404page Plugin works in WPML Mode.', '404page' ) . ' (<a href="' . $this->dc_url . '/#special_modes">' . __( 'Read more', '404page' ) . '</a>)</p>';
|
322 |
+
|
323 |
} elseif ( defined( 'POLYLANG_VERSION' ) ) {
|
324 |
+
|
325 |
+
echo '<p><span class="dashicons dashicons-info"></span> ' . __( 'This setting is not availbe because the 404page Plugin works in Polylang Mode.', '404page' ) . ' (<a href="' . $this->dc_url . '/#special_modes">' . __( 'Read more', '404page' ) . '</a>)</p>';
|
326 |
+
|
|
|
|
|
327 |
} else {
|
328 |
+
|
329 |
+
echo '<p><input type="radio" id="404page_settings_method_standard" name="404page_method" value="STD"' . checked( 'STD', $this->settings['404page_method'], false ) . ' />';
|
330 |
+
echo '<label for="404page_settings_method_standard">' . __( 'Standard Mode', '404page' ) . '</label></p>';
|
331 |
+
|
332 |
+
echo '<p><input type="radio" id="404page_settings_method_compatibility" name="404page_method" value="CMP"' . checked( 'CMP', $this->settings['404page_method'], false ) . '/>';
|
333 |
+
echo '<label for="404page_settings_method_compatibility">' . __( 'Compatibility Mode', '404page' ) . '</label></p>';
|
334 |
+
|
335 |
echo '<p><span class="dashicons dashicons-info"></span> ' . __( 'Standard Mode uses the WordPress Template System and should work in most cases. If the 404page plugin does not work properly, probably you are using a theme or plugin that modifies the WordPress Template System. In this case the Compatibility Mode maybe can fix the problem, although it cannot be guaranteed that every possible configuration can be handled by Compatibility Mode. Standard Mode is the recommended method, only switch to Compatibility Mode if you have any problems.', '404page' ) . '</p>';
|
336 |
+
|
337 |
}
|
338 |
+
|
339 |
}
|
340 |
|
341 |
// this function hides the selected page from the list of pages
|
342 |
function exclude_404page( $query ) {
|
343 |
+
if ( $this->settings['404page_page_id'] > 0 ) {
|
344 |
+
global $pagenow;
|
345 |
+
if( is_admin() && ( 'edit.php' == $pagenow && ( get_query_var( 'post_type' ) && 'page' == get_query_var( 'post_type' ) ) && !current_user_can( 'create_users' ) ) || ! is_admin() ) {
|
346 |
+
$pageid = $this->settings['404page_page_id'];
|
347 |
+
if ( ! is_admin() ) {
|
348 |
+
$pageid = $this->get_page_id( $pageid );
|
349 |
+
}
|
350 |
+
$query->set( 'post__not_in', array( $pageid ) );
|
351 |
+
}
|
352 |
}
|
353 |
return $query;
|
354 |
}
|
355 |
|
356 |
+
// this function removes the 404 page from get_pages result array
|
357 |
+
function remove_404page_from_array( $pages, $r ) {
|
358 |
+
if ( $this->settings['404page_page_id'] > 0 ) {
|
359 |
+
$pageid = $this->get_page_id( $this->settings['404page_page_id'] );
|
360 |
+
for ( $i = 0; $i < sizeof( $pages ); $i++ ) {
|
361 |
+
if ( $pages[$i]->ID == $pageid ) {
|
362 |
+
unset( $pages[$i] );
|
363 |
+
break;
|
364 |
+
}
|
365 |
+
}
|
366 |
+
}
|
367 |
+
return array_values( $pages );
|
368 |
+
}
|
369 |
+
|
370 |
// adds the options page to admin menu
|
371 |
function admin_menu() {
|
372 |
$page_handle = add_theme_page ( __( '404 Error Page', "404page" ), __( '404 Error Page', '404page' ), 'manage_options', '404pagesettings', array( $this, 'admin_page' ) );
|
386 |
?>
|
387 |
<div class="wrap">
|
388 |
<?php screen_icon(); ?>
|
389 |
+
<h2 style="min-height: 32px; line-height: 32px; padding-left: 40px; background-image: url(<?php echo plugins_url( 'pluginicon.png', __FILE__ ); ?>); background-repeat: no-repeat; background-position: left center"><a href="<?php echo $this->my_url; ?>">404page</a> <?php echo __( 'Settings', '404page' ); ?></h2>
|
390 |
<?php settings_errors(); ?>
|
391 |
<hr />
|
392 |
<p>Plugin Version: <?php echo $this->version; ?> <a class="dashicons dashicons-editor-help" href="<?php echo $this->wp_url; ?>/changelog/"></a></p>
|
415 |
<?php
|
416 |
}
|
417 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
418 |
// returns the id of the 404 page if one is defined, returns 0 if none is defined, returns -1 if the defined page id does not exist
|
419 |
private function get_404page_id() {
|
420 |
$pageid = get_option( '404page_page_id', 0 );
|
429 |
|
430 |
// returns the selected method
|
431 |
private function get_404page_method() {
|
432 |
+
if ( defined( 'ICL_SITEPRESS_VERSION' ) || defined( 'POLYLANG_VERSION' ) ) {
|
433 |
+
// WPML or Polylang is active
|
434 |
return 'CMP';
|
435 |
} else {
|
436 |
return get_option( '404page_method', 'STD' );
|
447 |
return (bool)get_option( '404page_fire_error', true );
|
448 |
}
|
449 |
|
450 |
+
// thsi function gets the id of the translated page if WPML or Polylang is active - otherwise the original pageid is returned
|
451 |
+
private function get_page_id( $pageid ) {
|
452 |
+
|
453 |
+
if ( defined( 'ICL_SITEPRESS_VERSION' ) ) {
|
454 |
+
|
455 |
+
// WPML is active
|
456 |
+
$pageid = apply_filters( 'wpml_object_id', $pageid, 'page', true );
|
457 |
+
|
458 |
+
} elseif ( defined( 'POLYLANG_VERSION' ) ) {
|
459 |
+
|
460 |
+
// Polylang is active
|
461 |
+
$translatedpageid = pll_get_post( $pageid );
|
462 |
+
if ( !empty( $translatedpageid ) && 'publish' == get_post_status( $translatedpageid ) ) {
|
463 |
+
$pageid = $translatedpageid;
|
464 |
+
}
|
465 |
+
|
466 |
+
}
|
467 |
+
|
468 |
+
return $pageid;
|
469 |
+
|
470 |
+
}
|
471 |
+
|
472 |
// make plugin expandable
|
473 |
function do_404page_action() {
|
474 |
do_action( '404page_after_404' );
|
485 |
<ul>
|
486 |
<li><div class="dashicons dashicons-wordpress"></div> <a href="<?php echo $this->wp_url; ?>/"><?php _e( 'Please rate the plugin', '404page' ); ?></a></li>
|
487 |
<li><div class="dashicons dashicons-admin-home"></div> <a href="<?php echo $this->my_url; ?>/"><?php _e( 'Plugin homepage', '404page'); ?></a></li>
|
488 |
+
<li><div class="dashicons dashicons-admin-home"></div> <a href="http://petersplugins.com/"><?php _e( 'Author homepage', '404page' );?></a></li>
|
489 |
+
<li><div class="dashicons dashicons-googleplus"></div> <a href="http://g.petersplugins.com/"><?php _e( 'Authors Google+ Page', '404page' ); ?></a></li>
|
490 |
+
<li><div class="dashicons dashicons-facebook-alt"></div> <a href="http://f.petersplugins.com/"><?php _e( 'Authors facebook Page', '404page' ); ?></a></li>
|
491 |
</ul>
|
492 |
</div>
|
493 |
</div>
|
498 |
<li><div class="dashicons dashicons-book-alt"></div> <a href="<?php echo $this->dc_url; ?>"><?php _e( 'Take a look at the Plugin Doc', '404page' ); ?></a></li>
|
499 |
<li><div class="dashicons dashicons-wordpress"></div> <a href="<?php echo $this->wp_url; ?>/faq/"><?php _e( 'Take a look at the FAQ section', '404page' ); ?></a></li>
|
500 |
<li><div class="dashicons dashicons-wordpress"></div> <a href="http://wordpress.org/support/plugin/<?php echo $this->plugin_slug; ?>/"><?php _e( 'Take a look at the Support section', '404page'); ?></a></li>
|
501 |
+
<li><div class="dashicons dashicons-admin-comments"></div> <a href="http://petersplugins.com/contact/"><?php _e( 'Feel free to contact the Author', '404page' ); ?></a></li>
|
502 |
</ul>
|
503 |
</div>
|
504 |
</div>
|
546 |
delete_option( $key );
|
547 |
}
|
548 |
}
|
549 |
+
|
550 |
+
// *
|
551 |
+
// * functions for theme usage
|
552 |
+
// *
|
553 |
+
|
554 |
+
// check if there's a custom 404 page set
|
555 |
+
function pp_404_is_active() {
|
556 |
+
return ( $this->settings['404page_page_id'] > 0 );
|
557 |
+
}
|
558 |
+
|
559 |
+
// activate the native theme support
|
560 |
+
function pp_404_set_native_support() {
|
561 |
+
$this->settings['404page_native'] = true;
|
562 |
+
}
|
563 |
+
|
564 |
+
// get the title - native theme support
|
565 |
+
function pp_404_get_the_title() {
|
566 |
+
$title = '';
|
567 |
+
if ( $this->settings['404page_page_id'] > 0 && $this->settings['404page_native'] ) {
|
568 |
+
$title = get_the_title( $this->settings['404page_page_id'] );
|
569 |
+
}
|
570 |
+
return $title;
|
571 |
+
}
|
572 |
+
|
573 |
+
// print title - native theme support
|
574 |
+
function pp_404_the_title() {
|
575 |
+
echo $this->pp_404_get_the_title();
|
576 |
+
}
|
577 |
+
|
578 |
+
// get the content - native theme support
|
579 |
+
function pp_404_get_the_content() {
|
580 |
+
$content = '';
|
581 |
+
if ( $this->settings['404page_page_id'] > 0 && $this->settings['404page_native'] ) {
|
582 |
+
$content = apply_filters( 'the_content', get_post_field( 'post_content', $this->settings['404page_page_id'] ) );
|
583 |
+
}
|
584 |
+
return $content;
|
585 |
+
}
|
586 |
+
|
587 |
+
// print content - native theme support
|
588 |
+
function pp_404_the_content() {
|
589 |
+
echo $this->pp_404_get_the_content();
|
590 |
+
}
|
591 |
+
|
592 |
}
|
593 |
|
594 |
$smart404page = new Smart404Page();
|
595 |
+
|
596 |
+
// this function can be used by a theme to check if there's an active custom 404 page
|
597 |
+
function pp_404_is_active() {
|
598 |
+
global $smart404page;
|
599 |
+
return $smart404page->pp_404_is_active();
|
600 |
+
}
|
601 |
+
|
602 |
+
// this function can be used by a theme to activate native support
|
603 |
+
function pp_404_set_native_support() {
|
604 |
+
global $smart404page;
|
605 |
+
$smart404page->pp_404_set_native_support();
|
606 |
+
}
|
607 |
+
|
608 |
+
// this function can be used by a theme to get the title of the custom 404 page in native support
|
609 |
+
function pp_404_get_the_title() {
|
610 |
+
global $smart404page;
|
611 |
+
return $smart404page->pp_404_get_the_title();
|
612 |
+
}
|
613 |
+
|
614 |
+
// this function can be used by a theme to print out the title of the custom 404 page in native support
|
615 |
+
function pp_404_the_title() {
|
616 |
+
global $smart404page;
|
617 |
+
$smart404page->pp_404_the_title();
|
618 |
+
}
|
619 |
+
|
620 |
+
// this function can be used by a theme to get the content of the custom 404 page in native support
|
621 |
+
function pp_404_get_the_content() {
|
622 |
+
global $smart404page;
|
623 |
+
return $smart404page->pp_404_get_the_content();
|
624 |
+
}
|
625 |
+
|
626 |
+
// this function can be used by a theme to print out the content of the custom 404 page in native support
|
627 |
+
function pp_404_the_content() {
|
628 |
+
global $smart404page;
|
629 |
+
return $smart404page->pp_404_the_content();
|
630 |
+
}
|
631 |
+
|
632 |
?>
|
pluginicon.png
CHANGED
Binary file
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== 404page - your smart custom 404 error page ===
|
2 |
-
Contributors: smartware.cc
|
3 |
-
Donate link:http://
|
4 |
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
|
5 |
Requires at least: 3.0
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 2.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -14,10 +14,10 @@ Custom 404 the easy way! Set any page as custom 404 error page. No coding needed
|
|
14 |
|
15 |
> Create your custom 404 Error Page using the full Power of WordPress
|
16 |
|
17 |
-
**See also [Plugin Homepage](http://
|
18 |
|
19 |
-
= Version 2.
|
20 |
-
Please
|
21 |
|
22 |
https://www.youtube.com/watch?v=VTL07Lf0IsY
|
23 |
|
@@ -30,21 +30,20 @@ Create your custom 404 Page as a normal WordPress Page using the full power of W
|
|
30 |
|
31 |
= Translations =
|
32 |
|
33 |
-
|
34 |
|
35 |
**Translation are highly appreciated**. It would be great if you'd support the 404page Plugin by adding a new translation or keeping an existing one up to date. If you're new to GlotPress take a look at the [Translator Handbook](https://make.wordpress.org/polyglots/handbook/tools/glotpress-translate-wordpress-org/).
|
36 |
|
37 |
= Do you like the 404page Plugin? =
|
38 |
|
39 |
-
Thanks, I appreciate that. You don’t need to make a donation. No money, no beer, no coffee. Please, just [tell the world that you like what I’m doing](http://
|
40 |
|
41 |
-
= More plugins from
|
42 |
|
43 |
-
* **[hashtagger](https://wordpress.org/plugins/hashtagger/)**
|
44 |
-
* **[JavaScript AutoLoader](https://wordpress.org/plugins/javascript-autoloader/)** - Load JavaScript files without changing files in the theme directory or installing several plugins to add all the desired functionality
|
45 |
-
* **[link-log](https://wordpress.org/plugins/link-log/)** - Find out where your visitors leave to. Track clicks on external links.
|
46 |
* **[smart Archive Page Remove](https://wordpress.org/plugins/smart-archive-page-remove/)** - Completely remove unwated Archive Pages from your Blog
|
47 |
* **[smart User Slug Hider](https://wordpress.org/plugins/smart-user-slug-hider/)** - Hide usernames in author pages URLs to enhance security
|
|
|
48 |
|
49 |
== Installation ==
|
50 |
|
@@ -73,6 +72,9 @@ No, there is no redirection! The chosen page is delivered as a 'real' 404 error
|
|
73 |
= What about PHP Version 7? =
|
74 |
The plugin works smoothly with PHP 7.
|
75 |
|
|
|
|
|
|
|
76 |
== Screenshots ==
|
77 |
|
78 |
1. Create your 404 Page as a normal WordPress Page
|
@@ -81,6 +83,14 @@ The plugin works smoothly with PHP 7.
|
|
81 |
|
82 |
== Changelog ==
|
83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
= 2.1 (2016-04-22) =
|
85 |
* introduction of selectable Operating Methods
|
86 |
* several changes to Compatibility Mode for improved WPML and bbPress compatibility plus compatibility with Page Builder by SiteOrigin
|
@@ -102,7 +112,7 @@ The plugin works smoothly with PHP 7.
|
|
102 |
* class `error404` added to the classes that are assigned to the body HTML element
|
103 |
* the settings menu was moved from 'Settings' to 'Appearance'
|
104 |
* translation files removed, using GlotPress exclusively
|
105 |
-
* [Read more](http://
|
106 |
|
107 |
= 1.4 (2015-08-07) =
|
108 |
* edit the 404 page directly from settings page
|
@@ -125,8 +135,14 @@ The plugin works smoothly with PHP 7.
|
|
125 |
|
126 |
== Upgrade Notice ==
|
127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
128 |
= 2.0 =
|
129 |
-
Version 2.0 is more or less a completely new development and a big step forward. [Read more](http://
|
130 |
|
131 |
= 1.4 =
|
132 |
Editing of the 404 page is now possible directly from settings page. Portuguese translation added.
|
@@ -135,7 +151,7 @@ Editing of the 404 page is now possible directly from settings page. Portuguese
|
|
135 |
|
136 |
= The 404page plugin was sucessfully tested by the author with the following themes =
|
137 |
* [Athena](https://wordpress.org/themes/athena/)
|
138 |
-
* [Customizr](https://wordpress.org/themes/customizr/) (Read more about [Customizr Compatibility Mode](http://
|
139 |
* [evolve](https://wordpress.org/themes/evolve/)
|
140 |
* [GeneratePress](https://wordpress.org/themes/generatepress/)
|
141 |
* [Graphene](https://wordpress.org/themes/graphene/)
|
@@ -154,15 +170,28 @@ Editing of the 404 page is now possible directly from settings page. Portuguese
|
|
154 |
* [Twenty Sixteen](https://wordpress.org/themes/twentysixteen/)
|
155 |
* [Vantage](https://wordpress.org/themes/vantage/)
|
156 |
* [Virtue](https://wordpress.org/themes/virtue/)
|
157 |
-
* [Zerif Lite](
|
|
|
|
|
|
|
|
|
|
|
158 |
|
159 |
= The 404page plugin was sucessfully tested by the author with the following plugins =
|
160 |
-
* [bbPress](https://wordpress.org/plugins/bbpress/)
|
161 |
* [BuddyPress](https://wordpress.org/plugins/buddypress/)
|
162 |
* [hashtagger](https://wordpress.org/plugins/hashtagger/)
|
163 |
-
* [Page Builder by SiteOrigin](https://wordpress.org/plugins/siteorigin-panels/)
|
164 |
-
* [Polylang](https://wordpress.org/plugins/polylang/)
|
165 |
* [User Submitted Posts](https://wordpress.org/plugins/user-submitted-posts/)
|
166 |
* [WooCommerce](https://wordpress.org/plugins/woocommerce/)
|
167 |
-
* [WP Super Cache](https://wordpress.org/plugins/wp-super-cache/)(Read more about [WP Super Cache Compatibility](http://
|
168 |
-
* [WPML WordPress Multilingual Plugin](https://wpml.org/)([officially approved by WPML team](https://wpml.org/plugin/404page/))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
=== 404page - your smart custom 404 error page ===
|
2 |
+
Contributors: petersplugins, smartware.cc
|
3 |
+
Donate link:http://petersplugins.com/make-a-donation/
|
4 |
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
|
5 |
Requires at least: 3.0
|
6 |
+
Tested up to: 4.6
|
7 |
+
Stable tag: 2.2
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
14 |
|
15 |
> Create your custom 404 Error Page using the full Power of WordPress
|
16 |
|
17 |
+
**See also [Plugin Homepage](http://petersplugins.com/free-wordpress-plugins/404page/) and [Plugin Doc](http://petersplugins.com/docs/404page/)**
|
18 |
|
19 |
+
= Version 2.2 Update Notice =
|
20 |
+
Please note that the Plugin **no longer switches to Compatibility Mode automatically** under certain conditions. Trying to identify several configurations where Compatibility Mode is required caused some other problems. Take a look at the [release notes](http://petersplugins.com/blog/2016/09/26/404page-version-2-2-a-lot-of-changes-under-the-hood).
|
21 |
|
22 |
https://www.youtube.com/watch?v=VTL07Lf0IsY
|
23 |
|
30 |
|
31 |
= Translations =
|
32 |
|
33 |
+
The 404page Plugin uses GlotPress - the wordpress.org Translation System - for translations. Translations can be submitted at [translate.wordpress.org](https://translate.wordpress.org/projects/wp-plugins/404page).
|
34 |
|
35 |
**Translation are highly appreciated**. It would be great if you'd support the 404page Plugin by adding a new translation or keeping an existing one up to date. If you're new to GlotPress take a look at the [Translator Handbook](https://make.wordpress.org/polyglots/handbook/tools/glotpress-translate-wordpress-org/).
|
36 |
|
37 |
= Do you like the 404page Plugin? =
|
38 |
|
39 |
+
Thanks, I appreciate that. You don’t need to make a donation. No money, no beer, no coffee. Please, just [tell the world that you like what I’m doing](http://petersplugins.com/make-a-donation/)! And that’s all.
|
40 |
|
41 |
+
= More plugins from Peter =
|
42 |
|
43 |
+
* **[hashtagger](https://wordpress.org/plugins/hashtagger/)** - Use hashtags in WordPress
|
|
|
|
|
44 |
* **[smart Archive Page Remove](https://wordpress.org/plugins/smart-archive-page-remove/)** - Completely remove unwated Archive Pages from your Blog
|
45 |
* **[smart User Slug Hider](https://wordpress.org/plugins/smart-user-slug-hider/)** - Hide usernames in author pages URLs to enhance security
|
46 |
+
* [See all](https://profiles.wordpress.org/petersplugins/#content-plugins)
|
47 |
|
48 |
== Installation ==
|
49 |
|
72 |
= What about PHP Version 7? =
|
73 |
The plugin works smoothly with PHP 7.
|
74 |
|
75 |
+
= Is it possible to add custom CSS to the 404 page? =
|
76 |
+
The 404page plugin adds a CSS class `error404` to the `<body>` tag which can be used for extra styling.
|
77 |
+
|
78 |
== Screenshots ==
|
79 |
|
80 |
1. Create your 404 Page as a normal WordPress Page
|
83 |
|
84 |
== Changelog ==
|
85 |
|
86 |
+
= 2.2 (2016-09-26) =
|
87 |
+
* automatic switch to Compatibility Mode for several plugins removed
|
88 |
+
* enhanced support for WPML and Polylang
|
89 |
+
* remove the 404 page from search results (for all languages if WPML or Polylang is used)
|
90 |
+
* remove the 404 page from sitemap or other page lists (for all languages if WPML or Polylang is used)
|
91 |
+
* bugfix for author archives
|
92 |
+
* confusing admin message removed
|
93 |
+
|
94 |
= 2.1 (2016-04-22) =
|
95 |
* introduction of selectable Operating Methods
|
96 |
* several changes to Compatibility Mode for improved WPML and bbPress compatibility plus compatibility with Page Builder by SiteOrigin
|
112 |
* class `error404` added to the classes that are assigned to the body HTML element
|
113 |
* the settings menu was moved from 'Settings' to 'Appearance'
|
114 |
* translation files removed, using GlotPress exclusively
|
115 |
+
* [Read more](http://petersplugins.com/blog/2016/02/23/the-404page-plugin-now-works-with-wpml-and-other-enhancements/)
|
116 |
|
117 |
= 1.4 (2015-08-07) =
|
118 |
* edit the 404 page directly from settings page
|
135 |
|
136 |
== Upgrade Notice ==
|
137 |
|
138 |
+
= 2.2 =
|
139 |
+
Enhanced compatibility. Automated Operating Method select removed. Several fixes.
|
140 |
+
|
141 |
+
= 2.1 =
|
142 |
+
Introduced Compatibility Mode, improved compatibility with several plugins.
|
143 |
+
|
144 |
= 2.0 =
|
145 |
+
Version 2.0 is more or less a completely new development and a big step forward. [Read more](http://petersplugins.com/blog/2016/02/23/the-404page-plugin-now-works-with-wpml-and-other-enhancements/)
|
146 |
|
147 |
= 1.4 =
|
148 |
Editing of the 404 page is now possible directly from settings page. Portuguese translation added.
|
151 |
|
152 |
= The 404page plugin was sucessfully tested by the author with the following themes =
|
153 |
* [Athena](https://wordpress.org/themes/athena/)
|
154 |
+
* [Customizr](https://wordpress.org/themes/customizr/) (Read more about [Customizr Compatibility Mode](http://petersplugins.com/docs/404page/#settings_operating_method))
|
155 |
* [evolve](https://wordpress.org/themes/evolve/)
|
156 |
* [GeneratePress](https://wordpress.org/themes/generatepress/)
|
157 |
* [Graphene](https://wordpress.org/themes/graphene/)
|
170 |
* [Twenty Sixteen](https://wordpress.org/themes/twentysixteen/)
|
171 |
* [Vantage](https://wordpress.org/themes/vantage/)
|
172 |
* [Virtue](https://wordpress.org/themes/virtue/)
|
173 |
+
* [Zerif Lite](http://themeisle.com/themes/zerif-lite/)
|
174 |
+
|
175 |
+
= The 404page plugin was sucessfully tested by the author with the following starter themes =
|
176 |
+
* [Bones}(http://themble.com/bones/)
|
177 |
+
* [JointsWP](http://jointswp.com/)
|
178 |
+
* [undersores](http://underscores.me/)
|
179 |
|
180 |
= The 404page plugin was sucessfully tested by the author with the following plugins =
|
181 |
+
* [bbPress](https://wordpress.org/plugins/bbpress/)
|
182 |
* [BuddyPress](https://wordpress.org/plugins/buddypress/)
|
183 |
* [hashtagger](https://wordpress.org/plugins/hashtagger/)
|
184 |
+
* [Page Builder by SiteOrigin](https://wordpress.org/plugins/siteorigin-panels/)
|
185 |
+
* [Polylang](https://wordpress.org/plugins/polylang/)
|
186 |
* [User Submitted Posts](https://wordpress.org/plugins/user-submitted-posts/)
|
187 |
* [WooCommerce](https://wordpress.org/plugins/woocommerce/)
|
188 |
+
* [WP Super Cache](https://wordpress.org/plugins/wp-super-cache/)(Read more about [WP Super Cache Compatibility](http://petersplugins.com/docs/404page/#wp_super_cache)
|
189 |
+
* [WPML WordPress Multilingual Plugin](https://wpml.org/)([officially approved by WPML team](https://wpml.org/plugin/404page/))
|
190 |
+
|
191 |
+
== For developers ==
|
192 |
+
|
193 |
+
= Action Hook =
|
194 |
+
The plugin adds an action hook 404page_after_404 which you can use to add extra functionality. The exact position the action occurs after an 404 error is detected depends on the Operating Method. Your function must not generate any output. There are no parameters.
|
195 |
+
|
196 |
+
= Native Support =
|
197 |
+
If you are a theme developer you can add native support for the 404page plugin to your theme for full control. [Read more](http://petersplugins.com/docs/404page/#theme_native_support).
|