PluginProbe
Cooked – Recipe Management / 1.16.1
Cooked – Recipe Management v1.16.1
1.16.1 1.16.0 1.15.0 trunk 1.10.0 1.11.0 1.11.1 1.11.2 1.11.3 1.11.4 1.12.0 1.13.0 1.14.0 1.7.10 1.7.11 1.7.12 1.7.13 1.7.15.1 1.7.15.3 1.7.15.4 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 All 37 releases
← All changes | cooked.php +490 -388 1.8.41.16.1 View file →
@@ -1,38 +1,47 @@
1 1 <?php
2 -
3 -/*
4 -Plugin Name: Cooked - Recipe Management
5 -Plugin URI: https://wordpress.org/plugins/cooked/
6 -Description: A recipe plugin for WordPress.
7 -Author: Gora Tech
8 -Author URI: https://goratech.dev
9 -Version: 1.8.4
10 -Text Domain: cooked
11 -Domain Path: languages
12 -License: GPL2
13 -
14 -Cooked is free software: you can redistribute it and/or modify
15 -it under the terms of the GNU General Public License as published by
16 -the Free Software Foundation, either version 2 of the License, or
17 -any later version.
18 -
19 -Cooked 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 Cooked. If not, see http://www.gnu.org/licenses/.
2 +/**
3 + * Plugin Name: Cooked - Recipe Management
4 + * Plugin URI: https://wordpress.org/plugins/cooked
5 + * Description: A recipe plugin for WordPress.
6 + * Author: Gora Tech
7 + * Author URI: https://goratech.dev
8 + * Version: 1.16.1
9 + * Text Domain: cooked
10 + * Domain Path: /languages
11 + * License: GPLv2 or later
12 + * License URI: https://www.gnu.org/licenses/gpl-2.0.html
13 + * Requires at least: 6.8
14 + * Tested up to: 7.1
15 + * Requires PHP: 7.4
16 + * Contributors: xjsv, boxystudio
17 + * Tags: recipe, recipes, food, cooking, nutrition
18 + *
19 + * Cooked is free software: you can redistribute it and/or modify
20 + * it under the terms of the GNU General Public License as published by
21 + * the Free Software Foundation, either version 2 of the License, or
22 + * any later version.
23 + *
24 + * Cooked is distributed in the hope that it will be useful,
25 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27 + * GNU General Public License for more details.
28 + *
29 + * You should have received a copy of the GNU General Public License
30 + * along with Cooked. If not, see http://www.gnu.org/licenses/.
31 + *
32 + * @package Cooked
26 33 */
27 34
28 35 // Exit if accessed directly.
29 -if ( ! defined( 'ABSPATH' ) ) exit;
36 +if ( ! defined( 'ABSPATH' ) ) {
37 + exit;
38 +}
30 39
31 40 require_once __DIR__ . '/vendor/autoload.php';
32 41
33 -define( 'COOKED_VERSION', '1.8.4' );
34 42 define( 'COOKED_DEV', false );
43 +define( 'COOKED_VERSION', '1.16.1' );
35 44
36 45 if ( ! class_exists( 'Cooked_Plugin' ) ) :
37 46
38 47 /**
@@ -41,399 +50,510 @@
41 50 * @since 1.0.0
42 51 */
43 52 final class Cooked_Plugin {
44 53
45 - /**
46 - * @var Cooked_Plugin
47 - * @since 1.0.0
48 - */
49 - private static $instance;
54 + /**
55 + * @var Cooked_Plugin
56 + * @since 1.0.0
57 + */
58 + private static $instance;
50 59
51 - /**
52 - * Cooked Roles Object.
53 - *
54 - * @var object|Cooked_Roles
55 - * @since 1.0.0
56 - */
57 - public $roles;
60 + /**
61 + * Cooked Roles Object.
62 + *
63 + * @var object|Cooked_Roles
64 + * @since 1.0.0
65 + */
66 + public $roles;
58 67
59 - /**
60 - * Cooked Admin Menus Object.
61 - *
62 - * @var object|Cooked_Admin_Menus
63 - * @since 1.0.0
64 - */
65 - public $admin_menus;
68 + /**
69 + * Cooked Admin Menus Object.
70 + *
71 + * @var object|Cooked_Admin_Menus
72 + * @since 1.0.0
73 + */
74 + public $admin_menus;
66 75
67 - /**
68 - * Cooked Admin Enqueues Object.
69 - *
70 - * @var object|Cooked_Admin_Enqueues
71 - * @since 1.0.0
72 - */
73 - public $admin_enqueues;
76 + /**
77 + * Cooked Admin Enqueues Object.
78 + *
79 + * @var object|Cooked_Admin_Enqueues
80 + * @since 1.0.0
81 + */
82 + public $admin_enqueues;
74 83
75 - /**
76 - * Cooked Enqueues Object.
77 - *
78 - * @var object|Cooked_Enqueues
79 - * @since 1.0.0
80 - */
81 - public $enqueues;
84 + /**
85 + * Cooked Enqueues Object.
86 + *
87 + * @var object|Cooked_Enqueues
88 + * @since 1.0.0
89 + */
90 + public $enqueues;
82 91
83 - /**
84 - * Cooked Settings Object.
85 - *
86 - * @var object|Cooked_Settings
87 - * @since 1.0.0
88 - */
89 - public $admin_settings;
92 + /**
93 + * Cooked Settings Object.
94 + *
95 + * @var object|Cooked_Settings
96 + * @since 1.0.0
97 + */
98 + public $admin_settings;
90 99
91 - /**
92 - * Cooked Migration Object.
93 - *
94 - * @var object|Cooked_Migration
95 - * @since 1.0.0
96 - */
97 - public $migration;
100 + /**
101 + * Cooked Migration Object.
102 + *
103 + * @var object|Cooked_Migration
104 + * @since 1.0.0
105 + */
106 + public $migration;
98 107
99 - /**
100 - * Cooked Post Types Object.
101 - *
102 - * @var object|Cooked_Post_Types
103 - * @since 1.0.0
104 - */
105 - public $post_types;
108 + /**
109 + * Cooked Updates Object.
110 + *
111 + * @var object|Cooked_Updates
112 + * @since 1.0.0
113 + */
114 + public $updates;
106 115
107 - /**
108 - * Cooked Recipe Meta Object.
109 - *
110 - * @var object|Cooked_Recipe_Meta
111 - * @since 1.0.0
112 - */
113 - public $recipe_meta;
116 + /**
117 + * Cooked Post Types Object.
118 + *
119 + * @var object|Cooked_Post_Types
120 + * @since 1.0.0
121 + */
122 + public $post_types;
114 123
115 - /**
116 - * Cooked Measurements Object.
117 - *
118 - * @var object|Cooked_Measurements
119 - * @since 1.0.0
120 - */
121 - public $measurements;
124 + /**
125 + * Cooked Recipe Meta Object.
126 + *
127 + * @var object|Cooked_Recipe_Meta
128 + * @since 1.0.0
129 + */
130 + public $recipe_meta;
122 131
123 - /**
124 - * Cooked Users Object.
125 - *
126 - * @var object|Cooked_Users
127 - * @since 1.0.0
128 - */
129 - public $users;
132 + /**
133 + * Cooked Measurements Object.
134 + *
135 + * @var object|Cooked_Measurements
136 + * @since 1.0.0
137 + */
138 + public $measurements;
130 139
131 - /**
132 - * Cooked Recipes Object.
133 - *
134 - * @var object|Cooked_Recipes
135 - * @since 1.0.0
136 - */
137 - public $recipes;
140 + /**
141 + * Cooked Users Object.
142 + *
143 + * @var object|Cooked_Users
144 + * @since 1.0.0
145 + */
146 + public $users;
138 147
139 - /**
140 - * Cooked Shortcodes Object.
141 - *
142 - * @var object|Cooked_Shortcodes
143 - * @since 1.0.0
144 - */
145 - public $shortcodes;
148 + /**
149 + * Cooked Recipes Object.
150 + *
151 + * @var object|Cooked_Recipes
152 + * @since 1.0.0
153 + */
154 + public $recipes;
146 155
147 - /**
148 - * Cooked Ajax Object.
149 - *
150 - * @var object|Cooked_Ajax
151 - * @since 1.0.0
152 - */
153 - public $ajax;
156 + /**
157 + * Cooked Shortcodes Object.
158 + *
159 + * @var object|Cooked_Shortcodes
160 + * @since 1.0.0
161 + */
162 + public $shortcodes;
154 163
155 - /**
156 - * Cooked Functions Object.
157 - *
158 - * @var object|Cooked_Functions
159 - * @since 1.0.0
160 - */
161 - public $functions;
164 + /**
165 + * Cooked Ajax Object.
166 + *
167 + * @var object|Cooked_Ajax
168 + * @since 1.0.0
169 + */
170 + public $ajax;
162 171
163 - /**
164 - * Cooked Widgets Object.
165 - *
166 - * @var object|Cooked_Widgets
167 - * @since 1.0.0
168 - */
169 - public $widget;
172 + /**
173 + * Cooked Functions Object.
174 + *
175 + * @var object|Cooked_Functions
176 + * @since 1.0.0
177 + */
178 + public $functions;
170 179
171 - /**
172 - * Cooked Gutenberg Object.
173 - *
174 - * @var object|Cooked_Gutenberg
175 - * @since 1.0.0
176 - */
177 - public $gutenberg;
180 + /**
181 + * Cooked Widgets Object.
182 + *
183 + * @var object|Cooked_Widgets
184 + * @since 1.0.0
185 + */
186 + public $widget;
178 187
179 - /**
180 - * Cooked Elementor Object.
181 - *
182 - * @var object|Cooked_Elementor
183 - * @since 1.0.0
184 - */
185 - public $elementor;
188 + /**
189 + * Cooked Gutenberg Object.
190 + *
191 + * @var object|Cooked_Gutenberg
192 + * @since 1.0.0
193 + */
194 + public $gutenberg;
186 195
187 - /**
188 - * Main Cooked_Plugin Instance.
189 - *
190 - * Insures that only one instance of Cooked_Plugin exists in memory at any one
191 - * time. Also prevents needing to define globals everywhere.
192 - *
193 - * @since 1.0.0
194 - * @static
195 - * @staticvar array $instance
196 - * @uses Cooked_Plugin::setup_constants() Setup the constants needed.
197 - * @uses Cooked_Plugin::includes() Include the required files.
198 - * @uses Cooked_Plugin::load_textdomain() load the language files.
199 - * @see Cooked()
200 - * @return object|Cooked_Plugin
201 - */
202 - public static function instance() {
203 - if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Cooked_Plugin ) ) {
204 - self::$instance = new Cooked_Plugin;
205 - self::$instance->setup_constants();
196 + /**
197 + * Cooked Elementor Object.
198 + *
199 + * @var object|Cooked_Elementor
200 + * @since 1.0.0
201 + */
202 + public $elementor;
206 203
207 - add_action( 'plugins_loaded', [self::$instance, 'load_textdomain'] );
204 + /**
205 + * Cooked Rank Math SEO Object.
206 + *
207 + * @var object|Cooked_RankMathSEO
208 + * @since 1.8.9
209 + */
210 + public $rankmathseo;
208 211
209 - self::$instance->includes();
210 - self::$instance->roles = new Cooked_Roles();
211 - self::$instance->admin_menus = new Cooked_Admin_Menus();
212 + /**
213 + * Cooked Yoast SEO Object.
214 + *
215 + * @var object|Cooked_YoastSEO
216 + * @since 1.8.9
217 + */
218 + public $yoastseo;
212 219
213 - if (is_admin()) {
214 - self::$instance->admin_enqueues = new Cooked_Admin_Enqueues();
215 - } else {
216 - self::$instance->enqueues = new Cooked_Enqueues();
217 - }
220 + /**
221 + * Cooked Multilingual Object.
222 + *
223 + * @var object|Cooked_Multilingual
224 + * @since 1.12.0
225 + */
226 + public $multilingual;
218 227
219 - self::$instance->admin_settings = new Cooked_Settings();
220 - self::$instance->migration = new Cooked_Migration();
221 - self::$instance->post_types = new Cooked_Post_Types();
222 - self::$instance->recipe_meta = new Cooked_Recipe_Meta();
223 - self::$instance->recipe_meta = new Cooked_Measurements();
224 - self::$instance->users = new Cooked_Users();
225 - self::$instance->recipes = new Cooked_Recipes();
226 - self::$instance->shortcodes = new Cooked_Shortcodes();
227 - self::$instance->ajax = new Cooked_Ajax();
228 - self::$instance->functions = new Cooked_Functions();
229 - self::$instance->widget = new Cooked_Widgets();
230 - self::$instance->gutenberg = new Cooked_Gutenberg();
231 - self::$instance->elementor = new Cooked_Elementor();
228 + /**
229 + * Cooked Related Recipes Object.
230 + *
231 + * @var object|Cooked_Related_Recipes
232 + * @since 1.12.0
233 + */
234 + public $related_recipes;
232 235
233 - self::$instance->module_setup();
234 - }
236 + /**
237 + * Cooked Extra Object.
238 + *
239 + * @var object|Cooked_Plugin_Extra
240 + * @since 1.8.7
241 + */
242 + public $extra;
235 243
236 - return self::$instance;
237 - }
244 + /**
245 + * Cooked Pixwell Theme Support Object.
246 + *
247 + * @var object|Cooked_Pixwell
248 + * @since 1.16.0
249 + */
250 + public $pixwell;
238 251
239 - private function module_setup() {
240 - // Look for Cooked Modules
241 - $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false;
242 - if ($modules):
243 - foreach ($modules as $module_name):
244 - if ($module_name !== '.' && $module_name !== '..'):
245 - if ( file_exists( COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
246 - require_once COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
247 - endif;
248 - endif;
249 - endforeach;
250 - endif;
252 + /**
253 + * Main Cooked_Plugin Instance.
254 + *
255 + * Insures that only one instance of Cooked_Plugin exists in memory at any one
256 + * time. Also prevents needing to define globals everywhere.
257 + *
258 + * @since 1.0.0
259 + * @static
260 + * @staticvar array $instance
261 + * @uses Cooked_Plugin::setup_constants() Setup the constants needed.
262 + * @uses Cooked_Plugin::includes() Include the required files.
263 + * @uses Cooked_Plugin::load_textdomain() load the language files.
264 + * @see Cooked()
265 + * @return object|Cooked_Plugin
266 + */
267 + public static function instance() {
268 + if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Cooked_Plugin ) ) {
269 + self::$instance = new Cooked_Plugin;
270 + self::$instance->setup_constants();
251 271
252 - // Look for Cooked Modules in Parent Theme
253 - $parent_theme_folder = trailingslashit( get_template_directory() );
254 - $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false;
255 - if ($modules):
256 - foreach ($modules as $module_name):
257 - if ($module_name !== '.' && $module_name !== '..'):
258 - if ( file_exists( $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
259 - require_once $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
260 - endif;
261 - endif;
262 - endforeach;
263 - endif;
272 + add_action( 'init', [self::$instance, 'load_textdomain'] );
273 + add_action( 'plugins_loaded', [self::$instance, 'check_plugin_update'] );
264 274
265 - // Look for Cooked Modules in Child Theme (if one is active)
266 - $child_theme_folder = trailingslashit( get_stylesheet_directory() );
267 - if ($child_theme_folder != $parent_theme_folder):
268 - $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false;
269 - if ($modules):
270 - foreach ($modules as $module_name):
271 - if ($module_name !== '.' && $module_name !== '..'):
272 - if ( file_exists( $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
273 - require_once $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
274 - endif;
275 - endif;
276 - endforeach;
277 - endif;
278 - endif;
279 - }
275 + self::$instance->includes();
276 + self::$instance->roles = new Cooked_Roles();
277 + self::$instance->admin_menus = new Cooked_Admin_Menus();
280 278
281 - /**
282 - * Throw error on object clone.
283 - *
284 - * The whole idea of the singleton design pattern is that there is a single
285 - * object therefore, we don't want the object to be cloned.
286 - *
287 - * @since 1.0.0
288 - * @access protected
289 - * @return void
290 - */
291 - public function __clone() {
292 - // Nope, can't do that.
293 - return false;
294 - }
279 + if (is_admin()) {
280 + self::$instance->admin_enqueues = new Cooked_Admin_Enqueues();
281 + } else {
282 + self::$instance->enqueues = new Cooked_Enqueues();
283 + }
295 284
296 - /**
297 - * Disable unserializing of the class.
298 - *
299 - * @since 1.0.0
300 - * @access protected
301 - * @return void
302 - */
303 - public function __wakeup() {
304 - // Nope, can't do that either.
305 - return false;
306 - }
285 + self::$instance->admin_settings = new Cooked_Settings();
286 + self::$instance->migration = new Cooked_Migration();
287 + self::$instance->related_recipes = new Cooked_Related_Recipes();
288 + self::$instance->updates = new Cooked_Updates();
289 + self::$instance->post_types = new Cooked_Post_Types();
290 + self::$instance->recipe_meta = new Cooked_Recipe_Meta();
291 + self::$instance->measurements = new Cooked_Measurements();
292 + self::$instance->users = new Cooked_Users();
293 + self::$instance->recipes = new Cooked_Recipes();
294 + self::$instance->shortcodes = new Cooked_Shortcodes();
295 + self::$instance->ajax = new Cooked_Ajax();
296 + self::$instance->functions = new Cooked_Functions();
297 + self::$instance->widget = new Cooked_Widgets();
298 + self::$instance->gutenberg = new Cooked_Gutenberg();
299 + self::$instance->elementor = new Cooked_Elementor();
300 + self::$instance->extra = new Cooked_Plugin_Extra();
301 + self::$instance->multilingual = new Cooked_Multilingual();
302 + self::$instance->pixwell = new Cooked_Pixwell();
307 303
308 - /**
309 - * Setup plugin constants.
310 - *
311 - * @access private
312 - * @since 1.0.0
313 - * @return void
314 - */
315 - private function setup_constants() {
316 - // Plugin Folder Path.
317 - if ( ! defined( 'COOKED_DIR' ) ) {
318 - define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) );
319 - }
304 + self::$instance->module_setup();
320 305
321 - // Plugin Folder Name.
322 - if ( ! defined( 'COOKED_FOLDER' ) ) {
323 - $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) );
324 - define( 'COOKED_FOLDER', $foldername );
325 - }
306 + add_action( 'init', [self::$instance, 'initialize_plugin_support'], 10 );
326 307
327 - // Plugin Root File.
328 - if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) {
329 - define( 'COOKED_PLUGIN_FILE', __FILE__ );
330 - }
308 + do_action('cooked_loaded');
309 + }
331 310
332 - // Plugin Folder URL.
333 - if ( ! defined( 'COOKED_URL' ) ) {
334 - define( 'COOKED_URL', plugin_dir_url( __FILE__ ) );
335 - }
311 + return self::$instance;
312 + }
336 313
337 - // WordPress Ajax URL.
338 - if ( ! defined( 'COOKED_AJAX_URL' ) ) {
339 - define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') );
340 - }
314 + /**
315 + * Initialize module support.
316 + *
317 + * @since 1.0.0
318 + * @return void
319 + */
320 + private function module_setup() {
321 + // Look for Cooked Modules
322 + $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false;
323 + if ($modules):
324 + foreach ($modules as $module_name):
325 + if ($module_name !== '.' && $module_name !== '..'):
326 + if ( file_exists( COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
327 + require_once COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
328 + endif;
329 + endif;
330 + endforeach;
331 + endif;
341 332
342 - // Make sure CAL_GREGORIAN is defined.
343 - if ( ! defined( 'CAL_GREGORIAN' ) ) {
344 - define( 'CAL_GREGORIAN', 1 );
345 - }
333 + // Look for Cooked Modules in Parent Theme
334 + $parent_theme_folder = trailingslashit( get_template_directory() );
335 + $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false;
336 + if ($modules):
337 + foreach ($modules as $module_name):
338 + if ($module_name !== '.' && $module_name !== '..'):
339 + if ( file_exists( $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
340 + require_once $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
341 + endif;
342 + endif;
343 + endforeach;
344 + endif;
346 345
347 - // Time Format
348 - if ( ! defined( 'COOKED_TIME_FORMAT' ) ) {
349 - define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') );
350 - }
346 + // Look for Cooked Modules in Child Theme (if one is active)
347 + $child_theme_folder = trailingslashit( get_stylesheet_directory() );
348 + if ($child_theme_folder != $parent_theme_folder):
349 + $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false;
350 + if ($modules):
351 + foreach ($modules as $module_name):
352 + if ($module_name !== '.' && $module_name !== '..'):
353 + if ( file_exists( $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ):
354 + require_once $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php';
355 + endif;
356 + endif;
357 + endforeach;
358 + endif;
359 + endif;
360 + }
351 361
352 - // Date Format
353 - if ( ! defined( 'COOKED_DATE_FORMAT' ) ) {
354 - define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') );
355 - }
356 - }
362 + /**
363 + * Initialize plugin support.
364 + *
365 + * @since 1.0.0
366 + * @return void
367 + */
368 + public function initialize_plugin_support() {
369 + if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) {
370 + require_once COOKED_DIR . 'includes/class.cooked-yoastseo.php';
371 + self::$instance->yoastseo = new Cooked_YoastSEO();
372 + }
357 373
358 - /**
359 - * Include required files.
360 - *
361 - * @access private
362 - * @since 1.0.0
363 - * @return void
364 - */
365 - private function includes() {
366 - require_once COOKED_DIR . 'includes/class.cooked-users.php';
367 - require_once COOKED_DIR . 'includes/class.cooked-roles.php';
368 - require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php';
369 - require_once COOKED_DIR . 'includes/class.cooked-post-types.php';
370 - require_once COOKED_DIR . 'includes/class.cooked-seo.php';
371 - require_once COOKED_DIR . 'includes/class.cooked-recipes.php';
372 - require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php';
373 - require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php';
374 - require_once COOKED_DIR . 'includes/class.cooked-measurements.php';
375 - require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php';
376 - require_once COOKED_DIR . 'includes/class.cooked-enqueues.php';
377 - require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php';
378 - require_once COOKED_DIR . 'includes/class.cooked-settings.php';
379 - require_once COOKED_DIR . 'includes/class.cooked-migration.php';
380 - require_once COOKED_DIR . 'includes/class.cooked-ajax.php';
381 - require_once COOKED_DIR . 'includes/class.cooked-functions.php';
382 - require_once COOKED_DIR . 'includes/class.cooked-widgets.php';
383 - require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php';
384 - require_once COOKED_DIR . 'includes/class.cooked-elementor.php';
385 - }
374 + if (in_array('seo-by-rank-math/rank-math.php', apply_filters('active_plugins', get_option('active_plugins')))) {
375 + require_once COOKED_DIR . 'includes/class.cooked-rankmathseo.php';
376 + self::$instance->rankmathseo = new Cooked_RankMathSEO();
377 + }
378 + }
386 379
387 - /**
388 - * Loads the plugin language files.
389 - *
390 - * @access public
391 - * @since 1.0.0
392 - * @return void
393 - */
394 - public function load_textdomain() {
395 - /*
396 - * When translating Cooked, be sure to move your language file into the proper location:
397 - *
398 - * - wp-content/languages/plugins/cooked
399 - *
400 - * If you do not move custom language files here, they will be lost when updating Cooked. Boxy Studio
401 - * recommends Loco Translate for easy translations: https://boxystudio.ticksy.com/article/3235/
402 - */
380 + /**
381 + * Check for plugin updates and run migrations if needed
382 + *
383 + * @since 1.10.0
384 + */
385 + public function check_plugin_update() {
386 + $current_version = get_option('cooked_version', '0');
403 387
404 - // Set filter for plugin's languages directory.
405 - $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' );
388 + if (version_compare($current_version, COOKED_VERSION, '<')) {
389 + // Run migrations
390 + $this->migration->init();
406 391
407 - // Traditional WordPress plugin locale filter.
408 - $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' );
409 - $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale );
392 + // Update version in database
393 + update_option('cooked_version', COOKED_VERSION);
394 + }
395 + }
410 396
411 - // Look in wp-content/languages/plugins/cooked
412 - $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile;
397 + /**
398 + * Throw error on object clone.
399 + *
400 + * The whole idea of the singleton design pattern is that there is a single
401 + * object therefore, we don't want the object to be cloned.
402 + *
403 + * @since 1.0.0
404 + * @access protected
405 + * @return void
406 + */
407 + public function __clone() {
408 + // Nope, can't do that.
409 + return false;
410 + }
413 411
414 - if ( file_exists( $lang_file_ext ) ) {
415 - // Load the externally located language files.
416 - load_textdomain( 'cooked', $lang_file_ext );
417 - } else {
418 - // Load the default language files.
419 - load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' );
420 - }
421 - }
412 + /**
413 + * Disable unserializing of the class.
414 + *
415 + * @since 1.0.0
416 + * @access protected
417 + * @return void
418 + */
419 + public function __wakeup() {
420 + // Nope, can't do that either.
421 + return false;
422 + }
423 +
424 + /**
425 + * Setup plugin constants.
426 + *
427 + * @access private
428 + * @since 1.0.0
429 + * @return void
430 + */
431 + private function setup_constants() {
432 + // Plugin Folder Path.
433 + if ( ! defined( 'COOKED_DIR' ) ) {
434 + define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) );
435 + }
436 +
437 + // Plugin Folder Name.
438 + if ( ! defined( 'COOKED_FOLDER' ) ) {
439 + $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) );
440 + define( 'COOKED_FOLDER', $foldername );
441 + }
442 +
443 + // Plugin Root File.
444 + if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) {
445 + define( 'COOKED_PLUGIN_FILE', __FILE__ );
446 + }
447 +
448 + // Plugin Folder URL.
449 + if ( ! defined( 'COOKED_URL' ) ) {
450 + define( 'COOKED_URL', plugin_dir_url( __FILE__ ) );
451 + }
452 +
453 + // WordPress Ajax URL.
454 + if ( ! defined( 'COOKED_AJAX_URL' ) ) {
455 + define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') );
456 + }
457 +
458 + // Make sure CAL_GREGORIAN is defined.
459 + if ( ! defined( 'CAL_GREGORIAN' ) ) {
460 + define( 'CAL_GREGORIAN', 1 );
461 + }
462 +
463 + // Time Format
464 + if ( ! defined( 'COOKED_TIME_FORMAT' ) ) {
465 + define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') );
466 + }
467 +
468 + // Date Format
469 + if ( ! defined( 'COOKED_DATE_FORMAT' ) ) {
470 + define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') );
471 + }
472 + }
473 +
474 + /**
475 + * Include required files.
476 + *
477 + * @access private
478 + * @since 1.0.0
479 + * @return void
480 + */
481 + private function includes() {
482 + require_once COOKED_DIR . 'includes/class.cooked-users.php';
483 + require_once COOKED_DIR . 'includes/class.cooked-roles.php';
484 + require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php';
485 + require_once COOKED_DIR . 'includes/class.cooked-post-types.php';
486 + require_once COOKED_DIR . 'includes/class.cooked-seo.php';
487 + require_once COOKED_DIR . 'includes/class.cooked-recipes.php';
488 + require_once COOKED_DIR . 'includes/class.cooked-related-recipes.php';
489 + require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php';
490 + require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php';
491 + require_once COOKED_DIR . 'includes/class.cooked-measurements.php';
492 + require_once COOKED_DIR . 'includes/class.cooked-unit-converter.php';
493 + require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php';
494 + require_once COOKED_DIR . 'includes/class.cooked-enqueues.php';
495 + require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php';
496 + require_once COOKED_DIR . 'includes/class.cooked-settings.php';
497 + require_once COOKED_DIR . 'includes/class.cooked-migration.php';
498 + require_once COOKED_DIR . 'includes/class.cooked-updates.php';
499 + require_once COOKED_DIR . 'includes/class.cooked-ajax.php';
500 + require_once COOKED_DIR . 'includes/class.cooked-functions.php';
501 + require_once COOKED_DIR . 'includes/class.cooked-widgets.php';
502 + require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php';
503 + require_once COOKED_DIR . 'includes/class.cooked-elementor.php';
504 + require_once COOKED_DIR . 'includes/class.cooked-plugin-extra.php';
505 + require_once COOKED_DIR . 'includes/class.cooked-multilingual.php';
506 + require_once COOKED_DIR . 'includes/class.cooked-allergens.php';
507 + require_once COOKED_DIR . 'includes/class.cooked-pixwell.php';
508 +
509 + if ( defined( 'WP_CLI' ) && WP_CLI ) {
510 + require_once COOKED_DIR . 'includes/class.cooked-cli.php';
511 + }
512 + }
513 +
514 + /**
515 + * Loads the plugin language files.
516 + *
517 + * @access public
518 + * @since 1.0.0
519 + * @return void
520 + */
521 + public function load_textdomain() {
522 + /*
523 + * When translating Cooked, be sure to move your language file into the proper location:
524 + *
525 + * - wp-content/languages/plugins
526 + *
527 + * If you do not move custom language files here, they will be lost when updating Cooked. Gora Tech
528 + * recommends Loco Translate for easy translations: hhttps://github.com/XjSv/Cooked/wiki/Translations-Text-Changes
529 + */
530 +
531 + // Set filter for plugin's languages directory.
532 + $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' );
533 +
534 + // Traditional WordPress plugin locale filter.
535 + $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' );
536 + $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale );
537 +
538 + // Look in wp-content/languages/plugins/cooked
539 + $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile;
540 +
541 + if ( file_exists( $lang_file_ext ) ) {
542 + // Load the externally located language files.
543 + load_textdomain( 'cooked', $lang_file_ext );
544 + } else {
545 + // Load the default language files.
546 + // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- Bundled /languages .mo files.
547 + load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' );
548 + }
549 + }
422 550 }
423 551
424 552 endif; // End if class_exists check.
425 553
426 -// Uninstall Hook
427 -register_uninstall_hook( __FILE__, 'cooked_uninstall' );
428 -function cooked_uninstall() {
429 - Cooked_Roles::remove_caps();
430 - Cooked_Roles::remove_roles();
431 - flush_rewrite_rules();
432 -}
433 -
434 554 /**
435 - * The main function for that returns Cooked_Plugin
555 + * The main function for that returns Cooked_Plugin.
436 556 *
437 557 * The main function responsible for returning the Cooked_Plugin
438 558 * Instance to functions everywhere.
439 559 *
@@ -445,27 +565,9 @@
445 565 * @since 1.0.0
446 566 * @return object|Cooked_Plugin
447 567 */
448 568 function Cooked() {
449 - return Cooked_Plugin::instance();
569 + return Cooked_Plugin::instance();
450 570 }
451 571
452 572 // Let's get cooking!
453 573 $CookedPlugin = Cooked();
454 -
455 -/**
456 - * Plugin Action Links Filter
457 - *
458 - * Adds a "Upgrade to Pro" link to the plugin list page.
459 - *
460 - * @since 1.0.0
461 - * @param array $links
462 - * @return array
463 - */
464 -add_filter('plugin_action_links_' . plugin_basename(__FILE__), function($links) {
465 - if (!class_exists( 'Cooked_Pro_Plugin')) {
466 - return array_merge(['<a href="https://cooked.pro/get-cooked/" target="_blank">Upgrade to Pro</a>'], $links);
467 - } else {
468 - array_unshift($links, '<span style="color: #32373c">' . __( 'Required by Cooked Pro', 'cooked' ) . '</span>');
469 - return $links;
470 - }
471 -}, 1);