PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / 2.0.6
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts v2.0.6
2.7.6 2.7.5 2.7.4 trunk 1.3 2.0.4 2.0.6 2.1.91 2.2.4 2.2.7 2.2.9 2.3.1 2.3.10 2.4.10 2.4.2 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.6.0 2.6.1 2.7.0 2.7.1 All 27 releases
← All changes | insert_php.php +100 -318 trunk2.0.6 View file →
@@ -1,318 +1,100 @@
1 -<?php
2 -/**
3 - * Plugin Name: Woody Code Snippets
4 - * Plugin URI: https://woodysnippet.com/
5 - * Description: Executes PHP code, uses conditional logic to insert ads, text, media content and external service's code. Ensures no content duplication.
6 - * Author: Themeisle
7 - * Version: 2.7.6
8 - * WordPress Available: yes
9 - * Requires License: no
10 - * Text Domain: insert-php
11 - * Domain Path: /languages/
12 - * Author URI: https://themeisle.com
13 - *
14 - * @package Woody_Code_Snippets
15 - */
16 -
17 -// Exit if accessed directly.
18 -if ( ! defined( 'ABSPATH' ) ) {
19 - exit;
20 -}
21 -
22 -if ( version_compare( PHP_VERSION, '7.4', '<' ) ) {
23 - add_action(
24 - 'admin_notices',
25 - function () {
26 - ?>
27 - <div class="notice notice-error">
28 - <p><?php esc_html_e( 'Woody Code Snippets requires PHP 7.4 or higher. Please upgrade your PHP version.', 'insert-php' ); ?></p>
29 - </div>
30 - <?php
31 - }
32 - );
33 -
34 - return;
35 -}
36 -
37 -global $wbcr_inp_safe_mode;
38 -
39 -$wbcr_inp_safe_mode = false;
40 -
41 -// Set the constant that the plugin is activated.
42 -define( 'WINP_PLUGIN_ACTIVE', true );
43 -
44 -define( 'WINP_PLUGIN_VERSION', '2.7.6' );
45 -
46 -// Root directory of the plugin.
47 -define( 'WINP_PLUGIN_DIR', __DIR__ );
48 -
49 -define( 'WINP_PLUGIN_FILE', __FILE__ );
50 -
51 -// Absolute url of the root directory of the plugin.
52 -define( 'WINP_PLUGIN_URL', plugins_url( '', __FILE__ ) );
53 -
54 -// Relative url of the plugin.
55 -define( 'WINP_PLUGIN_BASE', plugin_basename( __FILE__ ) );
56 -
57 -// Plugin slug.
58 -define( 'WINP_PLUGIN_SLUG', basename( dirname( WINP_PLUGIN_FILE ) ) );
59 -
60 -define( 'WINP_PLUGIN_NAMESPACE', str_replace( '-', '_', strtolower( trim( WINP_PLUGIN_SLUG ) ) ) );
61 -
62 -// The type of posts used for snippets types.
63 -define( 'WINP_SNIPPETS_POST_TYPE', 'wbcr-snippets' );
64 -
65 -// The taxonomy used for snippets types.
66 -define( 'WINP_SNIPPETS_TAXONOMY', 'wbcr-snippet-tags' );
67 -
68 -// The snippets types.
69 -define( 'WINP_SNIPPET_TYPE_PHP', 'php' );
70 -define( 'WINP_SNIPPET_TYPE_TEXT', 'text' );
71 -define( 'WINP_SNIPPET_TYPE_UNIVERSAL', 'universal' );
72 -define( 'WINP_SNIPPET_TYPE_CSS', 'css' );
73 -define( 'WINP_SNIPPET_TYPE_JS', 'js' );
74 -define( 'WINP_SNIPPET_TYPE_HTML', 'html' );
75 -define( 'WINP_SNIPPET_TYPE_AD', 'advert' );
76 -
77 -// We need to update these.
78 -define( 'WINP_UPGRADE', 'https://woodysnippet.com/upgrade' );
79 -define( 'WINP_DOCS', 'https://docs.themeisle.com/category/2429-woody-installation-and-setup' );
80 -define( 'WINP_ORG_SUPPORT', 'https://wordpress.org/support/plugin/insert-php/' );
81 -define( 'WINP_SUPPORT', 'https://themeisle.com/contact/' );
82 -
83 -// Load text domain for translations.
84 -add_action(
85 - 'plugins_loaded',
86 - function () {
87 - load_plugin_textdomain( 'insert-php', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
88 - }
89 -);
90 -
91 -// START: Related to premium version compatibility check for below 1.3.
92 -add_action(
93 - 'plugins_loaded',
94 - function () {
95 - $premium_plugin_file = 'woody-ad-snippets-premium/woody-ad-snippets-premium.php';
96 - $premium_plugin_path = WP_PLUGIN_DIR . '/' . $premium_plugin_file;
97 -
98 - if ( ! file_exists( $premium_plugin_path ) ) {
99 - return;
100 - }
101 -
102 - if ( ! function_exists( 'is_plugin_active' ) ) {
103 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
104 - }
105 -
106 - if ( ! is_plugin_active( $premium_plugin_file ) ) {
107 - return;
108 - }
109 -
110 - if ( ! function_exists( 'get_plugin_data' ) ) {
111 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
112 - }
113 - $premium_data = get_plugin_data( $premium_plugin_path );
114 -
115 - if ( version_compare( $premium_data['Version'], '1.3.0', '<' ) ) {
116 - deactivate_plugins( $premium_plugin_file );
117 - set_transient( 'winp_premium_version_incompatible', true, WEEK_IN_SECONDS );
118 - }
119 - },
120 - 5
121 -);
122 -
123 -add_action(
124 - 'admin_init',
125 - function () {
126 - if ( isset( $_GET['winp_dismiss_premium_notice'] ) && check_admin_referer( 'winp_dismiss_premium_notice' ) ) {
127 - delete_transient( 'winp_premium_version_incompatible' );
128 - wp_safe_redirect( remove_query_arg( 'winp_dismiss_premium_notice' ) );
129 - exit;
130 - }
131 - }
132 -);
133 -
134 -add_action(
135 - 'admin_notices',
136 - function () {
137 - if ( get_transient( 'winp_premium_version_incompatible' ) ) {
138 - $dismiss_url = wp_nonce_url(
139 - add_query_arg( 'winp_dismiss_premium_notice', '1' ),
140 - 'winp_dismiss_premium_notice'
141 - );
142 - ?>
143 - <div class="notice notice-error">
144 - <p>
145 - <strong><?php esc_html_e( 'Woody Code Snippets Premium has been deactivated.', 'insert-php' ); ?></strong>
146 - </p>
147 - <p>
148 - <?php
149 - printf(
150 - // translators: %s Premium version number.
151 - esc_html__( 'The installed premium version is not compatible with the current version of Woody Code Snippets. Please update the premium plugin to version %s or higher.', 'insert-php' ),
152 - '<strong>1.3.0</strong>'
153 - );
154 - ?>
155 - </p>
156 - <p>
157 - <a href="<?php echo esc_url( $dismiss_url ); ?>" class="button button-secondary">
158 - <?php esc_html_e( 'Dismiss this notice', 'insert-php' ); ?>
159 - </a>
160 - </p>
161 - </div>
162 - <?php
163 - }
164 - }
165 -);
166 -// END: Related to premium version compatibility check for below 1.3.
167 -
168 -require_once WINP_PLUGIN_DIR . '/includes/class.insertion.locations.php';
169 -require_once WINP_PLUGIN_DIR . '/includes/class.http.php';
170 -require_once WINP_PLUGIN_DIR . '/includes/class.helpers.php';
171 -require_once WINP_PLUGIN_DIR . '/includes/class.error-handler.php';
172 -require_once WINP_PLUGIN_DIR . '/includes/class.plugin.php';
173 -
174 -if ( file_exists( WINP_PLUGIN_DIR . '/vendor/autoload.php' ) ) {
175 - require_once WINP_PLUGIN_DIR . '/vendor/autoload.php';
176 -}
177 -
178 -/**
179 - * Adds a hint and button to the fatal error message.
180 - *
181 - * Since WordPress 5.2, we have access to a special mode for catching PHP errors.
182 - * If a user makes a syntax error while editing a snippet, instead of a white screen
183 - * (if PHP errors are disabled on the server), they will see a message from WordPress
184 - * generated by the WP_Fatal_Error_Handler class.
185 - *
186 - * We decided to add a button to this message to switch to safe mode.
187 - */
188 -add_filter(
189 - 'wp_php_error_message',
190 - function ( $message ) {
191 - $safe_mode_url = admin_url( 'edit.php?post_type=' . WINP_SNIPPETS_POST_TYPE . '&wbcr-php-snippets-safe-mode' );
192 - $safe_mode_button = '<div style="margin:20px 0;padding:20px; background:#ffe8e8;">' . __( 'If you see this message after saving the snippet to the Woody Code Snippets plugin, please enable safe mode in the Woody plugin. Safe mode will allow you to continue working in the admin panel of your site and change the snippet in which you made a php error.', 'insert-php' ) . '</div>';
193 - $safe_mode_button .= '<a href="' . $safe_mode_url . '" class="button">' . __( 'Enable Safe Mode', 'insert-php' ) . '</a>';
194 -
195 - return $message . $safe_mode_button;
196 - }
197 -);
198 -
199 -/**
200 - * Enables/Disable safe mode, in which the php code will not be executed.
201 - */
202 -add_action(
203 - 'plugins_loaded',
204 - function () {
205 - if ( isset( $_GET['wbcr-php-snippets-safe-mode'] ) ) {
206 - WINP_Helper::enable_safe_mode();
207 - wp_safe_redirect( esc_url( remove_query_arg( [ 'wbcr-php-snippets-safe-mode' ] ) ) );
208 - die();
209 - }
210 -
211 - if ( isset( $_GET['wbcr-php-snippets-disable-safe-mode'] ) ) {
212 - WINP_Helper::disable_safe_mode();
213 - wp_safe_redirect( esc_url( remove_query_arg( [ 'wbcr-php-snippets-disable-safe-mode' ] ) ) );
214 - die();
215 - }
216 - },
217 - - 1
218 -);
219 -
220 -/**
221 - * Register product to SDK
222 - *
223 - * @param array<string> $products Registered products.
224 - * @return array<string>
225 - */
226 -function winp_sdk_register_products( $products ) {
227 - $products[] = WINP_PLUGIN_FILE;
228 -
229 - return $products;
230 -}
231 -
232 -/**
233 - * About page metadata
234 - *
235 - * @return array<string, mixed>
236 - */
237 -function winp_sdk_about_page() {
238 - return [
239 - 'location' => 'edit.php?post_type=wbcr-snippets',
240 - 'logo' => WINP_PLUGIN_URL . '/admin/assets/img/icon-256x256.png',
241 - 'review_link' => false,
242 - 'has_upgrade_menu' => false,
243 - ];
244 -}
245 -
246 -/**
247 - * Register compatibility using SDK.
248 - *
249 - * @param array<string, array<string, string>> $compatibilities All compatibilities.
250 - *
251 - * @return array<string, array<string, string>> Registered compatibility.
252 - */
253 -function winp_sdk_register_compatibility( $compatibilities ) {
254 - $compatibilities['WoodyPro'] = [
255 - 'basefile' => defined( 'WASP_PLUGIN_FILE' ) ? WASP_PLUGIN_FILE : '',
256 - 'required' => '1.3.0',
257 - ];
258 -
259 - return $compatibilities;
260 -}
261 -
262 -add_filter( 'themeisle_sdk_products', 'winp_sdk_register_products' );
263 -add_filter( WINP_PLUGIN_NAMESPACE . '_about_us_metadata', 'winp_sdk_about_page' );
264 -add_filter( 'themeisle_sdk_compatibilities/' . basename( WINP_PLUGIN_DIR ), 'winp_sdk_register_compatibility' );
265 -
266 -// Register activation/deactivation hooks.
267 -register_activation_hook(
268 - WINP_PLUGIN_FILE,
269 - function () {
270 - global $winp_snippets_locations;
271 - if ( ! isset( $winp_snippets_locations ) ) {
272 - $winp_snippets_locations = new WINP_Insertion_Locations();
273 - }
274 -
275 - // Instantiate plugin for activation.
276 - $plugin = new WINP_Plugin();
277 - $plugin->activation_hook();
278 - }
279 -);
280 -
281 -register_deactivation_hook(
282 - WINP_PLUGIN_FILE,
283 - function () {
284 - global $winp_snippets_locations;
285 - if ( ! isset( $winp_snippets_locations ) ) {
286 - $winp_snippets_locations = new WINP_Insertion_Locations();
287 - }
288 -
289 - // Instantiate plugin for deactivation.
290 - $plugin = new WINP_Plugin();
291 - $plugin->deactivation_hook();
292 - }
293 -);
294 -
295 -// Initialize on 'init' hook with priority 0 to avoid early translation loading (WP 6.7+)
296 -add_action(
297 - 'init',
298 - function () {
299 - global $winp_snippets_locations;
300 - $winp_snippets_locations = new WINP_Insertion_Locations();
301 -
302 - try {
303 - new WINP_Plugin();
304 - } catch ( Exception $exception ) {
305 - // Plugin wasn't initialized due to an error
306 - define( 'WINP_PLUGIN_THROW_ERROR', true );
307 -
308 - $wbcr_plugin_error_func = function () use ( $exception ) {
309 - $error = sprintf( 'The %s plugin has stopped. <b>Error:</b> %s Code: %s', 'Woody Ad Snippets', $exception->getMessage(), $exception->getCode() );
310 - echo '<div class="notice notice-error"><p>' . $error . '</p></div>';
311 - };
312 -
313 - add_action( 'admin_notices', $wbcr_plugin_error_func );
314 - add_action( 'network_admin_notices', $wbcr_plugin_error_func );
315 - }
316 - },
317 - 0
318 -);
1 +<?php
2 + /**
3 + * Plugin Name: PHP code snippets (Insert PHP)
4 + * Plugin URI: https://wordpress.org/plugins/insert-php/
5 + * Description: Run PHP code inserted into WordPress posts and pages. An easy, clean and easy way to add code snippets to your site. You do not need to edit the functions.php file of your theme again!
6 + * Author: Will Bontrager Software, LLC <will@willmaster.com>, Webcraftic <wordpress.webraftic@gmail.com>
7 + * Version: 2.0.6
8 + * Text Domain: insert-php
9 + * Domain Path: /languages/
10 + * Author URI: http://www.willmaster.com/contact.php
11 + */
12 +
13 + // Exit if accessed directly
14 + if( !defined('ABSPATH') ) {
15 + exit;
16 + }
17 +
18 + if( defined('WINP_PLUGIN_ACTIVE') ) {
19 + return;
20 + }
21 +
22 + // Set the constant that the plugin is activated
23 + define('WINP_PLUGIN_ACTIVE', true);
24 +
25 + // Root directory of the plugin
26 + define('WINP_PLUGIN_DIR', dirname(__FILE__));
27 +
28 + // Absolute url of the root directory of the plugin
29 + define('WINP_PLUGIN_URL', plugins_url(null, __FILE__));
30 +
31 + // Relative url of the plugin
32 + define('WINP_PLUGIN_BASE', plugin_basename(__FILE__));
33 +
34 + // The type of posts used for snippets types
35 + define('WINP_SNIPPETS_POST_TYPE', 'wbcr-snippets');
36 +
37 + // The taxonomy used for snippets types
38 + define('WINP_SNIPPETS_TAXONOMY', 'wbcr-snippet-tags');
39 +
40 +
41 +
42 + global $wp_version;
43 +
44 + // Troubleshoot old versions of WordPress
45 + if( version_compare($wp_version, '4.2.0', '>') ) {
46 +
47 + require_once(WINP_PLUGIN_DIR . '/libs/factory/core/boot.php');
48 +
49 + require_once(WINP_PLUGIN_DIR . '/includes/class.helpers.php');
50 + require_once(WINP_PLUGIN_DIR . '/includes/class.plugin.php');
51 +
52 + new WINP_Plugin(__FILE__, array(
53 + 'prefix' => 'wbcr_inp_',
54 + 'plugin_name' => 'wbcr_insert_php',
55 + 'plugin_title' => __('PHP code snippets (Insert PHP)', 'insert-php'),
56 + 'plugin_version' => '2.0.6',
57 + 'required_php_version' => '5.2',
58 + 'required_wp_version' => '4.2',
59 + 'plugin_build' => 'free',
60 + //'updates' => WINP_PLUGIN_DIR . '/updates/'
61 + ));
62 + } else {
63 + // Notification about the old version of Wordpress
64 + add_action('admin_notices', function () {
65 + echo '<div class="notice notice-error"><p>' . __('You are using the old version of Wordpress, for the <b>PHP code snippets (Insert PHP)</b> plugin you need Wordpress 4.2 and higher versions!', 'insert-php') . '</p></div>';
66 + });
67 + }
68 +
69 + /*
70 + Note: This plugin requires WordPress version 3.3.1 or higher.
71 +
72 + Information about the Insert PHP plugin can be found here:
73 + http://www.willmaster.com/software/WPplugins/go/iphphome_iphplugin
74 +
75 + Instructions and examples can be found here:
76 + http://www.willmaster.com/software/WPplugins/go/iphpinstructions_iphplugin
77 + */
78 +
79 + // todo: This is the code of the old version of the plugin, left unchanged for compatibility. Delete in the new major version of the plugin
80 + if( !function_exists('will_bontrager_insert_php') ) {
81 +
82 + function will_bontrager_insert_php($content)
83 + {
84 + $will_bontrager_content = $content;
85 + preg_match_all('!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is', $will_bontrager_content, $will_bontrager_matches);
86 + $will_bontrager_nummatches = count($will_bontrager_matches[0]);
87 + for($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
88 + ob_start();
89 + eval($will_bontrager_matches[1][$will_bontrager_i]);
90 + $will_bontrager_replacement = ob_get_contents();
91 + ob_clean();
92 + ob_end_flush();
93 + $will_bontrager_content = preg_replace('/' . preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/') . '/', $will_bontrager_replacement, $will_bontrager_content, 1);
94 + }
95 +
96 + return $will_bontrager_content;
97 + } # function will_bontrager_insert_php()
98 +
99 + add_filter('the_content', 'will_bontrager_insert_php', 9);
100 + } # if( ! function_exists('will_bontrager_insert_php') )