setup_constants(); add_action( 'init', [self::$instance, 'load_textdomain'] ); add_action( 'plugins_loaded', [self::$instance, 'check_plugin_update'] ); self::$instance->includes(); self::$instance->roles = new Cooked_Roles(); self::$instance->admin_menus = new Cooked_Admin_Menus(); if (is_admin()) { self::$instance->admin_enqueues = new Cooked_Admin_Enqueues(); } else { self::$instance->enqueues = new Cooked_Enqueues(); } self::$instance->admin_settings = new Cooked_Settings(); self::$instance->migration = new Cooked_Migration(); self::$instance->related_recipes = new Cooked_Related_Recipes(); self::$instance->updates = new Cooked_Updates(); self::$instance->post_types = new Cooked_Post_Types(); self::$instance->recipe_meta = new Cooked_Recipe_Meta(); self::$instance->measurements = new Cooked_Measurements(); self::$instance->users = new Cooked_Users(); self::$instance->recipes = new Cooked_Recipes(); self::$instance->shortcodes = new Cooked_Shortcodes(); self::$instance->ajax = new Cooked_Ajax(); self::$instance->functions = new Cooked_Functions(); self::$instance->widget = new Cooked_Widgets(); self::$instance->gutenberg = new Cooked_Gutenberg(); self::$instance->elementor = new Cooked_Elementor(); self::$instance->extra = new Cooked_Plugin_Extra(); self::$instance->multilingual = new Cooked_Multilingual(); self::$instance->pixwell = new Cooked_Pixwell(); self::$instance->module_setup(); add_action( 'init', [self::$instance, 'initialize_plugin_support'], 10 ); do_action('cooked_loaded'); } return self::$instance; } /** * Initialize module support. * * @since 1.0.0 * @return void */ private function module_setup() { // Look for Cooked Modules $modules = file_exists( COOKED_DIR . 'modules' ) ? scandir( COOKED_DIR . 'modules' ) : false; if ($modules): foreach ($modules as $module_name): if ($module_name !== '.' && $module_name !== '..'): if ( file_exists( COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ): require_once COOKED_DIR . 'modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php'; endif; endif; endforeach; endif; // Look for Cooked Modules in Parent Theme $parent_theme_folder = trailingslashit( get_template_directory() ); $modules = file_exists( $parent_theme_folder . 'cooked-modules' ) ? scandir( $parent_theme_folder . 'cooked-modules' ) : false; if ($modules): foreach ($modules as $module_name): if ($module_name !== '.' && $module_name !== '..'): if ( file_exists( $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ): require_once $parent_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php'; endif; endif; endforeach; endif; // Look for Cooked Modules in Child Theme (if one is active) $child_theme_folder = trailingslashit( get_stylesheet_directory() ); if ($child_theme_folder != $parent_theme_folder): $modules = file_exists( $child_theme_folder . 'cooked-modules' ) ? scandir( $child_theme_folder . 'cooked-modules' ) : false; if ($modules): foreach ($modules as $module_name): if ($module_name !== '.' && $module_name !== '..'): if ( file_exists( $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php' ) ): require_once $child_theme_folder . 'cooked-modules/' . esc_attr( $module_name ) . '/' . esc_attr( $module_name ) . '.php'; endif; endif; endforeach; endif; endif; } /** * Initialize plugin support. * * @since 1.0.0 * @return void */ public function initialize_plugin_support() { if (in_array('wordpress-seo/wp-seo.php', apply_filters('active_plugins', get_option('active_plugins')))) { require_once COOKED_DIR . 'includes/class.cooked-yoastseo.php'; self::$instance->yoastseo = new Cooked_YoastSEO(); } if (in_array('seo-by-rank-math/rank-math.php', apply_filters('active_plugins', get_option('active_plugins')))) { require_once COOKED_DIR . 'includes/class.cooked-rankmathseo.php'; self::$instance->rankmathseo = new Cooked_RankMathSEO(); } } /** * Check for plugin updates and run migrations if needed * * @since 1.10.0 */ public function check_plugin_update() { $current_version = get_option('cooked_version', '0'); if (version_compare($current_version, COOKED_VERSION, '<')) { // Run migrations $this->migration->init(); // Update version in database update_option('cooked_version', COOKED_VERSION); } } /** * Throw error on object clone. * * The whole idea of the singleton design pattern is that there is a single * object therefore, we don't want the object to be cloned. * * @since 1.0.0 * @access protected * @return void */ public function __clone() { // Nope, can't do that. return false; } /** * Disable unserializing of the class. * * @since 1.0.0 * @access protected * @return void */ public function __wakeup() { // Nope, can't do that either. return false; } /** * Setup plugin constants. * * @access private * @since 1.0.0 * @return void */ private function setup_constants() { // Plugin Folder Path. if ( ! defined( 'COOKED_DIR' ) ) { define( 'COOKED_DIR', plugin_dir_path( __FILE__ ) ); } // Plugin Folder Name. if ( ! defined( 'COOKED_FOLDER' ) ) { $foldername = untrailingslashit( str_replace( 'cooked.php', '', plugin_basename( __FILE__ ) ) ); define( 'COOKED_FOLDER', $foldername ); } // Plugin Root File. if ( ! defined( 'COOKED_PLUGIN_FILE' ) ) { define( 'COOKED_PLUGIN_FILE', __FILE__ ); } // Plugin Folder URL. if ( ! defined( 'COOKED_URL' ) ) { define( 'COOKED_URL', plugin_dir_url( __FILE__ ) ); } // WordPress Ajax URL. if ( ! defined( 'COOKED_AJAX_URL' ) ) { define( 'COOKED_AJAX_URL', admin_url('admin-ajax.php') ); } // Make sure CAL_GREGORIAN is defined. if ( ! defined( 'CAL_GREGORIAN' ) ) { define( 'CAL_GREGORIAN', 1 ); } // Time Format if ( ! defined( 'COOKED_TIME_FORMAT' ) ) { define( 'COOKED_TIME_FORMAT', get_option('time_format','g:ia') ); } // Date Format if ( ! defined( 'COOKED_DATE_FORMAT' ) ) { define( 'COOKED_DATE_FORMAT', get_option('date_format','F j, Y') ); } } /** * Include required files. * * @access private * @since 1.0.0 * @return void */ private function includes() { require_once COOKED_DIR . 'includes/class.cooked-users.php'; require_once COOKED_DIR . 'includes/class.cooked-roles.php'; require_once COOKED_DIR . 'includes/class.cooked-taxonomies.php'; require_once COOKED_DIR . 'includes/class.cooked-post-types.php'; require_once COOKED_DIR . 'includes/class.cooked-seo.php'; require_once COOKED_DIR . 'includes/class.cooked-recipes.php'; require_once COOKED_DIR . 'includes/class.cooked-related-recipes.php'; require_once COOKED_DIR . 'includes/class.cooked-recipe-meta.php'; require_once COOKED_DIR . 'includes/class.cooked-shortcodes.php'; require_once COOKED_DIR . 'includes/class.cooked-measurements.php'; require_once COOKED_DIR . 'includes/class.cooked-unit-converter.php'; require_once COOKED_DIR . 'includes/class.cooked-admin-enqueues.php'; require_once COOKED_DIR . 'includes/class.cooked-enqueues.php'; require_once COOKED_DIR . 'includes/class.cooked-admin-menus.php'; require_once COOKED_DIR . 'includes/class.cooked-settings.php'; require_once COOKED_DIR . 'includes/class.cooked-migration.php'; require_once COOKED_DIR . 'includes/class.cooked-updates.php'; require_once COOKED_DIR . 'includes/class.cooked-ajax.php'; require_once COOKED_DIR . 'includes/class.cooked-functions.php'; require_once COOKED_DIR . 'includes/class.cooked-widgets.php'; require_once COOKED_DIR . 'includes/class.cooked-gutenberg.php'; require_once COOKED_DIR . 'includes/class.cooked-elementor.php'; require_once COOKED_DIR . 'includes/class.cooked-plugin-extra.php'; require_once COOKED_DIR . 'includes/class.cooked-multilingual.php'; require_once COOKED_DIR . 'includes/class.cooked-allergens.php'; require_once COOKED_DIR . 'includes/class.cooked-pixwell.php'; if ( defined( 'WP_CLI' ) && WP_CLI ) { require_once COOKED_DIR . 'includes/class.cooked-cli.php'; } } /** * Loads the plugin language files. * * @access public * @since 1.0.0 * @return void */ public function load_textdomain() { /* * When translating Cooked, be sure to move your language file into the proper location: * * - wp-content/languages/plugins * * If you do not move custom language files here, they will be lost when updating Cooked. Gora Tech * recommends Loco Translate for easy translations: hhttps://github.com/XjSv/Cooked/wiki/Translations-Text-Changes */ // Set filter for plugin's languages directory. $cooked_lang_dir = apply_filters( 'cooked_languages_directory', COOKED_DIR . 'languages/' ); // Traditional WordPress plugin locale filter. $locale = apply_filters( 'plugin_locale', get_locale(), 'cooked' ); $mofile = sprintf( '%1$s-%2$s.mo', 'cooked', $locale ); // Look in wp-content/languages/plugins/cooked $lang_file_ext = WP_LANG_DIR . '/plugins/cooked/' . $mofile; if ( file_exists( $lang_file_ext ) ) { // Load the externally located language files. load_textdomain( 'cooked', $lang_file_ext ); } else { // Load the default language files. load_plugin_textdomain( 'cooked', false, COOKED_FOLDER . '/languages' ); } } } endif; // End if class_exists check. /** * The main function for that returns Cooked_Plugin. * * The main function responsible for returning the Cooked_Plugin * Instance to functions everywhere. * * Use this function like you would a global variable, except without needing * to declare the global. * * Example: * * @since 1.0.0 * @return object|Cooked_Plugin */ function Cooked() { return Cooked_Plugin::instance(); } // Let's get cooking! $CookedPlugin = Cooked();