PluginProbe ʕ •ᴥ•ʔ
Permalink Manager Lite / 2.2.4
Permalink Manager Lite v2.2.4
2.5.3.4 2.2.18 2.2.19.2 2.2.19.3 2.2.19.3.1 2.2.2 2.2.20 2.2.20.1 2.2.20.3 2.2.4 2.2.5 2.2.6 2.2.7.2 2.2.7.3 2.2.7.5 2.2.7.6 2.2.8.4 2.2.8.5 2.2.8.6 2.2.8.7 2.2.8.9 2.2.9.1 2.2.9.2 2.2.9.2.1 2.2.9.3 2.2.9.4 2.2.9.6 2.2.9.7 2.2.9.9 2.3.0 2.3.1.1 2.4.0 2.4.1 2.4.1.2 2.4.1.3 2.4.1.4 2.4.1.5 2.4.1.6 2.4.2 2.4.2.1 2.4.3 2.4.3.1 2.4.3.2 2.4.3.3 2.4.3.4 2.4.4 2.4.4.1 2.4.4.2 2.4.4.3 2.5.0 2.5.1 2.5.1.1 2.5.1.2 2.5.1.3 2.5.1.4 2.5.2 2.5.2.1 2.5.2.2 2.5.2.3 2.5.2.4 2.5.3 2.5.3.1 2.5.3.2 2.5.3.3 trunk 0.2 0.3 0.3.1 0.3.2 0.3.3 0.3.4 0.4 0.4.1 0.4.2 0.4.3 0.4.4 0.4.6 0.4.7 0.4.8 0.4.9 0.5.3 0.5.4 1.0.0 1.0.1 1.0.4 1.1.0 1.1.1 1.1.2 1.11.6.3 2.0.0 2.0.3 2.0.4 2.0.4.3 2.0.5.1 2.0.5.2 2.0.5.3 2.0.5.3.1 2.0.5.4 2.0.5.4a 2.0.5.5 2.0.5.6 2.0.5.6.1 2.0.5.7 2.0.5.9a 2.0.6.2.1 2.0.6.2a 2.0.6.3 2.1.0 2.1.1 2.1.2.4 2.2.0 2.2.1.1 2.2.1.2 2.2.11 2.2.12 2.2.13.1 2.2.14 2.2.15.1 2.2.16 2.2.17
permalink-manager / permalink-manager.php
permalink-manager Last commit date
includes 6 years ago languages 7 years ago out 7 years ago LICENSE.txt 7 years ago README.txt 6 years ago permalink-manager.php 7 years ago
permalink-manager.php
334 lines
1 <?php
2
3 /**
4 * Plugin Name: Permalink Manager Lite
5 * Plugin URI: https://permalinkmanager.pro?utm_source=plugin
6 * Description: Advanced plugin that allows to set-up custom permalinks (bulk editors included), slugs and permastructures (WooCommerce compatible).
7 * Version: 2.2.4
8 * Author: Maciej Bis
9 * Author URI: http://maciejbis.net/
10 * License: GPL-2.0+
11 * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12 * Text Domain: permalink-manager
13 * Domain Path: /languages
14 */
15
16 // If this file is called directly or plugin is already defined, abort.
17 if (!defined('WPINC')) {
18 die;
19 }
20
21 // Define the directories used to load plugin files.
22 define( 'PERMALINK_MANAGER_PLUGIN_NAME', 'Permalink Manager' );
23 define( 'PERMALINK_MANAGER_PLUGIN_SLUG', 'permalink-manager' );
24 define( 'PERMALINK_MANAGER_VERSION', '2.2.4' );
25 define( 'PERMALINK_MANAGER_FILE', __FILE__ );
26 define( 'PERMALINK_MANAGER_DIR', untrailingslashit(dirname(__FILE__)) );
27 define( 'PERMALINK_MANAGER_BASENAME', dirname(plugin_basename(__FILE__)));
28 define( 'PERMALINK_MANAGER_URL', untrailingslashit( plugins_url('', __FILE__) ) );
29 define( 'PERMALINK_MANAGER_WEBSITE', 'http://permalinkmanager.pro?utm_source=plugin' );
30 define( 'PERMALINK_MANAGER_DONATE', 'https://www.paypal.me/Bismit' );
31
32 class Permalink_Manager_Class {
33
34 public $permalink_manager_options_page, $permalink_manager_options;
35 public $sections, $functions, $permalink_manager_before_sections_html, $permalink_manager_after_sections_html;
36
37 /**
38 * Get options from DB, load subclasses & hooks
39 */
40 public function __construct() {
41 $this->include_subclassess();
42 $this->register_init_hooks();
43 }
44
45 /**
46 * Include back-end classess and set their instances
47 */
48 function include_subclassess() {
49 // WP_List_Table needed for post types & taxnomies editors
50 if( ! class_exists( 'WP_List_Table' ) ) {
51 require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
52 }
53
54 $classes = array(
55 'core' => array(
56 'helper-functions' => 'Permalink_Manager_Helper_Functions',
57 'uri-functions-post' => 'Permalink_Manager_URI_Functions_Post',
58 'uri-functions-tax' => 'Permalink_Manager_URI_Functions_Tax',
59 'admin-functions' => 'Permalink_Manager_Admin_Functions',
60 'actions' => 'Permalink_Manager_Actions',
61 'third-parties' => 'Permalink_Manager_Third_Parties',
62 'core-functions' => 'Permalink_Manager_Core_Functions',
63 'gutenberg' => 'Permalink_Manager_Gutenberg',
64 'pro-functions' => 'Permalink_Manager_Pro_Functions'
65 ),
66 'views' => array(
67 'uri-editor' => 'Permalink_Manager_Uri_Editor',
68 'tools' => 'Permalink_Manager_Tools',
69 'permastructs' => 'Permalink_Manager_Permastructs',
70 'settings' => 'Permalink_Manager_Settings',
71 'debug' => 'Permalink_Manager_Debug',
72 'pro-addons' => 'Permalink_Manager_Pro_Addons',
73 'upgrade' => 'Permalink_Manager_Upgrade',
74 'help' => 'Permalink_Manager_Help',
75 'uri-editor-tax' => false,
76 'uri-editor-post' => false
77 )
78 );
79
80 // Load classes and set-up their instances
81 foreach($classes as $class_type => $classes_array) {
82 foreach($classes_array as $class => $class_name) {
83 $filename = PERMALINK_MANAGER_DIR . "/includes/{$class_type}/permalink-manager-{$class}.php";
84
85 if(file_exists($filename)) {
86 require_once $filename;
87 if($class_name) { $this->functions[$class] = new $class_name(); }
88 }
89 }
90 }
91 }
92
93 /**
94 * Register general hooks
95 */
96 public function register_init_hooks() {
97 // Localize plugin
98 add_action( 'init', array($this, 'localize_me'), 1 );
99
100 // Support deprecated hooks
101 add_action( 'plugins_loaded', array($this, 'deprecated_hooks'), 9 );
102
103 // Load globals & options
104 add_action( 'plugins_loaded', array($this, 'get_options_and_globals'), 9 );
105
106 // Legacy support
107 add_action( 'init', array($this, 'legacy_support'), 2 );
108
109 // Default settings & alerts
110 add_filter( 'permalink_manager_options', array($this, 'default_settings'), 1 );
111 add_filter( 'permalink_manager_alerts', array($this, 'default_alerts'), 1 );
112 }
113
114 /**
115 * Localize this plugin
116 */
117 function localize_me() {
118 load_plugin_textdomain( 'permalink-manager', false, PERMALINK_MANAGER_BASENAME . "/languages" );
119 }
120
121 /**
122 * Get options values & set global
123 */
124 public function get_options_and_globals() {
125 // 1. Globals with data stored in DB
126 global $permalink_manager_options, $permalink_manager_uris, $permalink_manager_permastructs, $permalink_manager_redirects, $permalink_manager_external_redirects;
127
128 $this->permalink_manager_options = $permalink_manager_options = apply_filters('permalink_manager_options', get_option('permalink-manager', array()));
129 $this->permalink_manager_uris = $permalink_manager_uris = apply_filters('permalink_manager_uris', get_option('permalink-manager-uris', array()));
130 $this->permalink_manager_permastructs = $permalink_manager_permastructs = apply_filters('permalink_manager_permastructs', get_option('permalink-manager-permastructs', array()));
131 $this->permalink_manager_redirects = $permalink_manager_redirects = apply_filters('permalink_manager_redirects', get_option('permalink-manager-redirects', array()));
132 $this->permalink_manager_external_redirects = $permalink_manager_external_redirects = apply_filters('permalink_manager_external_redirects', get_option('permalink-manager-external-redirects', array()));
133
134 // 2. Globals used to display additional content (eg. alerts)
135 global $permalink_manager_alerts, $permalink_manager_before_sections_html, $permalink_manager_after_sections_html;
136
137 $this->permalink_manager_alerts = $permalink_manager_alerts = apply_filters('permalink_manager_alerts', get_option('permalink-manager-alerts', array()));
138 $this->permalink_manager_before_sections_html = $permalink_manager_before_sections_html = apply_filters('permalink_manager_before_sections', '');
139 $this->permalink_manager_after_sections_html = $permalink_manager_after_sections_html = apply_filters('permalink_manager_after_sections', '');
140 }
141
142 /**
143 * Set the initial/default settings (including "Screen Options")
144 */
145 public function default_settings($settings) {
146 $all_taxonomies = Permalink_Manager_Helper_Functions::get_taxonomies_array();
147 $all_post_types = Permalink_Manager_Helper_Functions::get_post_types_array();
148
149 $default_settings = apply_filters('permalink_manager_default_options', array(
150 'screen-options' => array(
151 'per_page' => 20,
152 'post_statuses' => array('publish'),
153 'group' => false,
154 ),
155 'general' => array(
156 'auto_update_uris' => 0,
157 'show_native_slug_field' => 0,
158 'canonical_redirect' => 1,
159 'setup_redirects' => 1,
160 'redirect' => '301',
161 'trailing_slashes' => 0,
162 'pagination_redirect' => 0,
163 'auto_remove_duplicates' => 1,
164 'fix_language_mismatch' => 1,
165 'pmxi_import_support' => 0,
166 'yoast_breadcrumbs' => 0,
167 'force_custom_slugs' => 0,
168 'disable_slug_sanitization' => 0,
169 'partial_disable' => array(),
170 'deep_detect' => 1,
171 ),
172 'licence' => array()
173 ));
174
175 // Apply the default settings (if empty values) in all settings sections
176 foreach($default_settings as $group_name => $fields) {
177 foreach($fields as $field_name => $field) {
178 if(!isset($settings[$group_name][$field_name])) {
179 $settings[$group_name][$field_name] = $field;
180 }
181 }
182 }
183
184 return $settings;
185 }
186
187 /**
188 * Set the initial/default admin notices
189 */
190 public function default_alerts($alerts) {
191 $default_alerts = apply_filters('permalink_manager_default_alerts', array(
192 'june19promo' => array(
193 'txt' => sprintf(
194 __("Get access to extra features: full taxonomy and WooCommerce support, possibility to use custom fields inside the permalinks and more!<br /><strong>Buy Permalink Manager Pro <a href=\"%s\" target=\"_blank\">here</a> and save %s using \"%s\" coupon code!</strong> Valid until %s!", "permalink-manager"),
195 PERMALINK_MANAGER_WEBSITE . "&utm_campaign=discount_code",
196 '20&#37;',
197 'JUNE19',
198 '30.06'
199 ),
200 'type' => 'notice-info',
201 'show' => 'pro_hide',
202 'plugin_only' => true,
203 'until' => '2019-06-30'
204 )
205 ));
206
207 // Apply the default settings (if empty values) in all settings sections
208 return (array) $alerts + (array) $default_alerts;
209 }
210
211 /**
212 * Temporary hook
213 */
214 function legacy_support() {
215 global $permalink_manager_permastructs, $permalink_manager_options;
216
217 if(isset($permalink_manager_options['base-editor'])) {
218 $new_options['post_types'] = $permalink_manager_options['base-editor'];
219 update_option('permalink-manager-permastructs', $new_options);
220 }
221 else if(empty($permalink_manager_permastructs['post_types']) && empty($permalink_manager_permastructs['taxonomies']) && count($permalink_manager_permastructs) > 0) {
222 $new_options['post_types'] = $permalink_manager_permastructs;
223 update_option('permalink-manager-permastructs', $new_options);
224 }
225
226 // Adjust options structure
227 if(!empty($permalink_manager_options['miscellaneous'])) {
228 // Combine general & general
229 $permalink_manager_unfiltered_options['general'] = array_merge($permalink_manager_unfiltered_options['general'], $permalink_manager_unfiltered_options['miscellaneous']);
230
231 // Move licence key to different section
232 $permalink_manager_unfiltered_options['licence']['licence_key'] = (!empty($permalink_manager_unfiltered_options['miscellaneous']['license_key'])) ? $permalink_manager_unfiltered_options['miscellaneous']['license_key'] : "";
233
234 // Remove redundant keys
235 unset($permalink_manager_unfiltered_options['general']['license_key']);
236 unset($permalink_manager_unfiltered_options['miscellaneous']);
237 unset($permalink_manager_unfiltered_options['permalink_manager_options']);
238 unset($permalink_manager_unfiltered_options['_wp_http_referer']);
239 }
240
241 // Adjust "Force Custom Slugs" + "Sanitize" settings
242 if(!empty($permalink_manager_options['general']['force_custom_slugs']) && $permalink_manager_options['general']['force_custom_slugs'] == 2) {
243 $permalink_manager_unfiltered_options = $permalink_manager_options;
244
245 $permalink_manager_unfiltered_options['general']['force_custom_slugs'] = 1;
246 $permalink_manager_unfiltered_options['general']['disable_slug_sanitization'] = 1;
247 }
248
249 // Save the settings in database
250 if(!empty($permalink_manager_unfiltered_options)) {
251 update_option('permalink-manager', $permalink_manager_unfiltered_options);
252 }
253 }
254
255 /**
256 * Support deprecated hooks
257 */
258 function deprecated_hooks_list($filters = true) {
259 $deprecated_filters = array(
260 'permalink_manager_default_options' => 'permalink-manager-default-options',
261 'permalink_manager_options' => 'permalink-manager-options',
262 'permalink_manager_uris' => 'permalink-manager-uris',
263 'permalink_manager_alerts' => 'permalink-manager-alerts',
264 'permalink_manager_redirects' => 'permalink-manager-redirects',
265 'permalink_manager_external_redirects' => 'permalink-manager-external-redirects',
266 'permalink_manager_permastructs' => 'permalink-manager-permastructs',
267
268 'permalink_manager_alerts' => 'permalink-manager-alerts',
269 'permalink_manager_before_sections' => 'permalink-manager-before-sections',
270 'permalink_manager_sections' => 'permalink-manager-sections',
271 'permalink_manager_after_sections' => 'permalink-manager-after-sections',
272
273 'permalink_manager_field_args' => 'permalink-manager-field-args',
274 'permalink_manager_field_output' => 'permalink-manager-field-output',
275
276 'permalink_manager_deep_uri_detect' => 'permalink-manager-deep-uri-detect',
277 'permalink_manager_detect_uri' => 'permalink-manager-detect-uri',
278 'permalink_manager_detected_element_id' => 'permalink-manager-detected-initial-id',
279 'permalink_manager_detected_term_id' => 'permalink-manager-detected-term-id',
280 'permalink_manager_detected_post_id' => 'permalink-manager-detected-post-id',
281
282 'permalink_manager_primary_term' => 'permalink-manager-primary-term',
283 'permalink_manager_disabled_post_types' => 'permalink-manager-disabled-post-types',
284 'permalink_manager_disabled_taxonomies' => 'permalink-manager-disabled-taxonomies',
285 'permalink_manager_endpoints' => 'permalink-manager-endpoints',
286 'permalink_manager_filter_permalink_base' => 'permalink_manager-filter-permalink-base',
287 'permalink_manager_force_lowercase_uris' => 'permalink-manager-force-lowercase-uris',
288
289 'permalink_manager_uri_editor_extra_info' => 'permalink-manager-uri-editor-extra-info',
290 'permalink_manager_debug_fields' => 'permalink-manager-debug-fields',
291 'permalink_manager_permastructs_fields' => 'permalink-manager-permastructs-fields',
292 'permalink_manager_settings_fields' => 'permalink-manager-settings-fields',
293 'permalink_manager_tools_fields' => 'permalink-manager-tools-fields',
294
295 'permalink_manager_uri_editor_columns' => 'permalink-manager-uri-editor-columns',
296 'permalink_manager_uri_editor_column_content' => 'permalink-manager-uri-editor-column-content',
297 );
298
299 return ($filters) ? $deprecated_filters : array();
300 }
301
302 function deprecated_hooks() {
303 $deprecated_filters = (array) $this->deprecated_hooks_list(true);
304 foreach($deprecated_filters as $new => $old) {
305 add_filter($new, array($this, 'deprecated_hooks_mapping'), -1000, 8);
306 }
307 }
308
309 function deprecated_hooks_mapping($data) {
310 $deprecated_filters = $this->deprecated_hooks_list(true);
311 $filter = current_filter();
312
313 if(isset($deprecated_filters[$filter])) {
314 if(has_filter($deprecated_filters[$filter])) {
315 $args = func_get_args();
316 $data = apply_filters_ref_array($deprecated_filters[$filter], $args);
317 }
318 }
319
320 return $data;
321 }
322
323 }
324
325 /**
326 * Begins execution of the plugin.
327 */
328 function run_permalink_manager() {
329 global $permalink_manager;
330
331 $permalink_manager = new Permalink_Manager_Class();
332 }
333 run_permalink_manager();
334