PluginProbe
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts / trunk
Woody Code Snippets – Insert PHP, CSS, JS, and Header/Footer Scripts vtrunk
2.7.7 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 All 28 releases
← All changes | includes/shortcodes/shortcodes.php +122 -35 2.4.5trunk View file →
@@ -1,7 +1,7 @@
1 1 <?php
2 2 /**
3 - * A base shortcode for all lockers
3 + * A base shortcode for all snippets
4 4 *
5 5 * @since 1.0.0
6 6 */
7 7
@@ -9,27 +9,103 @@
9 9 if ( ! defined( 'ABSPATH' ) ) {
10 10 exit;
11 11 }
12 12
13 -class WINP_SnippetShortcode extends Wbcr_FactoryShortcodes332_Shortcode {
13 +/**
14 + * Base shortcode class for all snippet shortcodes
15 + */
16 +class WINP_SnippetShortcode {
14 17
18 + /**
19 + * Plugin instance
20 + *
21 + * @var WINP_Plugin
22 + */
23 + public $plugin;
24 +
25 + /**
26 + * Shortcode name(s)
27 + *
28 + * @var string|array<string>
29 + */
15 30 public $shortcode_name = 'wbcr_php_snippet';
16 31
17 32 /**
18 - * Includes assets
33 + * Includes assets in header
34 + *
19 35 * @var bool
20 36 */
21 37 public $assets_in_header = true;
22 38
23 39 /**
40 + * Constructor
41 + *
42 + * @param WINP_Plugin $plugin Plugin instance.
43 + */
44 + public function __construct( $plugin ) {
45 + $this->plugin = $plugin;
46 +
47 + // Ensure shortcode_name is an array.
48 + if ( ! is_array( $this->shortcode_name ) ) {
49 + $this->shortcode_name = [ $this->shortcode_name ];
50 + }
51 +
52 + // Register shortcode(s) with WordPress.
53 + foreach ( $this->shortcode_name as $name ) {
54 + if ( ! empty( $name ) ) {
55 + add_shortcode( $name, [ $this, 'render' ] );
56 + }
57 + }
58 +
59 + // Enqueue assets in header if needed.
60 + if ( $this->assets_in_header ) {
61 + add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_assets' ] );
62 + }
63 + }
64 +
65 + /**
66 + * Enqueue assets if needed.
67 + *
68 + * @return void
69 + */
70 + public function enqueue_assets() {
71 + // Override in child classes if needed.
72 + }
73 +
74 + /**
75 + * Shortcode render callback.
76 + *
77 + * @param array<string, mixed> $attr Shortcode attributes.
78 + * @param string|null $content Shortcode content.
79 + * @param string $tag Shortcode tag.
80 + *
81 + * @return string
82 + */
83 + public function render( $attr, $content, $tag ) {
84 + if ( WINP_Helper::is_safe_mode() ) {
85 + return '';
86 + }
87 +
88 + ob_start();
89 + $result = $this->html( $attr, $content ?? '', $tag );
90 + $html = ob_get_clean();
91 +
92 + if ( is_string( $result ) ) {
93 + $html = ( false !== $html ? $html : '' ) . $result;
94 + }
95 +
96 + return false !== $html ? $html : '';
97 + }
98 +
99 + /**
24 100 * Filter attributes
25 101 *
26 - * @param $attr
27 - * @param $post_id
102 + * @param array<string, mixed> $attr Shortcode attributes.
103 + * @param int $post_id Post ID.
28 104 *
29 - * @return mixed
105 + * @return array<string, mixed>
30 106 */
31 - public function filterAttributes( $attr, $post_id ) {
107 + public function filter_attributes( $attr, $post_id ) {
32 108 if ( ! empty( $attr ) ) {
33 109 $available_tags = WINP_Helper::getMetaOption( $post_id, 'snippet_tags', null );
34 110
35 111 if ( ! empty( $available_tags ) ) {
@@ -37,9 +113,9 @@
37 113 $available_tags = array_map( 'trim', $available_tags );
38 114 }
39 115
40 116 foreach ( $attr as $name => $value ) {
41 - $is_allow_attr = in_array( $name, array( 'id', 'title' ) );
117 + $is_allow_attr = in_array( $name, [ 'id', 'title' ] );
42 118 $validate_name = preg_match( '/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $name );
43 119
44 120 if ( ! $is_allow_attr && ( ( ! empty( $available_tags ) && ! in_array( $name, $available_tags ) ) || ! $validate_name ) ) {
45 121 unset( $attr[ $name ] );
@@ -76,17 +152,28 @@
76 152
77 153 /**
78 154 * Get snippet id
79 155 *
80 - * @param $attr
81 - * @param $type
156 + * @param array<string, mixed> $attr Shortcode attributes.
157 + * @param string $type Snippet type.
82 158 *
83 159 * @return int|null
84 160 */
85 - public function getSnippetId( $attr, $type ) {
161 + public function get_snippet_id( $attr, $type ) {
86 162 $id = isset( $attr['id'] ) ? (int) $attr['id'] : null;
87 - if ( $id && $type != WINP_Helper::get_snippet_type( $id ) ) {
88 - $id = 0;
163 +
164 + $snippet_type = null;
165 +
166 + // Only resolve snippet type when a valid (truthy) ID is provided to avoid
167 + // unnecessary request parsing or database lookups for invalid IDs.
168 + if ( $id ) {
169 + $snippet_type = WINP_Helper::get_snippet_type( $id );
170 +
171 + // Security: Reject if get_snippet_type() returned false (invalid post type)
172 + // or if the snippet type doesn't match the expected type.
173 + if ( false === $snippet_type || $snippet_type !== $type ) {
174 + $id = 0;
175 + }
89 176 }
90 177
91 178 return $id;
92 179 }
@@ -93,16 +180,16 @@
93 180
94 181 /**
95 182 * Get snippet activate
96 183 *
97 - * @param $snippet_meta
184 + * @param array<string, mixed> $snippet_meta Snippet metadata.
98 185 *
99 186 * @return bool
100 187 */
101 - public function getSnippetActivate( $snippet_meta ) {
102 - // WPML Compatibility
188 + public function get_snippet_activate( $snippet_meta ) {
189 + // WPML Compatibility.
103 190 if ( defined( 'WPML_PLUGIN_FILE' ) ) {
104 - $wpml_langs = isset( $snippet_meta[ $this->plugin->getPrefix() . 'snippet_wpml_lang' ][0] ) ? $snippet_meta[ $this->plugin->getPrefix() . 'snippet_wpml_lang' ][0] : '';
191 + $wpml_langs = isset( $snippet_meta['wbcr_inp_snippet_wpml_lang'][0] ) ? $snippet_meta['wbcr_inp_snippet_wpml_lang'][0] : '';
105 192 if ( $wpml_langs !== '' && defined( 'ICL_LANGUAGE_CODE' ) ) {
106 193 if ( ! in_array( ICL_LANGUAGE_CODE, explode( ',', $wpml_langs ) ) ) {
107 194 return false;
108 195 }
@@ -108,49 +195,49 @@
108 195 }
109 196 }
110 197 }
111 198
112 - return isset( $snippet_meta[ $this->plugin->getPrefix() . 'snippet_activate' ] ) && $snippet_meta[ $this->plugin->getPrefix() . 'snippet_activate' ][0];
199 + return isset( $snippet_meta['wbcr_inp_snippet_activate'] ) && $snippet_meta['wbcr_inp_snippet_activate'][0];
113 200 }
114 201
115 202 /**
116 203 * Get snippet scope
117 204 *
118 - * @param $snippet_meta
205 + * @param array<string, mixed> $snippet_meta Snippet metadata.
119 206 *
120 - * @return null
207 + * @return string|null
121 208 */
122 - public function getSnippetScope( $snippet_meta ) {
123 - return isset( $snippet_meta[ $this->plugin->getPrefix() . 'snippet_scope' ] ) ? $snippet_meta[ $this->plugin->getPrefix() . 'snippet_scope' ][0] : null;
209 + public function get_snippet_scope( $snippet_meta ) {
210 + return isset( $snippet_meta['wbcr_inp_snippet_scope'] ) ? $snippet_meta['wbcr_inp_snippet_scope'][0] : null;
124 211 }
125 212
126 213 /**
127 214 * Get snippet content
128 215 *
129 - * @param WP_Post $snippet
130 - * @param array $snippet_meta
131 - * @param int $id
216 + * @param WP_Post $snippet Snippet post object.
217 + * @param array<string, mixed> $snippet_meta Snippet metadata.
218 + * @param int $id Snippet ID.
132 219 *
133 - * @return null|string
220 + * @return string|null
134 221 */
135 - public function getSnippetContent( $snippet, $snippet_meta, $id ) {
222 + public function get_snippet_content( $snippet, $snippet_meta, $id ) {
136 223 $snippet_code = WINP_Helper::get_snippet_code( $snippet );
137 224
138 - if ( WINP_Plugin::app()->getOption( 'execute_shortcode' ) ) {
225 + if ( get_option( 'wbcr_inp_execute_shortcode' ) ) {
139 226 $snippet_code = do_shortcode( $snippet_code );
140 227 }
141 228
142 - return WINP_Plugin::app()->getExecuteObject()->prepareCode( $snippet_code, $id );
229 + return WINP_Plugin::app()->get_execute_object()->prepareCode( $snippet_code, $id );
143 230 }
144 231
145 232 /**
146 233 * Content render
147 234 *
148 - * @param array $attr
149 - * @param string $content
150 - * @param string $tag
235 + * @param array<string, mixed> $attr Shortcode attributes.
236 + * @param string $content Shortcode content.
237 + * @param string $tag Shortcode tag.
238 + *
239 + * @return mixed Rendered content when returned directly, if any.
151 240 */
152 241 public function html( $attr, $content, $tag ) {
153 -
154 242 }
155 -
156 -}
243 +}