PluginProbe ʕ •ᴥ•ʔ
Permalink Manager Lite / 2.2.1.2
Permalink Manager Lite v2.2.1.2
2.5.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 7 years ago languages 7 years ago out 7 years ago LICENSE.txt 7 years ago README.txt 7 years ago permalink-manager.php 7 years ago
permalink-manager.php
331 lines
1 <?php
2
3 /**
4 * Plugin Name: Permalink Manager Pro
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.1.2
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.1.2' );
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 'force_custom_slugs' => 0,
157 'disable_slug_sanitization' => 0,
158 'show_native_slug_field' => 0,
159 'auto_update_uris' => 0,
160 'setup_redirects' => 1,
161 'redirect' => '301',
162 'canonical_redirect' => 1,
163 'trailing_slashes' => 0,
164 'pagination_redirect' => 0,
165 'auto_remove_duplicates' => 1,
166 'partial_disable' => array(),
167 'deep_detect' => 1,
168 'fix_language_mismatch' => 1
169 ),
170 'licence' => array()
171 ));
172
173 // Apply the default settings (if empty values) in all settings sections
174 foreach($default_settings as $group_name => $fields) {
175 foreach($fields as $field_name => $field) {
176 if(!isset($settings[$group_name][$field_name])) {
177 $settings[$group_name][$field_name] = $field;
178 }
179 }
180 }
181
182 return $settings;
183 }
184
185 /**
186 * Set the initial/default admin notices
187 */
188 public function default_alerts($alerts) {
189 $default_alerts = apply_filters('permalink_manager_default_alerts', array(
190 'spring' => array(
191 'txt' => sprintf(
192 __("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"),
193 PERMALINK_MANAGER_WEBSITE,
194 '20&#37;',
195 'SPRING',
196 '31.03'
197 ),
198 'type' => 'notice-info',
199 'show' => 'pro_hide',
200 'plugin_only' => true,
201 'until' => '2018-04-01'
202 )
203 ));
204
205 // Apply the default settings (if empty values) in all settings sections
206 return (array) $alerts + (array) $default_alerts;
207 }
208
209 /**
210 * Temporary hook
211 */
212 function legacy_support() {
213 global $permalink_manager_permastructs, $permalink_manager_options;
214
215 if(isset($permalink_manager_options['base-editor'])) {
216 $new_options['post_types'] = $permalink_manager_options['base-editor'];
217 update_option('permalink-manager-permastructs', $new_options);
218 }
219 else if(empty($permalink_manager_permastructs['post_types']) && empty($permalink_manager_permastructs['taxonomies']) && count($permalink_manager_permastructs) > 0) {
220 $new_options['post_types'] = $permalink_manager_permastructs;
221 update_option('permalink-manager-permastructs', $new_options);
222 }
223
224 // Adjust options structure
225 if(!empty($permalink_manager_options['miscellaneous'])) {
226 // Combine general & general
227 $permalink_manager_unfiltered_options['general'] = array_merge($permalink_manager_unfiltered_options['general'], $permalink_manager_unfiltered_options['miscellaneous']);
228
229 // Move licence key to different section
230 $permalink_manager_unfiltered_options['licence']['licence_key'] = (!empty($permalink_manager_unfiltered_options['miscellaneous']['license_key'])) ? $permalink_manager_unfiltered_options['miscellaneous']['license_key'] : "";
231
232 // Remove redundant keys
233 unset($permalink_manager_unfiltered_options['general']['license_key']);
234 unset($permalink_manager_unfiltered_options['miscellaneous']);
235 unset($permalink_manager_unfiltered_options['permalink_manager_options']);
236 unset($permalink_manager_unfiltered_options['_wp_http_referer']);
237 }
238
239 // Adjust "Force Custom Slugs" + "Sanitize" settings
240 if(!empty($permalink_manager_options['general']['force_custom_slugs']) && $permalink_manager_options['general']['force_custom_slugs'] == 2) {
241 $permalink_manager_unfiltered_options = $permalink_manager_options;
242
243 $permalink_manager_unfiltered_options['general']['force_custom_slugs'] = 1;
244 $permalink_manager_unfiltered_options['general']['disable_slug_sanitization'] = 1;
245 }
246
247 // Save the settings in database
248 if(!empty($permalink_manager_unfiltered_options)) {
249 update_option('permalink-manager', $permalink_manager_unfiltered_options);
250 }
251 }
252
253 /**
254 * Support deprecated hooks
255 */
256 function deprecated_hooks_list($filters = true) {
257 $deprecated_filters = array(
258 'permalink_manager_options' => 'permalink-manager-options',
259 'permalink_manager_uris' => 'permalink-manager-uris',
260 'permalink_manager_alerts' => 'permalink-manager-alerts',
261 'permalink_manager_redirects' => 'permalink-manager-redirects',
262 'permalink_manager_external_redirects' => 'permalink-manager-external-redirects',
263 'permalink_manager_permastructs' => 'permalink-manager-permastructs',
264
265 'permalink_manager_alerts' => 'permalink-manager-alerts',
266 'permalink_manager_before_sections' => 'permalink-manager-before-sections',
267 'permalink_manager_sections' => 'permalink-manager-sections',
268 'permalink_manager_after_sections' => 'permalink-manager-after-sections',
269
270 'permalink_manager_field_args' => 'permalink-manager-field-args',
271 'permalink_manager_field_output' => 'permalink-manager-field-output',
272
273 'permalink_manager_deep_uri_detect' => 'permalink-manager-deep-uri-detect',
274 'permalink_manager_detect_uri' => 'permalink-manager-detect-uri',
275 'permalink_manager_detected_element_id' => 'permalink-manager-detected-initial-id',
276 'permalink_manager_detected_term_id' => 'permalink-manager-detected-term-id',
277 'permalink_manager_detected_post_id' => 'permalink-manager-detected-post-id',
278
279 'permalink_manager_primary_term' => 'permalink-manager-primary-term',
280 'permalink_manager_disabled_post_types' => 'permalink-manager-disabled-post-types',
281 'permalink_manager_disabled_taxonomies' => 'permalink-manager-disabled-taxonomies',
282 'permalink_manager_endpoints' => 'permalink-manager-endpoints',
283 'permalink_manager_filter_permalink_base' => 'permalink_manager-filter-permalink-base',
284 'permalink_manager_force_lowercase_uris' => 'permalink-manager-force-lowercase-uris',
285
286 'permalink_manager_uri_editor_extra_info' => 'permalink-manager-uri-editor-extra-info',
287 'permalink_manager_debug_fields' => 'permalink-manager-debug-fields',
288 'permalink_manager_permastructs_fields' => 'permalink-manager-permastructs-fields',
289 'permalink_manager_settings_fields' => 'permalink-manager-settings-fields',
290 'permalink_manager_tools_fields' => 'permalink-manager-tools-fields',
291
292 'permalink_manager_uri_editor_columns' => 'permalink-manager-uri-editor-columns',
293 'permalink_manager_uri_editor_column_content' => 'permalink-manager-uri-editor-column-content',
294 );
295
296 return ($filters) ? $deprecated_filters : array();
297 }
298
299 function deprecated_hooks() {
300 $deprecated_filters = (array) $this->deprecated_hooks_list(true);
301 foreach($deprecated_filters as $new => $old) {
302 add_filter($new, array($this, 'deprecated_hooks_mapping'), -1000, 8);
303 }
304 }
305
306 function deprecated_hooks_mapping($data) {
307 $deprecated_filters = $this->deprecated_hooks_list(true);
308 $filter = current_filter();
309
310 if(isset($deprecated_filters[$filter])) {
311 if(has_filter($deprecated_filters[$filter])) {
312 $args = func_get_args();
313 $data = apply_filters_ref_array($deprecated_filters[$filter], $args);
314 }
315 }
316
317 return $data;
318 }
319
320 }
321
322 /**
323 * Begins execution of the plugin.
324 */
325 function run_permalink_manager() {
326 global $permalink_manager;
327
328 $permalink_manager = new Permalink_Manager_Class();
329 }
330 run_permalink_manager();
331