Version Description
(18/10/2021) = ** Improvements**
- Tested with WP 5.8.
- Added sanitization.
Download this release
Release Info
| Developer | joelcj91 |
| Plugin | |
| Version | 3.1.0 |
| Comparing to | |
| See all releases | |
Code changes from version 3.0.9 to 3.1.0
- 404-to-301.php +2 -2
- includes/admin/class-jj4t3-log-listing.php +52 -52
- includes/admin/views/custom-redirect.php +20 -19
- includes/functions/jj4t3-general-functions.php +19 -19
- languages/404-to-301.pot +20 -20
- readme.txt +10 -5
404-to-301.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
* Plugin Name: 404 to 301 - Redirect, Log and Notify 404 Errors
|
| 4 |
* Plugin URI: https://duckdev.com/products/404-to-301/
|
| 5 |
* Description: Automatically redirect all <strong>404 errors</strong> to any page using <strong>301 redirect for SEO</strong>. You can <strong>redirect and log</strong> every 404 errors. No more 404 errors in Webmaster tool.
|
| 6 |
-
* Version: 3.0
|
| 7 |
* Author: Joel James
|
| 8 |
* Author URI: https://duckdev.com/
|
| 9 |
* Donate link: https://paypal.me/JoelCJ
|
|
@@ -44,7 +44,7 @@ define( 'JJ4T3_URL', plugin_dir_url( __FILE__ ) );
|
|
| 44 |
// Define plugin base file.
|
| 45 |
define( 'JJ4T3_BASE_FILE', __FILE__ );
|
| 46 |
// Define plugin version.
|
| 47 |
-
define( 'JJ4T3_VERSION', '3.0
|
| 48 |
// Define plugin version.
|
| 49 |
define( 'JJ4T3_DB_VERSION', '11.0' );
|
| 50 |
// Define plugin log table.
|
| 3 |
* Plugin Name: 404 to 301 - Redirect, Log and Notify 404 Errors
|
| 4 |
* Plugin URI: https://duckdev.com/products/404-to-301/
|
| 5 |
* Description: Automatically redirect all <strong>404 errors</strong> to any page using <strong>301 redirect for SEO</strong>. You can <strong>redirect and log</strong> every 404 errors. No more 404 errors in Webmaster tool.
|
| 6 |
+
* Version: 3.1.0
|
| 7 |
* Author: Joel James
|
| 8 |
* Author URI: https://duckdev.com/
|
| 9 |
* Donate link: https://paypal.me/JoelCJ
|
| 44 |
// Define plugin base file.
|
| 45 |
define( 'JJ4T3_BASE_FILE', __FILE__ );
|
| 46 |
// Define plugin version.
|
| 47 |
+
define( 'JJ4T3_VERSION', '3.1.0' );
|
| 48 |
// Define plugin version.
|
| 49 |
define( 'JJ4T3_DB_VERSION', '11.0' );
|
| 50 |
// Define plugin log table.
|
includes/admin/class-jj4t3-log-listing.php
CHANGED
|
@@ -15,21 +15,21 @@ if ( ! class_exists( 'WP_List_Table' ) ) {
|
|
| 15 |
* This class defines all the methods to output the error logs display table using
|
| 16 |
* WordPress listing table class.
|
| 17 |
*
|
| 18 |
-
* @category Core
|
| 19 |
-
* @package JJ4T3
|
| 20 |
-
* @subpackage ErrorLogListing
|
| 21 |
* @author Joel James <mail@cjoel.com>
|
| 22 |
* @license http://www.gnu.org/licenses/ GNU General Public License
|
|
|
|
| 23 |
* @link https://duckdev.com/products/404-to-301/
|
|
|
|
|
|
|
| 24 |
*/
|
| 25 |
class JJ4T3_Log_Listing extends WP_List_Table {
|
| 26 |
|
| 27 |
/**
|
| 28 |
* Group by column name.
|
| 29 |
*
|
|
|
|
| 30 |
* @since 3.0.0
|
| 31 |
* @access private
|
| 32 |
-
* @var string
|
| 33 |
*/
|
| 34 |
private $group_by = '';
|
| 35 |
|
|
@@ -44,8 +44,8 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 44 |
parent::__construct(
|
| 45 |
array(
|
| 46 |
'singular' => __( '404 Error Log', '404-to-301' ),
|
| 47 |
-
'plural'
|
| 48 |
-
'ajax'
|
| 49 |
)
|
| 50 |
);
|
| 51 |
}
|
|
@@ -61,9 +61,9 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 61 |
* $this->items - Push our custom log data to the listing table.
|
| 62 |
* Registering filter - "jj4t3_logs_list_per_page".
|
| 63 |
*
|
| 64 |
-
* @global object $wpdb WP DB object
|
| 65 |
* @since 2.0.0
|
| 66 |
* @access public
|
|
|
|
| 67 |
*/
|
| 68 |
public function prepare_items() {
|
| 69 |
|
|
@@ -98,7 +98,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 98 |
$this->set_pagination_args(
|
| 99 |
array(
|
| 100 |
'total_items' => $total_items,
|
| 101 |
-
'per_page'
|
| 102 |
)
|
| 103 |
);
|
| 104 |
|
|
@@ -113,13 +113,13 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 113 |
* Apply all filtering, sorting and paginations.
|
| 114 |
* Registering filter - "jj4t3_logs_list_result".
|
| 115 |
*
|
| 116 |
-
* @param int
|
| 117 |
-
* @param int
|
| 118 |
*
|
| 119 |
-
* @global object $wpdb WP DB object
|
| 120 |
* @since 3.0.0
|
| 121 |
* @access public
|
| 122 |
*
|
|
|
|
| 123 |
* @return array
|
| 124 |
*/
|
| 125 |
private function get_error_logs( $per_page = 20, $page_number = 1 ) {
|
|
@@ -284,10 +284,10 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 284 |
* listing, we need to get count of total items for proper pagination.
|
| 285 |
* Registering filter - "jj4t3_log_list_count".
|
| 286 |
*
|
| 287 |
-
* @global object $wpdb WP DB object
|
| 288 |
* @since 2.0.3
|
| 289 |
* @access private
|
| 290 |
*
|
|
|
|
| 291 |
* @return int Total count.
|
| 292 |
*/
|
| 293 |
private function total_logs() {
|
|
@@ -324,13 +324,13 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 324 |
public function get_columns() {
|
| 325 |
|
| 326 |
$columns = array(
|
| 327 |
-
'cb'
|
| 328 |
-
'date'
|
| 329 |
-
'url'
|
| 330 |
-
'ref'
|
| 331 |
-
'ip'
|
| 332 |
-
'ua'
|
| 333 |
-
'redirect' => __( 'Customization', '404-to-301' )
|
| 334 |
);
|
| 335 |
|
| 336 |
/**
|
|
@@ -360,15 +360,15 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 360 |
|
| 361 |
$columns = array(
|
| 362 |
'date' => array( 'date', true ),
|
| 363 |
-
'url'
|
| 364 |
-
'ref'
|
| 365 |
-
'ip'
|
| 366 |
);
|
| 367 |
|
| 368 |
/**
|
| 369 |
* Filter hook to change column titles.
|
| 370 |
*
|
| 371 |
-
* @note
|
| 372 |
*
|
| 373 |
* @since 3.0.0
|
| 374 |
*/
|
|
@@ -404,7 +404,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 404 |
* for switch, printing the whole array.
|
| 405 |
* Registering filter - "jj4t3_log_list_column_default".
|
| 406 |
*
|
| 407 |
-
* @param array
|
| 408 |
* @param string $column_name Column name
|
| 409 |
*
|
| 410 |
* @since 2.0.0
|
|
@@ -419,7 +419,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 419 |
/**
|
| 420 |
* Filter hook to change column names.
|
| 421 |
*
|
| 422 |
-
* @note
|
| 423 |
*
|
| 424 |
* @since 3.0.0
|
| 425 |
*/
|
|
@@ -693,15 +693,15 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 693 |
public function get_bulk_actions() {
|
| 694 |
|
| 695 |
$actions = array(
|
| 696 |
-
'bulk_delete'
|
| 697 |
-
'bulk_clean'
|
| 698 |
'bulk_delete_all' => __( 'Delete All (Keep redirects)', '404-to-301' ),
|
| 699 |
);
|
| 700 |
|
| 701 |
/**
|
| 702 |
* Filter hook to change actions.
|
| 703 |
*
|
| 704 |
-
* @note
|
| 705 |
* Make sure it's actions are properly added.
|
| 706 |
*
|
| 707 |
* @since 3.0.0
|
|
@@ -734,7 +734,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 734 |
echo '<select name="group_by_top" class="404_group_by">';
|
| 735 |
echo '<option value="">' . __( 'Group by', '404-to-301' ) . '</option>';
|
| 736 |
foreach ( $column_names as $column ) {
|
| 737 |
-
echo '<option value="' . $column . '" ' . selected( $column, $this->group_by ) . '>' . $available_columns[ $column ] . '</option>';
|
| 738 |
}
|
| 739 |
echo '</select>';
|
| 740 |
submit_button( __( 'Apply', '404-to-301' ), 'button', 'filter_action', false, array( 'id' => 'post-query' ) );
|
|
@@ -743,7 +743,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 743 |
/**
|
| 744 |
* Action hook to add extra items in actions area.
|
| 745 |
*
|
| 746 |
-
* @param object $this
|
| 747 |
* @param string $which Current location (top or bottom).
|
| 748 |
*/
|
| 749 |
do_action( 'jj4t3_log_list_extra_tablenav', $this, $which );
|
|
@@ -836,7 +836,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 836 |
* the user selection. We are using IF ELSE loop instead of
|
| 837 |
* switch to easily handle conditions.
|
| 838 |
*
|
| 839 |
-
* @param mixed
|
| 840 |
* @param string $action Current bulk action.
|
| 841 |
*
|
| 842 |
* @since 2.0.0
|
|
@@ -852,7 +852,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 852 |
$query = "DELETE FROM " . JJ4T3_TABLE . " WHERE id = " . absint( $ids );
|
| 853 |
} elseif ( is_array( $ids ) && 'bulk_delete' === $action ) {
|
| 854 |
// If multiple selected logs are being deleted.
|
| 855 |
-
$ids
|
| 856 |
$query = "DELETE FROM " . JJ4T3_TABLE . " WHERE id IN($ids)";
|
| 857 |
} elseif ( 'bulk_delete_all' === $action ) {
|
| 858 |
// If deleting all logs except custom redirected ones.
|
|
@@ -875,7 +875,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 875 |
*
|
| 876 |
* @param string $status Status.
|
| 877 |
* @param string $option Option name.
|
| 878 |
-
* @param mixed
|
| 879 |
*
|
| 880 |
* @since 2.1.0
|
| 881 |
* @access public
|
|
@@ -890,10 +890,10 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 890 |
/**
|
| 891 |
* Get custom redirect modal content
|
| 892 |
*
|
| 893 |
-
* @global object $wpdb WP DB object
|
| 894 |
* @since 2.2.0
|
| 895 |
* @access public
|
| 896 |
*
|
|
|
|
| 897 |
* @return void
|
| 898 |
*/
|
| 899 |
public static function open_redirect() {
|
|
@@ -911,30 +911,30 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 911 |
wp_die();
|
| 912 |
}
|
| 913 |
|
| 914 |
-
$url_404 = $_POST['url_404'];
|
| 915 |
|
| 916 |
global $wpdb;
|
| 917 |
|
| 918 |
// Get custom redirect value from db, if exist.
|
| 919 |
-
$result = $wpdb->get_row( $wpdb->prepare( "SELECT redirect, options FROM " . JJ4T3_TABLE . " WHERE url = %s AND redirect IS NOT NULL LIMIT 0,1",
|
| 920 |
|
| 921 |
// Get custom redirect type and url.
|
| 922 |
-
$url = empty( $result->redirect ) ? '' :
|
| 923 |
|
| 924 |
// Get custom options.
|
| 925 |
$options = empty( $result->options ) ? array() : maybe_unserialize( $result->options );
|
| 926 |
|
| 927 |
// Get result in an array.
|
| 928 |
$data = array(
|
| 929 |
-
'url_404' =>
|
| 930 |
-
'url'
|
| 931 |
);
|
| 932 |
|
| 933 |
// Set the custom options for the 404.
|
| 934 |
-
$data['type']
|
| 935 |
-
$data['redirect'] = isset( $options['redirect'] ) ? intval( $options['redirect'] ) : -1;
|
| 936 |
-
$data['log']
|
| 937 |
-
$data['alert']
|
| 938 |
|
| 939 |
/**
|
| 940 |
* Filter to alter custom redirect modal response array.
|
|
@@ -952,12 +952,12 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 952 |
* When user set a custom redirect url for a 404 link, save the data
|
| 953 |
* from modal by updating all error logs of the current 404 links.
|
| 954 |
*
|
| 955 |
-
* @global object $wpdb WP DB object
|
| 956 |
* @since 2.2.0
|
| 957 |
* @access public
|
| 958 |
*
|
| 959 |
-
* @note
|
| 960 |
*
|
|
|
|
| 961 |
* @return void
|
| 962 |
*/
|
| 963 |
public static function save_redirect() {
|
|
@@ -973,20 +973,20 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 973 |
// Custom options for the 404 path.
|
| 974 |
$options = maybe_serialize(
|
| 975 |
array(
|
| 976 |
-
'redirect' => jj4t3_from_request( 'jj4t3_custom_redirect_redirect' ),
|
| 977 |
-
'log'
|
| 978 |
-
'alert'
|
| 979 |
-
'type'
|
| 980 |
)
|
| 981 |
);
|
| 982 |
|
| 983 |
// Get 404 url.
|
| 984 |
-
$url = jj4t3_from_request( 'jj4t3_custom_redirect', false ) ?
|
| 985 |
|
| 986 |
global $wpdb;
|
| 987 |
|
| 988 |
// Get custom redirect url.
|
| 989 |
-
$url_404 = jj4t3_from_request( 'jj4t3_redirect_404', false ) ?
|
| 990 |
|
| 991 |
/**
|
| 992 |
* Action hook to run before updating a custom redirect.
|
|
@@ -995,7 +995,7 @@ class JJ4T3_Log_Listing extends WP_List_Table {
|
|
| 995 |
* after your custom function.
|
| 996 |
*
|
| 997 |
* @param string $url_404 404 link.
|
| 998 |
-
* @param string $url
|
| 999 |
*
|
| 1000 |
* @since 3.0.0
|
| 1001 |
*/
|
| 15 |
* This class defines all the methods to output the error logs display table using
|
| 16 |
* WordPress listing table class.
|
| 17 |
*
|
|
|
|
|
|
|
|
|
|
| 18 |
* @author Joel James <mail@cjoel.com>
|
| 19 |
* @license http://www.gnu.org/licenses/ GNU General Public License
|
| 20 |
+
* @category Core
|
| 21 |
* @link https://duckdev.com/products/404-to-301/
|
| 22 |
+
* @package JJ4T3
|
| 23 |
+
* @subpackage ErrorLogListing
|
| 24 |
*/
|
| 25 |
class JJ4T3_Log_Listing extends WP_List_Table {
|
| 26 |
|
| 27 |
/**
|
| 28 |
* Group by column name.
|
| 29 |
*
|
| 30 |
+
* @var string
|
| 31 |
* @since 3.0.0
|
| 32 |
* @access private
|
|
|
|
| 33 |
*/
|
| 34 |
private $group_by = '';
|
| 35 |
|
| 44 |
parent::__construct(
|
| 45 |
array(
|
| 46 |
'singular' => __( '404 Error Log', '404-to-301' ),
|
| 47 |
+
'plural' => __( '404 Error Logs', '404-to-301' ),
|
| 48 |
+
'ajax' => false,
|
| 49 |
)
|
| 50 |
);
|
| 51 |
}
|
| 61 |
* $this->items - Push our custom log data to the listing table.
|
| 62 |
* Registering filter - "jj4t3_logs_list_per_page".
|
| 63 |
*
|
|
|
|
| 64 |
* @since 2.0.0
|
| 65 |
* @access public
|
| 66 |
+
* @global object $wpdb WP DB object
|
| 67 |
*/
|
| 68 |
public function prepare_items() {
|
| 69 |
|
| 98 |
$this->set_pagination_args(
|
| 99 |
array(
|
| 100 |
'total_items' => $total_items,
|
| 101 |
+
'per_page' => $per_page,
|
| 102 |
)
|
| 103 |
);
|
| 104 |
|
| 113 |
* Apply all filtering, sorting and paginations.
|
| 114 |
* Registering filter - "jj4t3_logs_list_result".
|
| 115 |
*
|
| 116 |
+
* @param int $per_page Logs per page.
|
| 117 |
+
* @param int $page_number Current page number.
|
| 118 |
*
|
|
|
|
| 119 |
* @since 3.0.0
|
| 120 |
* @access public
|
| 121 |
*
|
| 122 |
+
* @global object $wpdb WP DB object
|
| 123 |
* @return array
|
| 124 |
*/
|
| 125 |
private function get_error_logs( $per_page = 20, $page_number = 1 ) {
|
| 284 |
* listing, we need to get count of total items for proper pagination.
|
| 285 |
* Registering filter - "jj4t3_log_list_count".
|
| 286 |
*
|
|
|
|
| 287 |
* @since 2.0.3
|
| 288 |
* @access private
|
| 289 |
*
|
| 290 |
+
* @global object $wpdb WP DB object
|
| 291 |
* @return int Total count.
|
| 292 |
*/
|
| 293 |
private function total_logs() {
|
| 324 |
public function get_columns() {
|
| 325 |
|
| 326 |
$columns = array(
|
| 327 |
+
'cb' => '<input type="checkbox" style="width: 5%;" />',
|
| 328 |
+
'date' => __( 'Date', '404-to-301' ),
|
| 329 |
+
'url' => __( '404 Path', '404-to-301' ),
|
| 330 |
+
'ref' => __( 'From', '404-to-301' ),
|
| 331 |
+
'ip' => __( 'IP Address', '404-to-301' ),
|
| 332 |
+
'ua' => __( 'User Agent', '404-to-301' ),
|
| 333 |
+
'redirect' => __( 'Customization', '404-to-301' ),
|
| 334 |
);
|
| 335 |
|
| 336 |
/**
|
| 360 |
|
| 361 |
$columns = array(
|
| 362 |
'date' => array( 'date', true ),
|
| 363 |
+
'url' => array( 'url', false ),
|
| 364 |
+
'ref' => array( 'ref', false ),
|
| 365 |
+
'ip' => array( 'ip', false ),
|
| 366 |
);
|
| 367 |
|
| 368 |
/**
|
| 369 |
* Filter hook to change column titles.
|
| 370 |
*
|
| 371 |
+
* @note DO NOT add extra columns.
|
| 372 |
*
|
| 373 |
* @since 3.0.0
|
| 374 |
*/
|
| 404 |
* for switch, printing the whole array.
|
| 405 |
* Registering filter - "jj4t3_log_list_column_default".
|
| 406 |
*
|
| 407 |
+
* @param array $item Column data
|
| 408 |
* @param string $column_name Column name
|
| 409 |
*
|
| 410 |
* @since 2.0.0
|
| 419 |
/**
|
| 420 |
* Filter hook to change column names.
|
| 421 |
*
|
| 422 |
+
* @note DO NOT add extra columns.
|
| 423 |
*
|
| 424 |
* @since 3.0.0
|
| 425 |
*/
|
| 693 |
public function get_bulk_actions() {
|
| 694 |
|
| 695 |
$actions = array(
|
| 696 |
+
'bulk_delete' => __( 'Delete Selected', '404-to-301' ),
|
| 697 |
+
'bulk_clean' => __( 'Delete All', '404-to-301' ),
|
| 698 |
'bulk_delete_all' => __( 'Delete All (Keep redirects)', '404-to-301' ),
|
| 699 |
);
|
| 700 |
|
| 701 |
/**
|
| 702 |
* Filter hook to change actions.
|
| 703 |
*
|
| 704 |
+
* @note If you are adding extra actions
|
| 705 |
* Make sure it's actions are properly added.
|
| 706 |
*
|
| 707 |
* @since 3.0.0
|
| 734 |
echo '<select name="group_by_top" class="404_group_by">';
|
| 735 |
echo '<option value="">' . __( 'Group by', '404-to-301' ) . '</option>';
|
| 736 |
foreach ( $column_names as $column ) {
|
| 737 |
+
echo '<option value="' . $column . '" ' . selected( $column, $this->group_by ) . '>' . esc_attr( $available_columns[ $column ] ) . '</option>';
|
| 738 |
}
|
| 739 |
echo '</select>';
|
| 740 |
submit_button( __( 'Apply', '404-to-301' ), 'button', 'filter_action', false, array( 'id' => 'post-query' ) );
|
| 743 |
/**
|
| 744 |
* Action hook to add extra items in actions area.
|
| 745 |
*
|
| 746 |
+
* @param object $this Class instance.
|
| 747 |
* @param string $which Current location (top or bottom).
|
| 748 |
*/
|
| 749 |
do_action( 'jj4t3_log_list_extra_tablenav', $this, $which );
|
| 836 |
* the user selection. We are using IF ELSE loop instead of
|
| 837 |
* switch to easily handle conditions.
|
| 838 |
*
|
| 839 |
+
* @param mixed $ids ID(s) of the log(s).
|
| 840 |
* @param string $action Current bulk action.
|
| 841 |
*
|
| 842 |
* @since 2.0.0
|
| 852 |
$query = "DELETE FROM " . JJ4T3_TABLE . " WHERE id = " . absint( $ids );
|
| 853 |
} elseif ( is_array( $ids ) && 'bulk_delete' === $action ) {
|
| 854 |
// If multiple selected logs are being deleted.
|
| 855 |
+
$ids = implode( ',', array_map( 'absint', $ids ) );
|
| 856 |
$query = "DELETE FROM " . JJ4T3_TABLE . " WHERE id IN($ids)";
|
| 857 |
} elseif ( 'bulk_delete_all' === $action ) {
|
| 858 |
// If deleting all logs except custom redirected ones.
|
| 875 |
*
|
| 876 |
* @param string $status Status.
|
| 877 |
* @param string $option Option name.
|
| 878 |
+
* @param mixed $value Value of the option.
|
| 879 |
*
|
| 880 |
* @since 2.1.0
|
| 881 |
* @access public
|
| 890 |
/**
|
| 891 |
* Get custom redirect modal content
|
| 892 |
*
|
|
|
|
| 893 |
* @since 2.2.0
|
| 894 |
* @access public
|
| 895 |
*
|
| 896 |
+
* @global object $wpdb WP DB object
|
| 897 |
* @return void
|
| 898 |
*/
|
| 899 |
public static function open_redirect() {
|
| 911 |
wp_die();
|
| 912 |
}
|
| 913 |
|
| 914 |
+
$url_404 = esc_url_raw( $_POST['url_404'] );
|
| 915 |
|
| 916 |
global $wpdb;
|
| 917 |
|
| 918 |
// Get custom redirect value from db, if exist.
|
| 919 |
+
$result = $wpdb->get_row( $wpdb->prepare( "SELECT redirect, options FROM " . JJ4T3_TABLE . " WHERE url = %s AND redirect IS NOT NULL LIMIT 0,1", $url_404 ), 'OBJECT' );
|
| 920 |
|
| 921 |
// Get custom redirect type and url.
|
| 922 |
+
$url = empty( $result->redirect ) ? '' : esc_url_raw( $result->redirect );
|
| 923 |
|
| 924 |
// Get custom options.
|
| 925 |
$options = empty( $result->options ) ? array() : maybe_unserialize( $result->options );
|
| 926 |
|
| 927 |
// Get result in an array.
|
| 928 |
$data = array(
|
| 929 |
+
'url_404' => $url_404,
|
| 930 |
+
'url' => $url,
|
| 931 |
);
|
| 932 |
|
| 933 |
// Set the custom options for the 404.
|
| 934 |
+
$data['type'] = empty( $options['type'] ) ? jj4t3_get_option( 'redirect_type' ) : intval( $options['type'] );
|
| 935 |
+
$data['redirect'] = isset( $options['redirect'] ) ? intval( $options['redirect'] ) : - 1;
|
| 936 |
+
$data['log'] = isset( $options['log'] ) ? intval( $options['log'] ) : - 1;
|
| 937 |
+
$data['alert'] = isset( $options['alert'] ) ? intval( $options['alert'] ) : - 1;
|
| 938 |
|
| 939 |
/**
|
| 940 |
* Filter to alter custom redirect modal response array.
|
| 952 |
* When user set a custom redirect url for a 404 link, save the data
|
| 953 |
* from modal by updating all error logs of the current 404 links.
|
| 954 |
*
|
|
|
|
| 955 |
* @since 2.2.0
|
| 956 |
* @access public
|
| 957 |
*
|
| 958 |
+
* @note Always die() for wp_ajax
|
| 959 |
*
|
| 960 |
+
* @global object $wpdb WP DB object
|
| 961 |
* @return void
|
| 962 |
*/
|
| 963 |
public static function save_redirect() {
|
| 973 |
// Custom options for the 404 path.
|
| 974 |
$options = maybe_serialize(
|
| 975 |
array(
|
| 976 |
+
'redirect' => intval( jj4t3_from_request( 'jj4t3_custom_redirect_redirect' ) ),
|
| 977 |
+
'log' => intval( jj4t3_from_request( 'jj4t3_custom_redirect_log' ) ),
|
| 978 |
+
'alert' => intval( jj4t3_from_request( 'jj4t3_custom_redirect_alert' ) ),
|
| 979 |
+
'type' => intval( jj4t3_from_request( 'jj4t3_custom_redirect_type' ) ),
|
| 980 |
)
|
| 981 |
);
|
| 982 |
|
| 983 |
// Get 404 url.
|
| 984 |
+
$url = jj4t3_from_request( 'jj4t3_custom_redirect', false ) ? esc_url_raw( jj4t3_from_request( 'jj4t3_custom_redirect' ) ) : '';
|
| 985 |
|
| 986 |
global $wpdb;
|
| 987 |
|
| 988 |
// Get custom redirect url.
|
| 989 |
+
$url_404 = jj4t3_from_request( 'jj4t3_redirect_404', false ) ? esc_url_raw( jj4t3_from_request( 'jj4t3_redirect_404' ) ) : '';
|
| 990 |
|
| 991 |
/**
|
| 992 |
* Action hook to run before updating a custom redirect.
|
| 995 |
* after your custom function.
|
| 996 |
*
|
| 997 |
* @param string $url_404 404 link.
|
| 998 |
+
* @param string $url Link to redirect.
|
| 999 |
*
|
| 1000 |
* @since 3.0.0
|
| 1001 |
*/
|
includes/admin/views/custom-redirect.php
CHANGED
|
@@ -1,45 +1,46 @@
|
|
| 1 |
<?php
|
| 2 |
|
| 3 |
// If this file is called directly, abort.
|
| 4 |
-
defined( 'ABSPATH' )
|
|
|
|
| 5 |
|
| 6 |
<div id="jj4t3-redirect-modal" style="display:none;">
|
| 7 |
<div id="jj4t3-thickbox-content" class="wrap">
|
| 8 |
<form id="jj4t3_custom_redirect_form" action="javascript:void(0)">
|
| 9 |
<table class="form-table">
|
| 10 |
<tr>
|
| 11 |
-
<th><?php
|
| 12 |
<td><strong><p id="jj4t3_redirect_404_text"></p></strong></td>
|
| 13 |
</tr>
|
| 14 |
<tr>
|
| 15 |
-
<th><?php
|
| 16 |
<td>
|
| 17 |
-
<input type="radio" name="jj4t3_custom_redirect_redirect" value="-1" checked> <?php
|
| 18 |
-
<input type="radio" name="jj4t3_custom_redirect_redirect" value="1"> <?php
|
| 19 |
-
<input type="radio" name="jj4t3_custom_redirect_redirect" value="0"> <?php
|
| 20 |
</td>
|
| 21 |
</tr>
|
| 22 |
<tr>
|
| 23 |
-
<th><?php
|
| 24 |
<td>
|
| 25 |
-
<input type="radio" name="jj4t3_custom_redirect_log" value="-1" checked> <?php
|
| 26 |
-
<input type="radio" name="jj4t3_custom_redirect_log" value="1"> <?php
|
| 27 |
-
<input type="radio" name="jj4t3_custom_redirect_log" value="0"> <?php
|
| 28 |
</td>
|
| 29 |
</tr>
|
| 30 |
<tr>
|
| 31 |
-
<th><?php
|
| 32 |
<td>
|
| 33 |
-
<input type="radio" name="jj4t3_custom_redirect_alert" value="-1" checked> <?php
|
| 34 |
-
<input type="radio" name="jj4t3_custom_redirect_alert" value="1"> <?php
|
| 35 |
-
<input type="radio" name="jj4t3_custom_redirect_alert" value="0"> <?php
|
| 36 |
</td>
|
| 37 |
</tr>
|
| 38 |
<tr>
|
| 39 |
-
<th><?php
|
| 40 |
<td>
|
| 41 |
<input type="text" size="40" name="jj4t3_custom_redirect" id="jj4t3_redirect_url" value="">
|
| 42 |
-
<p class="description"><?php
|
| 43 |
<input type="hidden" value="" id="jj4t3_redirect_404" name="jj4t3_redirect_404">
|
| 44 |
<input type="hidden" value="<?php echo wp_create_nonce( "jj4t3_redirect_nonce" ); ?>" id="jj4t3_redirect_nonce" name="jj4t3_redirect_nonce">
|
| 45 |
<input type="hidden" value="jj4t3_redirect_form" name="action">
|
|
@@ -48,14 +49,14 @@ defined( 'ABSPATH' ) or exit; ?>
|
|
| 48 |
<?php $statuses = jj4t3_redirect_statuses(); ?>
|
| 49 |
<?php if ( ! empty( $statuses ) ) : ?>
|
| 50 |
<tr>
|
| 51 |
-
<th><?php
|
| 52 |
<td>
|
| 53 |
<select name="jj4t3_custom_redirect_type" id="jj4t3_custom_redirect_type">
|
| 54 |
<?php foreach ( $statuses as $status => $label ) : ?>
|
| 55 |
-
<option value='<?php echo $status; ?>' <?php selected( jj4t3_get_option( 'redirect_type' ), $status ); ?>><?php echo $label; ?></option>
|
| 56 |
<?php endforeach; ?>
|
| 57 |
</select>
|
| 58 |
-
<p class="description jj4t3-p-desc"><?php
|
| 59 |
</td>
|
| 60 |
</tr>
|
| 61 |
<?php endif; ?>
|
| 1 |
<?php
|
| 2 |
|
| 3 |
// If this file is called directly, abort.
|
| 4 |
+
defined( 'ABSPATH' ) || exit;
|
| 5 |
+
?>
|
| 6 |
|
| 7 |
<div id="jj4t3-redirect-modal" style="display:none;">
|
| 8 |
<div id="jj4t3-thickbox-content" class="wrap">
|
| 9 |
<form id="jj4t3_custom_redirect_form" action="javascript:void(0)">
|
| 10 |
<table class="form-table">
|
| 11 |
<tr>
|
| 12 |
+
<th><?php esc_html_e( 'Redirecting from', '404-to-301' ); ?> :</th>
|
| 13 |
<td><strong><p id="jj4t3_redirect_404_text"></p></strong></td>
|
| 14 |
</tr>
|
| 15 |
<tr>
|
| 16 |
+
<th><?php esc_html_e( 'Redirect', '404-to-301' ); ?> :</th>
|
| 17 |
<td>
|
| 18 |
+
<input type="radio" name="jj4t3_custom_redirect_redirect" value="-1" checked> <?php esc_html_e( 'Default', '404-to-301' ); ?>
|
| 19 |
+
<input type="radio" name="jj4t3_custom_redirect_redirect" value="1"> <?php esc_html_e( 'Enable', '404-to-301' ); ?>
|
| 20 |
+
<input type="radio" name="jj4t3_custom_redirect_redirect" value="0"> <?php esc_html_e( 'Disable', '404-to-301' ); ?>
|
| 21 |
</td>
|
| 22 |
</tr>
|
| 23 |
<tr>
|
| 24 |
+
<th><?php esc_html_e( 'Error logging', '404-to-301' ); ?> :</th>
|
| 25 |
<td>
|
| 26 |
+
<input type="radio" name="jj4t3_custom_redirect_log" value="-1" checked> <?php esc_html_e( 'Default', '404-to-301' ); ?>
|
| 27 |
+
<input type="radio" name="jj4t3_custom_redirect_log" value="1"> <?php esc_html_e( 'Enable', '404-to-301' ); ?>
|
| 28 |
+
<input type="radio" name="jj4t3_custom_redirect_log" value="0"> <?php esc_html_e( 'Disable', '404-to-301' ); ?>
|
| 29 |
</td>
|
| 30 |
</tr>
|
| 31 |
<tr>
|
| 32 |
+
<th><?php esc_html_e( 'Email alert', '404-to-301' ); ?> :</th>
|
| 33 |
<td>
|
| 34 |
+
<input type="radio" name="jj4t3_custom_redirect_alert" value="-1" checked> <?php esc_html_e( 'Default', '404-to-301' ); ?>
|
| 35 |
+
<input type="radio" name="jj4t3_custom_redirect_alert" value="1"> <?php esc_html_e( 'Enable', '404-to-301' ); ?>
|
| 36 |
+
<input type="radio" name="jj4t3_custom_redirect_alert" value="0"> <?php esc_html_e( 'Disable', '404-to-301' ); ?>
|
| 37 |
</td>
|
| 38 |
</tr>
|
| 39 |
<tr>
|
| 40 |
+
<th><?php esc_html_e( 'Redirect to', '404-to-301' ); ?> :</th>
|
| 41 |
<td>
|
| 42 |
<input type="text" size="40" name="jj4t3_custom_redirect" id="jj4t3_redirect_url" value="">
|
| 43 |
+
<p class="description"><?php esc_html_e( 'Enter the url if you want to set custom redirect for above 404 path. Enter the full url including http://. Leave empty if you want to follow default settings.', '404-to-301' ); ?></p>
|
| 44 |
<input type="hidden" value="" id="jj4t3_redirect_404" name="jj4t3_redirect_404">
|
| 45 |
<input type="hidden" value="<?php echo wp_create_nonce( "jj4t3_redirect_nonce" ); ?>" id="jj4t3_redirect_nonce" name="jj4t3_redirect_nonce">
|
| 46 |
<input type="hidden" value="jj4t3_redirect_form" name="action">
|
| 49 |
<?php $statuses = jj4t3_redirect_statuses(); ?>
|
| 50 |
<?php if ( ! empty( $statuses ) ) : ?>
|
| 51 |
<tr>
|
| 52 |
+
<th><?php esc_html_e( 'Redirect type', '404-to-301' ); ?></th>
|
| 53 |
<td>
|
| 54 |
<select name="jj4t3_custom_redirect_type" id="jj4t3_custom_redirect_type">
|
| 55 |
<?php foreach ( $statuses as $status => $label ) : ?>
|
| 56 |
+
<option value='<?php echo esc_attr( $status ); ?>' <?php selected( jj4t3_get_option( 'redirect_type' ), $status ); ?>><?php echo esc_attr( $label ); ?></option>
|
| 57 |
<?php endforeach; ?>
|
| 58 |
</select>
|
| 59 |
+
<p class="description jj4t3-p-desc"><?php esc_html_e( 'Select redirect type to override default one.', '404-to-301' ); ?></p>
|
| 60 |
</td>
|
| 61 |
</tr>
|
| 62 |
<?php endif; ?>
|
includes/functions/jj4t3-general-functions.php
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?php
|
| 2 |
|
| 3 |
// If this file is called directly, abort.
|
| 4 |
-
defined( 'ABSPATH' )
|
| 5 |
|
| 6 |
/**
|
| 7 |
* Get plugin setting value.
|
|
@@ -9,7 +9,7 @@ defined( 'ABSPATH' ) or exit;
|
|
| 9 |
* Handle the exceptional case properly
|
| 10 |
* and return false.
|
| 11 |
*
|
| 12 |
-
* @param mixed $option
|
| 13 |
* @param mixed $default Default value if not exist.
|
| 14 |
*
|
| 15 |
* @since 3.0.0
|
|
@@ -43,7 +43,7 @@ function jj4t3_get_option( $option = false, $default = false ) {
|
|
| 43 |
* update the the array only.
|
| 44 |
*
|
| 45 |
* @param string $option Option name.
|
| 46 |
-
* @param mixed
|
| 47 |
*
|
| 48 |
* @since 3.0.0
|
| 49 |
* @access public
|
|
@@ -219,6 +219,9 @@ function jj4t3_redirect_type() {
|
|
| 219 |
* DO NOT relay on this function for serious actions
|
| 220 |
* as it may be wrong in some cases.
|
| 221 |
*
|
|
|
|
|
|
|
|
|
|
| 222 |
* @global bool $is_gecko
|
| 223 |
* @global bool $is_opera
|
| 224 |
* @global bool $is_safari
|
|
@@ -228,9 +231,6 @@ function jj4t3_redirect_type() {
|
|
| 228 |
* @global bool $is_NS4
|
| 229 |
* @global bool $is_lynx
|
| 230 |
*
|
| 231 |
-
* @since 3.0.0
|
| 232 |
-
* @access private
|
| 233 |
-
*
|
| 234 |
* @return boolean
|
| 235 |
*/
|
| 236 |
function jj4t3_is_human() {
|
|
@@ -271,7 +271,7 @@ function jj4t3_is_human() {
|
|
| 271 |
* You can modify this to use more status using the filter.
|
| 272 |
* Registering filter - "jj4t3_redirect_statuses".
|
| 273 |
*
|
| 274 |
-
* @link
|
| 275 |
* @since 3.0.0
|
| 276 |
* @access private
|
| 277 |
*
|
|
@@ -314,11 +314,11 @@ function jj4t3_redirect_statuses() {
|
|
| 314 |
function jj4t3_log_columns() {
|
| 315 |
|
| 316 |
$columns = array(
|
| 317 |
-
'date'
|
| 318 |
-
'url'
|
| 319 |
-
'ref'
|
| 320 |
-
'ip'
|
| 321 |
-
'ua'
|
| 322 |
'redirect' => __( 'Redirect', '404-to-301' ),
|
| 323 |
);
|
| 324 |
|
|
@@ -345,8 +345,8 @@ function jj4t3_log_columns() {
|
|
| 345 |
* or empty.
|
| 346 |
* Output will be trimmed.
|
| 347 |
*
|
| 348 |
-
* @param string $key
|
| 349 |
-
* @param mixed
|
| 350 |
*
|
| 351 |
* @since 3.0.0
|
| 352 |
* @access public
|
|
@@ -361,15 +361,15 @@ function jj4t3_from_request( $key = '', $default = '' ) {
|
|
| 361 |
}
|
| 362 |
|
| 363 |
// Return default value if key not set.
|
| 364 |
-
if ( ! isset( $_REQUEST[ $key ] ) ) {
|
| 365 |
return $default;
|
| 366 |
}
|
| 367 |
|
| 368 |
// Trim output.
|
| 369 |
-
if ( is_string( $_REQUEST[ $key ] ) ) {
|
| 370 |
-
return trim( $_REQUEST[ $key ] );
|
| 371 |
-
} elseif ( is_array( $_REQUEST[ $key ] ) ) {
|
| 372 |
-
return array_map( 'trim', $_REQUEST[ $key ] );
|
| 373 |
}
|
| 374 |
|
| 375 |
return $default;
|
| 1 |
<?php
|
| 2 |
|
| 3 |
// If this file is called directly, abort.
|
| 4 |
+
defined( 'ABSPATH' ) || exit;
|
| 5 |
|
| 6 |
/**
|
| 7 |
* Get plugin setting value.
|
| 9 |
* Handle the exceptional case properly
|
| 10 |
* and return false.
|
| 11 |
*
|
| 12 |
+
* @param mixed $option Option name.
|
| 13 |
* @param mixed $default Default value if not exist.
|
| 14 |
*
|
| 15 |
* @since 3.0.0
|
| 43 |
* update the the array only.
|
| 44 |
*
|
| 45 |
* @param string $option Option name.
|
| 46 |
+
* @param mixed $value Value to update.
|
| 47 |
*
|
| 48 |
* @since 3.0.0
|
| 49 |
* @access public
|
| 219 |
* DO NOT relay on this function for serious actions
|
| 220 |
* as it may be wrong in some cases.
|
| 221 |
*
|
| 222 |
+
* @since 3.0.0
|
| 223 |
+
* @access private
|
| 224 |
+
*
|
| 225 |
* @global bool $is_gecko
|
| 226 |
* @global bool $is_opera
|
| 227 |
* @global bool $is_safari
|
| 231 |
* @global bool $is_NS4
|
| 232 |
* @global bool $is_lynx
|
| 233 |
*
|
|
|
|
|
|
|
|
|
|
| 234 |
* @return boolean
|
| 235 |
*/
|
| 236 |
function jj4t3_is_human() {
|
| 271 |
* You can modify this to use more status using the filter.
|
| 272 |
* Registering filter - "jj4t3_redirect_statuses".
|
| 273 |
*
|
| 274 |
+
* @link https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP status codes.
|
| 275 |
* @since 3.0.0
|
| 276 |
* @access private
|
| 277 |
*
|
| 314 |
function jj4t3_log_columns() {
|
| 315 |
|
| 316 |
$columns = array(
|
| 317 |
+
'date' => __( 'Date', '404-to-301' ),
|
| 318 |
+
'url' => __( '404 Path', '404-to-301' ),
|
| 319 |
+
'ref' => __( 'From', '404-to-301' ),
|
| 320 |
+
'ip' => __( 'IP Address', '404-to-301' ),
|
| 321 |
+
'ua' => __( 'User Agent', '404-to-301' ),
|
| 322 |
'redirect' => __( 'Redirect', '404-to-301' ),
|
| 323 |
);
|
| 324 |
|
| 345 |
* or empty.
|
| 346 |
* Output will be trimmed.
|
| 347 |
*
|
| 348 |
+
* @param string $key Key to get from request.
|
| 349 |
+
* @param mixed $default Default value.
|
| 350 |
*
|
| 351 |
* @since 3.0.0
|
| 352 |
* @access public
|
| 361 |
}
|
| 362 |
|
| 363 |
// Return default value if key not set.
|
| 364 |
+
if ( ! isset( $_REQUEST[ $key ] ) ) { // phpcs:ignore
|
| 365 |
return $default;
|
| 366 |
}
|
| 367 |
|
| 368 |
// Trim output.
|
| 369 |
+
if ( is_string( $_REQUEST[ $key ] ) ) { // phpcs:ignore
|
| 370 |
+
return trim( $_REQUEST[ $key ] ); // phpcs:ignore
|
| 371 |
+
} elseif ( is_array( $_REQUEST[ $key ] ) ) { // phpcs:ignore
|
| 372 |
+
return array_map( 'trim', $_REQUEST[ $key ] ); // phpcs:ignore
|
| 373 |
}
|
| 374 |
|
| 375 |
return $default;
|
languages/404-to-301.pot
CHANGED
|
@@ -2,9 +2,9 @@
|
|
| 2 |
# This file is distributed under the GPL-2.0+.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: 404 to 301 - Redirect, Log and Notify 404 Errors 3.0
|
| 6 |
"Report-Msgid-Bugs-To: https://duckdev.com/products/404-to-301/\n"
|
| 7 |
-
"POT-Creation-Date: 2021-10-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=utf-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
|
@@ -130,9 +130,9 @@ msgid "Delete"
|
|
| 130 |
msgstr ""
|
| 131 |
|
| 132 |
#: includes/admin/class-jj4t3-log-listing.php:624
|
| 133 |
-
#: includes/admin/views/custom-redirect.php:
|
| 134 |
-
#: includes/admin/views/custom-redirect.php:
|
| 135 |
-
#: includes/admin/views/custom-redirect.php:
|
| 136 |
msgid "Default"
|
| 137 |
msgstr ""
|
| 138 |
|
|
@@ -164,57 +164,57 @@ msgstr ""
|
|
| 164 |
msgid "by <a href=\"%s\">Joel James</a>"
|
| 165 |
msgstr ""
|
| 166 |
|
| 167 |
-
#: includes/admin/views/custom-redirect.php:
|
| 168 |
msgid "Redirecting from"
|
| 169 |
msgstr ""
|
| 170 |
|
| 171 |
-
#: includes/admin/views/custom-redirect.php:
|
| 172 |
#: includes/functions/jj4t3-general-functions.php:322
|
| 173 |
msgid "Redirect"
|
| 174 |
msgstr ""
|
| 175 |
|
| 176 |
-
#: includes/admin/views/custom-redirect.php:18
|
| 177 |
-
#: includes/admin/views/custom-redirect.php:26
|
| 178 |
-
#: includes/admin/views/custom-redirect.php:34
|
| 179 |
-
msgid "Enable"
|
| 180 |
-
msgstr ""
|
| 181 |
-
|
| 182 |
#: includes/admin/views/custom-redirect.php:19
|
| 183 |
#: includes/admin/views/custom-redirect.php:27
|
| 184 |
#: includes/admin/views/custom-redirect.php:35
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
msgid "Disable"
|
| 186 |
msgstr ""
|
| 187 |
|
| 188 |
-
#: includes/admin/views/custom-redirect.php:
|
| 189 |
msgid "Error logging"
|
| 190 |
msgstr ""
|
| 191 |
|
| 192 |
-
#: includes/admin/views/custom-redirect.php:
|
| 193 |
msgid "Email alert"
|
| 194 |
msgstr ""
|
| 195 |
|
| 196 |
-
#: includes/admin/views/custom-redirect.php:
|
| 197 |
#: includes/admin/views/settings.php:30
|
| 198 |
msgid "Redirect to"
|
| 199 |
msgstr ""
|
| 200 |
|
| 201 |
-
#: includes/admin/views/custom-redirect.php:
|
| 202 |
msgid ""
|
| 203 |
"Enter the url if you want to set custom redirect for above 404 path. Enter "
|
| 204 |
"the full url including http://. Leave empty if you want to follow default "
|
| 205 |
"settings."
|
| 206 |
msgstr ""
|
| 207 |
|
| 208 |
-
#: includes/admin/views/custom-redirect.php:
|
| 209 |
#: includes/admin/views/settings.php:17
|
| 210 |
msgid "Redirect type"
|
| 211 |
msgstr ""
|
| 212 |
|
| 213 |
-
#: includes/admin/views/custom-redirect.php:
|
| 214 |
msgid "Select redirect type to override default one."
|
| 215 |
msgstr ""
|
| 216 |
|
| 217 |
-
#: includes/admin/views/custom-redirect.php:
|
| 218 |
msgid "Save Redirect"
|
| 219 |
msgstr ""
|
| 220 |
|
| 2 |
# This file is distributed under the GPL-2.0+.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: 404 to 301 - Redirect, Log and Notify 404 Errors 3.1.0\n"
|
| 6 |
"Report-Msgid-Bugs-To: https://duckdev.com/products/404-to-301/\n"
|
| 7 |
+
"POT-Creation-Date: 2021-10-18 05:32:30+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=utf-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 130 |
msgstr ""
|
| 131 |
|
| 132 |
#: includes/admin/class-jj4t3-log-listing.php:624
|
| 133 |
+
#: includes/admin/views/custom-redirect.php:18
|
| 134 |
+
#: includes/admin/views/custom-redirect.php:26
|
| 135 |
+
#: includes/admin/views/custom-redirect.php:34
|
| 136 |
msgid "Default"
|
| 137 |
msgstr ""
|
| 138 |
|
| 164 |
msgid "by <a href=\"%s\">Joel James</a>"
|
| 165 |
msgstr ""
|
| 166 |
|
| 167 |
+
#: includes/admin/views/custom-redirect.php:12
|
| 168 |
msgid "Redirecting from"
|
| 169 |
msgstr ""
|
| 170 |
|
| 171 |
+
#: includes/admin/views/custom-redirect.php:16
|
| 172 |
#: includes/functions/jj4t3-general-functions.php:322
|
| 173 |
msgid "Redirect"
|
| 174 |
msgstr ""
|
| 175 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 176 |
#: includes/admin/views/custom-redirect.php:19
|
| 177 |
#: includes/admin/views/custom-redirect.php:27
|
| 178 |
#: includes/admin/views/custom-redirect.php:35
|
| 179 |
+
msgid "Enable"
|
| 180 |
+
msgstr ""
|
| 181 |
+
|
| 182 |
+
#: includes/admin/views/custom-redirect.php:20
|
| 183 |
+
#: includes/admin/views/custom-redirect.php:28
|
| 184 |
+
#: includes/admin/views/custom-redirect.php:36
|
| 185 |
msgid "Disable"
|
| 186 |
msgstr ""
|
| 187 |
|
| 188 |
+
#: includes/admin/views/custom-redirect.php:24
|
| 189 |
msgid "Error logging"
|
| 190 |
msgstr ""
|
| 191 |
|
| 192 |
+
#: includes/admin/views/custom-redirect.php:32
|
| 193 |
msgid "Email alert"
|
| 194 |
msgstr ""
|
| 195 |
|
| 196 |
+
#: includes/admin/views/custom-redirect.php:40
|
| 197 |
#: includes/admin/views/settings.php:30
|
| 198 |
msgid "Redirect to"
|
| 199 |
msgstr ""
|
| 200 |
|
| 201 |
+
#: includes/admin/views/custom-redirect.php:43
|
| 202 |
msgid ""
|
| 203 |
"Enter the url if you want to set custom redirect for above 404 path. Enter "
|
| 204 |
"the full url including http://. Leave empty if you want to follow default "
|
| 205 |
"settings."
|
| 206 |
msgstr ""
|
| 207 |
|
| 208 |
+
#: includes/admin/views/custom-redirect.php:52
|
| 209 |
#: includes/admin/views/settings.php:17
|
| 210 |
msgid "Redirect type"
|
| 211 |
msgstr ""
|
| 212 |
|
| 213 |
+
#: includes/admin/views/custom-redirect.php:59
|
| 214 |
msgid "Select redirect type to override default one."
|
| 215 |
msgstr ""
|
| 216 |
|
| 217 |
+
#: includes/admin/views/custom-redirect.php:66
|
| 218 |
msgid "Save Redirect"
|
| 219 |
msgstr ""
|
| 220 |
|
readme.txt
CHANGED
|
@@ -3,8 +3,8 @@ Contributors: joelcj91,duckdev
|
|
| 3 |
Tags: 404, 301, 302, 307, not found, 404 redirect, 404 to 301, 301 redirect, seo redirect, error redirect, 404 seo, custom 404 page
|
| 4 |
Donate link: https://www.paypal.me/JoelCJ
|
| 5 |
Requires at least: 3.5
|
| 6 |
-
Tested up to: 5.
|
| 7 |
-
Stable tag: 3.0
|
| 8 |
Requires PHP: 5.6
|
| 9 |
License: GPLv2 or later
|
| 10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
|
@@ -128,10 +128,15 @@ Bug reports for 404 to 301 are always welcome. [Report here](https://duckdev.com
|
|
| 128 |
|
| 129 |
== Changelog ==
|
| 130 |
|
| 131 |
-
= 3.0
|
| 132 |
**👌 Improvements**
|
| 133 |
|
| 134 |
* Tested with WP 5.8.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
* Added nonce verification for bulk actions.
|
| 136 |
|
| 137 |
= 3.0.8 (12/06/2021) =
|
|
@@ -440,8 +445,8 @@ Bug reports for 404 to 301 are always welcome. [Report here](https://duckdev.com
|
|
| 440 |
|
| 441 |
== Upgrade Notice ==
|
| 442 |
|
| 443 |
-
= 3.0
|
| 444 |
**👌 Improvements**
|
| 445 |
|
| 446 |
* Tested with WP 5.8.
|
| 447 |
-
* Added
|
| 3 |
Tags: 404, 301, 302, 307, not found, 404 redirect, 404 to 301, 301 redirect, seo redirect, error redirect, 404 seo, custom 404 page
|
| 4 |
Donate link: https://www.paypal.me/JoelCJ
|
| 5 |
Requires at least: 3.5
|
| 6 |
+
Tested up to: 5.8
|
| 7 |
+
Stable tag: 3.1.0
|
| 8 |
Requires PHP: 5.6
|
| 9 |
License: GPLv2 or later
|
| 10 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 128 |
|
| 129 |
== Changelog ==
|
| 130 |
|
| 131 |
+
= 3.1.0 (18/10/2021) =
|
| 132 |
**👌 Improvements**
|
| 133 |
|
| 134 |
* Tested with WP 5.8.
|
| 135 |
+
* Added sanitization.
|
| 136 |
+
|
| 137 |
+
= 3.0.9 (06/10/2021) =
|
| 138 |
+
**👌 Improvements**
|
| 139 |
+
|
| 140 |
* Added nonce verification for bulk actions.
|
| 141 |
|
| 142 |
= 3.0.8 (12/06/2021) =
|
| 445 |
|
| 446 |
== Upgrade Notice ==
|
| 447 |
|
| 448 |
+
= 3.1.0 (18/10/2021) =
|
| 449 |
**👌 Improvements**
|
| 450 |
|
| 451 |
* Tested with WP 5.8.
|
| 452 |
+
* Added sanitization.
|
