PluginProbe
Theme Switcha – Easily Switch Themes for Development and Testing / 3.4.1
Theme Switcha – Easily Switch Themes for Development and Testing v3.4.1
3.4.5 trunk 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3.0 3.1 3.2 3.3 3.3.1 3.3.2 All 33 releases
theme-switcha / theme-switcha.php

theme-switcha.php in Theme Switcha – Easily Switch Themes for Development and Testing 3.4.1, at theme-switcha.php

252 lines 9.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: Theme Switcha
4 Plugin URI: https://perishablepress.com/theme-switcha/
5 Description: Theme switching done right.
6 Tags: theme, switch, switcher, theme switcher, preview
7 Author: Jeff Starr
8 Contributors: specialk
9 Author URI: https://plugin-planet.com/
10 Donate link: https://monzillamedia.com/donate.html
11 Requires at least: 4.7
12 Tested up to: 6.8
13 Stable tag: 3.4.1
14 Version: 3.4.1
15 Requires PHP: 5.6.20
16 Text Domain: theme-switcha
17 Domain Path: /languages
18 License: GPL v3 or later
19 */
20
21 /*
22 This program is free software; you can redistribute it and/or
23 modify it under the terms of the GNU General Public License
24 as published by the Free Software Foundation; either version
25 2 of the License, or (at your option) any later version.
26
27 This program is distributed in the hope that it will be useful,
28 but WITHOUT ANY WARRANTY; without even the implied warranty of
29 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30 GNU General Public License for more details.
31
32 You should have received a copy of the GNU General Public License
33 with this program. If not, visit: https://www.gnu.org/licenses/
34
35 Copyright 2025 Monzilla Media. All rights reserved.
36 */
37
38 if (!defined('ABSPATH')) die();
39
40 if (!class_exists('Theme_Switcha')) {
41
42 final class Theme_Switcha {
43
44 private static $instance;
45
46 public static function instance() {
47
48 if (!isset(self::$instance) && !(self::$instance instanceof Theme_Switcha)) {
49
50 self::$instance = new Theme_Switcha;
51 self::$instance->constants();
52 self::$instance->includes();
53
54 register_activation_hook(__FILE__, 'theme_switcha_dismiss_notice_activate');
55
56 add_action('admin_init', array(self::$instance, 'check_existing'));
57 add_action('admin_init', array(self::$instance, 'check_version'));
58 add_filter('plugin_action_links', array(self::$instance, 'action_links'), 10, 2);
59 add_filter('plugin_row_meta', array(self::$instance, 'plugin_links'), 10, 2);
60 add_filter('admin_footer_text', array(self::$instance, 'footer_text'), 10, 1);
61
62 add_action('admin_bar_menu', 'theme_switcha_toolbar_add_menu', 1000);
63 add_action('admin_enqueue_scripts', 'theme_switcha_enqueue_resources_admin');
64 add_action('admin_print_scripts', 'theme_switcha_print_js_vars_admin');
65 add_action('admin_notices', 'theme_switcha_admin_notice');
66 add_action('admin_init', 'theme_switcha_register_settings');
67 add_action('admin_init', 'theme_switcha_reset_options');
68 add_action('admin_menu', 'theme_switcha_menu_pages');
69 add_action('admin_menu', 'theme_switcha_disable_widget');
70 add_action('admin_init', 'theme_switcha_dismiss_notice_save');
71 add_action('admin_init', 'theme_switcha_dismiss_notice_version');
72
73 add_action('wp_dashboard_setup', 'theme_switcha_dashboard_widget');
74 add_action('plugins_loaded', 'theme_switcha_add_filters');
75 add_action('init', 'theme_switcha_check_cookie');
76 add_filter('widget_text', 'do_shortcode', 10);
77
78 }
79
80 return self::$instance;
81 }
82
83 public static function options() {
84
85 $options = array(
86 'enable_plugin' => false,
87 'enable_admin' => false,
88 'allowed_users' => 'admin',
89 'cookie_expire' => 3600,
90 'passkey' => uniqid(mt_rand()),
91 'disable_widget' => false,
92 );
93
94 return apply_filters('theme_switcha_options', $options);
95 }
96
97 private function constants() {
98
99 if (!defined('THEME_SWITCHA_REQUIRE')) define('THEME_SWITCHA_REQUIRE', '4.7');
100 if (!defined('THEME_SWITCHA_VERSION')) define('THEME_SWITCHA_VERSION', '3.4.1');
101 if (!defined('THEME_SWITCHA_NAME')) define('THEME_SWITCHA_NAME', 'Theme Switcha');
102 if (!defined('THEME_SWITCHA_AUTHOR')) define('THEME_SWITCHA_AUTHOR', 'Jeff Starr');
103 if (!defined('THEME_SWITCHA_HOME')) define('THEME_SWITCHA_HOME', 'https://perishablepress.com/theme-switcha/');
104 if (!defined('THEME_SWITCHA_URL')) define('THEME_SWITCHA_URL', plugin_dir_url(__FILE__));
105 if (!defined('THEME_SWITCHA_DIR')) define('THEME_SWITCHA_DIR', plugin_dir_path(__FILE__));
106 if (!defined('THEME_SWITCHA_FILE')) define('THEME_SWITCHA_FILE', plugin_basename(__FILE__));
107 if (!defined('THEME_SWITCHA_SLUG')) define('THEME_SWITCHA_SLUG', basename(dirname(__FILE__)));
108
109 }
110
111 private function includes() {
112
113 require_once THEME_SWITCHA_DIR .'inc/plugin-core.php';
114 require_once THEME_SWITCHA_DIR .'inc/resources-enqueue.php';
115 require_once THEME_SWITCHA_DIR .'inc/settings-display.php';
116 require_once THEME_SWITCHA_DIR .'inc/settings-register.php';
117 require_once THEME_SWITCHA_DIR .'inc/settings-reset.php';
118
119 }
120
121 public function action_links($links, $file) {
122
123 if ($file == THEME_SWITCHA_FILE && current_user_can('manage_options')) {
124
125 $add_links = '<a href="'. admin_url('options-general.php?page=theme_switcha_settings') .'">'. esc_html__('Settings', 'theme-switcha') .'</a>';
126 array_unshift($links, $add_links);
127
128 }
129
130 return $links;
131 }
132
133 public function plugin_links($links, $file) {
134
135 if ($file == THEME_SWITCHA_FILE) {
136
137 $home_href = 'https://perishablepress.com/theme-switcha/';
138 $home_title = esc_attr__('Plugin Homepage', 'theme-switcha');
139 $home_text = esc_html__('Homepage', 'theme-switcha');
140
141 $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $home_href .'" title="'. $home_title .'">'. $home_text .'</a>';
142
143 $rate_href = 'https://wordpress.org/support/plugin/'. THEME_SWITCHA_SLUG .'/reviews/?rate=5#new-post';
144 $rate_title = esc_html__('Click here to rate and review this plugin on WordPress.org', 'theme-switcha');
145 $rate_text = esc_html__('Rate this plugin', 'theme-switcha') .'&nbsp;&raquo;';
146
147 $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $rate_href .'" title="'. $rate_title .'">'. $rate_text .'</a>';
148
149 $pro_href = 'https://plugin-planet.com/theme-switcha-pro/';
150 $pro_title = esc_html__('Get Theme Switcha Pro!', 'theme-switcha');
151 $pro_text = esc_html__('Go&nbsp;Pro', 'theme-switcha');
152 $pro_style = 'padding:1px 5px;color:#eee;background:#333;border-radius:1px;';
153
154 // $links[] = '<a target="_blank" rel="noopener noreferrer" href="'. $pro_href .'" title="'. $pro_title .'" style="'. $pro_style .'">'. $pro_text .'</a>';
155
156 }
157 return $links;
158 }
159
160 function footer_text($text) {
161
162 $screen_id = theme_switcha_get_current_screen_id();
163
164 $ids = array('settings_page_theme_switcha_settings');
165
166 if ($screen_id && apply_filters('theme_switcha_admin_footer_text', in_array($screen_id, $ids))) {
167
168 $text = __('Like this plugin? Give it a', 'theme-switcha');
169
170 $text .= ' <a target="_blank" rel="noopener noreferrer" href="https://wordpress.org/support/plugin/theme-switcha/reviews/?rate=5#new-post">';
171
172 $text .= __('�
173
174
175
176
177 rating&nbsp;&raquo;', 'theme-switcha') .'</a>';
178
179 }
180
181 return $text;
182
183 }
184
185 public function check_existing() {
186
187 if (class_exists('Theme_Switcha_Pro')) {
188 if (is_plugin_active(THEME_SWITCHA_FILE)) {
189 deactivate_plugins(THEME_SWITCHA_FILE);
190
191 $msg = '<strong>'. esc_html__('Warning:', 'theme-switcha') .'</strong> ';
192 $msg .= esc_html__('Pro version of ', 'theme-switcha') . THEME_SWITCHA_NAME;
193 $msg .= esc_html__(' currently active. Free and Pro versions cannot be activated at the same time. ', 'theme-switcha');
194 $msg .= esc_html__('Please return to the', 'theme-switcha');
195 $msg .= ' <a href="'. admin_url() .'">'. esc_html__('WP Admin Area', 'theme-switcha') .'</a> ';
196 $msg .= esc_html__('and try again.', 'theme-switcha');
197
198 wp_die($msg);
199 }
200 }
201 }
202
203 public function check_version() {
204
205 $wp_version = get_bloginfo('version');
206
207 if (isset($_GET['activate']) && $_GET['activate'] == 'true') {
208 if (version_compare($wp_version, THEME_SWITCHA_REQUIRE, '<')) {
209 if (is_plugin_active(THEME_SWITCHA_FILE)) {
210 deactivate_plugins(THEME_SWITCHA_FILE);
211
212 $msg = '<strong>'. THEME_SWITCHA_NAME .'</strong> ';
213 $msg .= esc_html__('requires WordPress ', 'theme-switcha') . THEME_SWITCHA_REQUIRE;
214 $msg .= esc_html__(' or higher, and has been deactivated! ', 'theme-switcha');
215 $msg .= esc_html__('Please return to the', 'theme-switcha');
216 $msg .= ' <a href="'. admin_url() .'">'. esc_html__('WP Admin Area', 'theme-switcha') .'</a> ';
217 $msg .= esc_html__('to upgrade WordPress and try again.', 'theme-switcha');
218
219 wp_die($msg);
220 }
221 }
222 }
223 }
224
225 public function __clone() {
226 _doing_it_wrong(__FUNCTION__, esc_html__('Cheatin&rsquo; huh?', 'theme-switcha'), THEME_SWITCHA_VERSION);
227 }
228
229 public function __wakeup() {
230 _doing_it_wrong(__FUNCTION__, esc_html__('Cheatin&rsquo; huh?', 'theme-switcha'), THEME_SWITCHA_VERSION);
231 }
232
233 }
234 }
235
236 if (class_exists('Theme_Switcha')) {
237
238 $theme_switcha_options = get_option('theme_switcha_options', Theme_Switcha::options());
239 $theme_switcha_options = apply_filters('theme_switcha_get_options', $theme_switcha_options);
240
241 if (!function_exists('theme_switcha')) {
242
243 function theme_switcha() {
244
245 return Theme_Switcha::instance();
246 }
247 }
248
249 theme_switcha();
250
251 }
252