@mytechtoday/augment-extensions 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/augment-extensions/domain-rules/wordpress/README.md +163 -0
- package/augment-extensions/domain-rules/wordpress/module.json +32 -0
- package/augment-extensions/domain-rules/wordpress/rules/coding-standards.md +617 -0
- package/augment-extensions/domain-rules/wordpress/rules/directory-structure.md +270 -0
- package/augment-extensions/domain-rules/wordpress/rules/file-patterns.md +423 -0
- package/augment-extensions/domain-rules/wordpress/rules/gutenberg-blocks.md +493 -0
- package/augment-extensions/domain-rules/wordpress/rules/performance.md +568 -0
- package/augment-extensions/domain-rules/wordpress/rules/plugin-development.md +510 -0
- package/augment-extensions/domain-rules/wordpress/rules/project-detection.md +251 -0
- package/augment-extensions/domain-rules/wordpress/rules/rest-api.md +501 -0
- package/augment-extensions/domain-rules/wordpress/rules/security.md +564 -0
- package/augment-extensions/domain-rules/wordpress/rules/theme-development.md +388 -0
- package/augment-extensions/domain-rules/wordpress/rules/woocommerce.md +441 -0
- package/augment-extensions/domain-rules/wordpress-plugin/README.md +139 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/ajax-plugin.md +1599 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/custom-post-type-plugin.md +1727 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block-plugin.md +428 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/gutenberg-block.md +422 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/mvc-plugin.md +1623 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/object-oriented-plugin.md +1343 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/rest-endpoint.md +734 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/settings-page-plugin.md +1350 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/simple-procedural-plugin.md +503 -0
- package/augment-extensions/domain-rules/wordpress-plugin/examples/singleton-plugin.md +971 -0
- package/augment-extensions/domain-rules/wordpress-plugin/module.json +53 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/activation-hooks.md +770 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/admin-interface.md +874 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/ajax-handlers.md +629 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/asset-management.md +559 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/context-providers.md +709 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/cron-jobs.md +736 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/database-management.md +1057 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/documentation-standards.md +463 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/frontend-functionality.md +478 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/gutenberg-blocks.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/internationalization.md +416 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/migration.md +667 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/performance-optimization.md +878 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-architecture.md +693 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/plugin-structure.md +352 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/rest-api.md +818 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/scaffolding-workflow.md +624 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/security-best-practices.md +866 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing-patterns.md +1165 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/testing.md +414 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/vscode-integration.md +751 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/woocommerce-integration.md +949 -0
- package/augment-extensions/domain-rules/wordpress-plugin/rules/wordpress-org-submission.md +458 -0
- package/augment-extensions/examples/gutenberg-block-plugin/README.md +101 -0
- package/augment-extensions/examples/gutenberg-block-plugin/examples/testimonial-block.md +428 -0
- package/augment-extensions/examples/gutenberg-block-plugin/module.json +40 -0
- package/augment-extensions/examples/rest-api-plugin/README.md +98 -0
- package/augment-extensions/examples/rest-api-plugin/examples/task-manager-api.md +1299 -0
- package/augment-extensions/examples/rest-api-plugin/module.json +40 -0
- package/augment-extensions/examples/woocommerce-extension/README.md +98 -0
- package/augment-extensions/examples/woocommerce-extension/examples/product-customizer.md +763 -0
- package/augment-extensions/examples/woocommerce-extension/module.json +40 -0
- package/augment-extensions/workflows/wordpress-plugin/README.md +232 -0
- package/augment-extensions/workflows/wordpress-plugin/ai-prompts.md +839 -0
- package/augment-extensions/workflows/wordpress-plugin/bead-decomposition-patterns.md +854 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/complete-plugin-example.md +540 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/custom-post-type-example.md +1083 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/feature-addition-workflow.md +669 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/plugin-creation-workflow.md +597 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/secure-form-handler-example.md +925 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/security-audit-workflow.md +752 -0
- package/augment-extensions/workflows/wordpress-plugin/examples/wordpress-org-submission-workflow.md +773 -0
- package/augment-extensions/workflows/wordpress-plugin/module.json +49 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/best-practices.md +942 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/development-workflow.md +702 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/submission-workflow.md +728 -0
- package/augment-extensions/workflows/wordpress-plugin/rules/testing-workflow.md +775 -0
- package/cli/dist/cli.js +5 -1
- package/cli/dist/cli.js.map +1 -1
- package/cli/dist/commands/show.d.ts.map +1 -1
- package/cli/dist/commands/show.js +41 -0
- package/cli/dist/commands/show.js.map +1 -1
- package/modules.md +52 -0
- package/package.json +1 -1
|
@@ -0,0 +1,559 @@
|
|
|
1
|
+
# Asset Management
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This guide covers WordPress plugin asset management including enqueueing scripts and styles, dependency management, versioning, conditional loading, inline scripts/styles, and build processes.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Enqueuing Scripts
|
|
10
|
+
|
|
11
|
+
### Basic Script Enqueuing
|
|
12
|
+
|
|
13
|
+
```php
|
|
14
|
+
<?php
|
|
15
|
+
/**
|
|
16
|
+
* Enqueue plugin scripts
|
|
17
|
+
*/
|
|
18
|
+
function my_plugin_enqueue_scripts() {
|
|
19
|
+
wp_enqueue_script(
|
|
20
|
+
'my-plugin-script', // Handle
|
|
21
|
+
plugins_url( 'js/script.js', __FILE__ ), // Source
|
|
22
|
+
array( 'jquery' ), // Dependencies
|
|
23
|
+
'1.0.0', // Version
|
|
24
|
+
true // In footer
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
add_action( 'wp_enqueue_scripts', 'my_plugin_enqueue_scripts' );
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Admin Scripts
|
|
31
|
+
|
|
32
|
+
```php
|
|
33
|
+
<?php
|
|
34
|
+
/**
|
|
35
|
+
* Enqueue admin scripts
|
|
36
|
+
*/
|
|
37
|
+
function my_plugin_admin_scripts( $hook ) {
|
|
38
|
+
// Only load on specific admin pages
|
|
39
|
+
if ( 'settings_page_my-plugin' !== $hook ) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
wp_enqueue_script(
|
|
44
|
+
'my-plugin-admin',
|
|
45
|
+
plugins_url( 'admin/js/admin.js', __FILE__ ),
|
|
46
|
+
array( 'jquery', 'wp-color-picker' ),
|
|
47
|
+
'1.0.0',
|
|
48
|
+
true
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
add_action( 'admin_enqueue_scripts', 'my_plugin_admin_scripts' );
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Script Localization
|
|
55
|
+
|
|
56
|
+
```php
|
|
57
|
+
<?php
|
|
58
|
+
/**
|
|
59
|
+
* Localize script with data
|
|
60
|
+
*/
|
|
61
|
+
function my_plugin_enqueue_with_data() {
|
|
62
|
+
wp_enqueue_script(
|
|
63
|
+
'my-plugin-ajax',
|
|
64
|
+
plugins_url( 'js/ajax.js', __FILE__ ),
|
|
65
|
+
array( 'jquery' ),
|
|
66
|
+
'1.0.0',
|
|
67
|
+
true
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
wp_localize_script( 'my-plugin-ajax', 'myPluginData', array(
|
|
71
|
+
'ajaxurl' => admin_url( 'admin-ajax.php' ),
|
|
72
|
+
'nonce' => wp_create_nonce( 'my_plugin_nonce' ),
|
|
73
|
+
'strings' => array(
|
|
74
|
+
'loading' => __( 'Loading...', 'my-plugin' ),
|
|
75
|
+
'error' => __( 'An error occurred', 'my-plugin' ),
|
|
76
|
+
),
|
|
77
|
+
) );
|
|
78
|
+
}
|
|
79
|
+
add_action( 'wp_enqueue_scripts', 'my_plugin_enqueue_with_data' );
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## Enqueuing Styles
|
|
85
|
+
|
|
86
|
+
### Basic Style Enqueuing
|
|
87
|
+
|
|
88
|
+
```php
|
|
89
|
+
<?php
|
|
90
|
+
/**
|
|
91
|
+
* Enqueue plugin styles
|
|
92
|
+
*/
|
|
93
|
+
function my_plugin_enqueue_styles() {
|
|
94
|
+
wp_enqueue_style(
|
|
95
|
+
'my-plugin-style', // Handle
|
|
96
|
+
plugins_url( 'css/style.css', __FILE__ ), // Source
|
|
97
|
+
array(), // Dependencies
|
|
98
|
+
'1.0.0', // Version
|
|
99
|
+
'all' // Media
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
add_action( 'wp_enqueue_scripts', 'my_plugin_enqueue_styles' );
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Admin Styles
|
|
106
|
+
|
|
107
|
+
```php
|
|
108
|
+
<?php
|
|
109
|
+
/**
|
|
110
|
+
* Enqueue admin styles
|
|
111
|
+
*/
|
|
112
|
+
function my_plugin_admin_styles( $hook ) {
|
|
113
|
+
// Only load on plugin pages
|
|
114
|
+
if ( strpos( $hook, 'my-plugin' ) === false ) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
wp_enqueue_style(
|
|
119
|
+
'my-plugin-admin',
|
|
120
|
+
plugins_url( 'admin/css/admin.css', __FILE__ ),
|
|
121
|
+
array(),
|
|
122
|
+
'1.0.0'
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
add_action( 'admin_enqueue_scripts', 'my_plugin_admin_styles' );
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Media-Specific Styles
|
|
129
|
+
|
|
130
|
+
```php
|
|
131
|
+
<?php
|
|
132
|
+
// Print styles
|
|
133
|
+
wp_enqueue_style(
|
|
134
|
+
'my-plugin-print',
|
|
135
|
+
plugins_url( 'css/print.css', __FILE__ ),
|
|
136
|
+
array(),
|
|
137
|
+
'1.0.0',
|
|
138
|
+
'print'
|
|
139
|
+
);
|
|
140
|
+
|
|
141
|
+
// Mobile styles
|
|
142
|
+
wp_enqueue_style(
|
|
143
|
+
'my-plugin-mobile',
|
|
144
|
+
plugins_url( 'css/mobile.css', __FILE__ ),
|
|
145
|
+
array(),
|
|
146
|
+
'1.0.0',
|
|
147
|
+
'(max-width: 768px)'
|
|
148
|
+
);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Dependency Management
|
|
154
|
+
|
|
155
|
+
### WordPress Core Dependencies
|
|
156
|
+
|
|
157
|
+
```php
|
|
158
|
+
<?php
|
|
159
|
+
// jQuery
|
|
160
|
+
wp_enqueue_script( 'my-script', $url, array( 'jquery' ), '1.0.0', true );
|
|
161
|
+
|
|
162
|
+
// jQuery UI
|
|
163
|
+
wp_enqueue_script( 'my-script', $url, array( 'jquery-ui-datepicker' ), '1.0.0', true );
|
|
164
|
+
|
|
165
|
+
// WordPress Media Uploader
|
|
166
|
+
wp_enqueue_media();
|
|
167
|
+
wp_enqueue_script( 'my-script', $url, array( 'jquery', 'media-upload' ), '1.0.0', true );
|
|
168
|
+
|
|
169
|
+
// Color Picker
|
|
170
|
+
wp_enqueue_style( 'wp-color-picker' );
|
|
171
|
+
wp_enqueue_script( 'my-script', $url, array( 'wp-color-picker' ), '1.0.0', true );
|
|
172
|
+
|
|
173
|
+
// CodeMirror
|
|
174
|
+
wp_enqueue_code_editor( array( 'type' => 'text/css' ) );
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Block Editor Dependencies
|
|
178
|
+
|
|
179
|
+
```php
|
|
180
|
+
<?php
|
|
181
|
+
/**
|
|
182
|
+
* Enqueue block editor assets
|
|
183
|
+
*/
|
|
184
|
+
function my_plugin_block_editor_assets() {
|
|
185
|
+
wp_enqueue_script(
|
|
186
|
+
'my-plugin-blocks',
|
|
187
|
+
plugins_url( 'build/blocks.js', __FILE__ ),
|
|
188
|
+
array(
|
|
189
|
+
'wp-blocks',
|
|
190
|
+
'wp-element',
|
|
191
|
+
'wp-editor',
|
|
192
|
+
'wp-components',
|
|
193
|
+
'wp-i18n',
|
|
194
|
+
),
|
|
195
|
+
'1.0.0',
|
|
196
|
+
true
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
add_action( 'enqueue_block_editor_assets', 'my_plugin_block_editor_assets' );
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Versioning
|
|
205
|
+
|
|
206
|
+
### Dynamic Versioning
|
|
207
|
+
|
|
208
|
+
```php
|
|
209
|
+
<?php
|
|
210
|
+
// Use plugin version constant
|
|
211
|
+
define( 'MY_PLUGIN_VERSION', '1.0.0' );
|
|
212
|
+
|
|
213
|
+
wp_enqueue_script(
|
|
214
|
+
'my-plugin-script',
|
|
215
|
+
plugins_url( 'js/script.js', __FILE__ ),
|
|
216
|
+
array( 'jquery' ),
|
|
217
|
+
MY_PLUGIN_VERSION,
|
|
218
|
+
true
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
// Use file modification time for cache busting during development
|
|
222
|
+
$version = defined( 'WP_DEBUG' ) && WP_DEBUG
|
|
223
|
+
? filemtime( plugin_dir_path( __FILE__ ) . 'js/script.js' )
|
|
224
|
+
: MY_PLUGIN_VERSION;
|
|
225
|
+
|
|
226
|
+
wp_enqueue_script(
|
|
227
|
+
'my-plugin-script',
|
|
228
|
+
plugins_url( 'js/script.js', __FILE__ ),
|
|
229
|
+
array( 'jquery' ),
|
|
230
|
+
$version,
|
|
231
|
+
true
|
|
232
|
+
);
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Cache Busting
|
|
236
|
+
|
|
237
|
+
```php
|
|
238
|
+
<?php
|
|
239
|
+
/**
|
|
240
|
+
* Get asset version with cache busting
|
|
241
|
+
*/
|
|
242
|
+
function my_plugin_get_asset_version( $file ) {
|
|
243
|
+
$file_path = plugin_dir_path( __FILE__ ) . $file;
|
|
244
|
+
|
|
245
|
+
if ( defined( 'WP_DEBUG' ) && WP_DEBUG && file_exists( $file_path ) ) {
|
|
246
|
+
return filemtime( $file_path );
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
return MY_PLUGIN_VERSION;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
wp_enqueue_script(
|
|
253
|
+
'my-plugin-script',
|
|
254
|
+
plugins_url( 'js/script.js', __FILE__ ),
|
|
255
|
+
array( 'jquery' ),
|
|
256
|
+
my_plugin_get_asset_version( 'js/script.js' ),
|
|
257
|
+
true
|
|
258
|
+
);
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
## Conditional Loading
|
|
264
|
+
|
|
265
|
+
### Load Only Where Needed
|
|
266
|
+
|
|
267
|
+
```php
|
|
268
|
+
<?php
|
|
269
|
+
/**
|
|
270
|
+
* Conditionally enqueue assets
|
|
271
|
+
*/
|
|
272
|
+
function my_plugin_conditional_assets() {
|
|
273
|
+
// Only on single posts
|
|
274
|
+
if ( is_single() ) {
|
|
275
|
+
wp_enqueue_script( 'my-plugin-single', $url, array(), '1.0.0', true );
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Only on specific post type
|
|
279
|
+
if ( is_singular( 'product' ) ) {
|
|
280
|
+
wp_enqueue_script( 'my-plugin-product', $url, array(), '1.0.0', true );
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// Only if shortcode is present
|
|
284
|
+
global $post;
|
|
285
|
+
if ( is_a( $post, 'WP_Post' ) && has_shortcode( $post->post_content, 'my_shortcode' ) ) {
|
|
286
|
+
wp_enqueue_script( 'my-plugin-shortcode', $url, array(), '1.0.0', true );
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// Only on specific page template
|
|
290
|
+
if ( is_page_template( 'template-custom.php' ) ) {
|
|
291
|
+
wp_enqueue_script( 'my-plugin-template', $url, array(), '1.0.0', true );
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
add_action( 'wp_enqueue_scripts', 'my_plugin_conditional_assets' );
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Admin Page Specific
|
|
298
|
+
|
|
299
|
+
```php
|
|
300
|
+
<?php
|
|
301
|
+
/**
|
|
302
|
+
* Load assets only on plugin admin pages
|
|
303
|
+
*/
|
|
304
|
+
function my_plugin_admin_conditional( $hook ) {
|
|
305
|
+
// Only on plugin settings page
|
|
306
|
+
if ( 'settings_page_my-plugin' === $hook ) {
|
|
307
|
+
wp_enqueue_script( 'my-plugin-settings', $url, array(), '1.0.0', true );
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
// Only on post edit screen
|
|
311
|
+
if ( 'post.php' === $hook || 'post-new.php' === $hook ) {
|
|
312
|
+
wp_enqueue_script( 'my-plugin-post-editor', $url, array(), '1.0.0', true );
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Only on specific custom post type
|
|
316
|
+
global $post_type;
|
|
317
|
+
if ( 'product' === $post_type ) {
|
|
318
|
+
wp_enqueue_script( 'my-plugin-product-admin', $url, array(), '1.0.0', true );
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
add_action( 'admin_enqueue_scripts', 'my_plugin_admin_conditional' );
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
---
|
|
325
|
+
|
|
326
|
+
## Inline Scripts and Styles
|
|
327
|
+
|
|
328
|
+
### Inline JavaScript
|
|
329
|
+
|
|
330
|
+
```php
|
|
331
|
+
<?php
|
|
332
|
+
/**
|
|
333
|
+
* Add inline script
|
|
334
|
+
*/
|
|
335
|
+
function my_plugin_inline_script() {
|
|
336
|
+
wp_enqueue_script( 'my-plugin-script', $url, array(), '1.0.0', true );
|
|
337
|
+
|
|
338
|
+
$inline_script = "
|
|
339
|
+
const myPluginConfig = {
|
|
340
|
+
apiUrl: '" . esc_js( rest_url( 'my-plugin/v1' ) ) . "',
|
|
341
|
+
nonce: '" . wp_create_nonce( 'wp_rest' ) . "'
|
|
342
|
+
};
|
|
343
|
+
";
|
|
344
|
+
|
|
345
|
+
wp_add_inline_script( 'my-plugin-script', $inline_script, 'before' );
|
|
346
|
+
}
|
|
347
|
+
add_action( 'wp_enqueue_scripts', 'my_plugin_inline_script' );
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Inline CSS
|
|
351
|
+
|
|
352
|
+
```php
|
|
353
|
+
<?php
|
|
354
|
+
/**
|
|
355
|
+
* Add inline styles
|
|
356
|
+
*/
|
|
357
|
+
function my_plugin_inline_styles() {
|
|
358
|
+
wp_enqueue_style( 'my-plugin-style', $url, array(), '1.0.0' );
|
|
359
|
+
|
|
360
|
+
$custom_css = "
|
|
361
|
+
.my-plugin-element {
|
|
362
|
+
background-color: " . esc_attr( get_option( 'my_plugin_color', '#000000' ) ) . ";
|
|
363
|
+
}
|
|
364
|
+
";
|
|
365
|
+
|
|
366
|
+
wp_add_inline_style( 'my-plugin-style', $custom_css );
|
|
367
|
+
}
|
|
368
|
+
add_action( 'wp_enqueue_scripts', 'my_plugin_inline_styles' );
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
---
|
|
372
|
+
|
|
373
|
+
## Build Processes
|
|
374
|
+
|
|
375
|
+
### npm/webpack Setup
|
|
376
|
+
|
|
377
|
+
**package.json**:
|
|
378
|
+
|
|
379
|
+
```json
|
|
380
|
+
{
|
|
381
|
+
"name": "my-plugin",
|
|
382
|
+
"version": "1.0.0",
|
|
383
|
+
"scripts": {
|
|
384
|
+
"build": "webpack --mode production",
|
|
385
|
+
"dev": "webpack --mode development --watch",
|
|
386
|
+
"lint:js": "eslint assets/src/js",
|
|
387
|
+
"lint:css": "stylelint assets/src/css/**/*.css"
|
|
388
|
+
},
|
|
389
|
+
"devDependencies": {
|
|
390
|
+
"@wordpress/scripts": "^26.0.0",
|
|
391
|
+
"webpack": "^5.0.0",
|
|
392
|
+
"webpack-cli": "^5.0.0"
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### WordPress Scripts
|
|
398
|
+
|
|
399
|
+
```json
|
|
400
|
+
{
|
|
401
|
+
"scripts": {
|
|
402
|
+
"build": "wp-scripts build",
|
|
403
|
+
"start": "wp-scripts start",
|
|
404
|
+
"lint:js": "wp-scripts lint-js",
|
|
405
|
+
"lint:css": "wp-scripts lint-style"
|
|
406
|
+
},
|
|
407
|
+
"devDependencies": {
|
|
408
|
+
"@wordpress/scripts": "^26.0.0"
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Asset Dependencies (asset.php)
|
|
414
|
+
|
|
415
|
+
```php
|
|
416
|
+
<?php
|
|
417
|
+
/**
|
|
418
|
+
* Enqueue with generated dependencies
|
|
419
|
+
*/
|
|
420
|
+
function my_plugin_enqueue_block_assets() {
|
|
421
|
+
$asset_file = include plugin_dir_path( __FILE__ ) . 'build/index.asset.php';
|
|
422
|
+
|
|
423
|
+
wp_enqueue_script(
|
|
424
|
+
'my-plugin-blocks',
|
|
425
|
+
plugins_url( 'build/index.js', __FILE__ ),
|
|
426
|
+
$asset_file['dependencies'],
|
|
427
|
+
$asset_file['version'],
|
|
428
|
+
true
|
|
429
|
+
);
|
|
430
|
+
}
|
|
431
|
+
add_action( 'enqueue_block_editor_assets', 'my_plugin_enqueue_block_assets' );
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## Best Practices
|
|
437
|
+
|
|
438
|
+
### DO
|
|
439
|
+
|
|
440
|
+
✅ Always use `wp_enqueue_script()` and `wp_enqueue_style()`
|
|
441
|
+
✅ Specify dependencies correctly
|
|
442
|
+
✅ Use versioning for cache control
|
|
443
|
+
✅ Load scripts in footer when possible
|
|
444
|
+
✅ Conditionally load assets only where needed
|
|
445
|
+
✅ Use `wp_localize_script()` for passing data to JavaScript
|
|
446
|
+
✅ Minify assets in production
|
|
447
|
+
✅ Use WordPress core libraries when available
|
|
448
|
+
|
|
449
|
+
### DON'T
|
|
450
|
+
|
|
451
|
+
❌ Hard-code `<script>` or `<link>` tags
|
|
452
|
+
❌ Load assets on every page unnecessarily
|
|
453
|
+
❌ Forget to specify dependencies
|
|
454
|
+
❌ Use inline scripts for large code blocks
|
|
455
|
+
❌ Load unminified assets in production
|
|
456
|
+
❌ Include jQuery or other core libraries manually
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## Performance Optimization
|
|
461
|
+
|
|
462
|
+
### Defer and Async
|
|
463
|
+
|
|
464
|
+
```php
|
|
465
|
+
<?php
|
|
466
|
+
/**
|
|
467
|
+
* Add defer attribute to script
|
|
468
|
+
*/
|
|
469
|
+
function my_plugin_defer_script( $tag, $handle, $src ) {
|
|
470
|
+
if ( 'my-plugin-script' === $handle ) {
|
|
471
|
+
return str_replace( ' src', ' defer src', $tag );
|
|
472
|
+
}
|
|
473
|
+
return $tag;
|
|
474
|
+
}
|
|
475
|
+
add_filter( 'script_loader_tag', 'my_plugin_defer_script', 10, 3 );
|
|
476
|
+
|
|
477
|
+
/**
|
|
478
|
+
* Add async attribute to script
|
|
479
|
+
*/
|
|
480
|
+
function my_plugin_async_script( $tag, $handle, $src ) {
|
|
481
|
+
if ( 'my-plugin-analytics' === $handle ) {
|
|
482
|
+
return str_replace( ' src', ' async src', $tag );
|
|
483
|
+
}
|
|
484
|
+
return $tag;
|
|
485
|
+
}
|
|
486
|
+
add_filter( 'script_loader_tag', 'my_plugin_async_script', 10, 3 );
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Preloading Assets
|
|
490
|
+
|
|
491
|
+
```php
|
|
492
|
+
<?php
|
|
493
|
+
/**
|
|
494
|
+
* Preload critical assets
|
|
495
|
+
*/
|
|
496
|
+
function my_plugin_preload_assets() {
|
|
497
|
+
echo '<link rel="preload" href="' . esc_url( plugins_url( 'css/critical.css', __FILE__ ) ) . '" as="style">';
|
|
498
|
+
echo '<link rel="preload" href="' . esc_url( plugins_url( 'js/critical.js', __FILE__ ) ) . '" as="script">';
|
|
499
|
+
}
|
|
500
|
+
add_action( 'wp_head', 'my_plugin_preload_assets', 1 );
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
## Common Patterns
|
|
506
|
+
|
|
507
|
+
### Enqueue Class
|
|
508
|
+
|
|
509
|
+
```php
|
|
510
|
+
<?php
|
|
511
|
+
class My_Plugin_Assets {
|
|
512
|
+
public function __construct() {
|
|
513
|
+
add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_public' ) );
|
|
514
|
+
add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin' ) );
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
public function enqueue_public() {
|
|
518
|
+
wp_enqueue_style(
|
|
519
|
+
'my-plugin-public',
|
|
520
|
+
plugins_url( 'css/public.css', dirname( __FILE__ ) ),
|
|
521
|
+
array(),
|
|
522
|
+
MY_PLUGIN_VERSION
|
|
523
|
+
);
|
|
524
|
+
|
|
525
|
+
wp_enqueue_script(
|
|
526
|
+
'my-plugin-public',
|
|
527
|
+
plugins_url( 'js/public.js', dirname( __FILE__ ) ),
|
|
528
|
+
array( 'jquery' ),
|
|
529
|
+
MY_PLUGIN_VERSION,
|
|
530
|
+
true
|
|
531
|
+
);
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
public function enqueue_admin( $hook ) {
|
|
535
|
+
if ( 'settings_page_my-plugin' !== $hook ) {
|
|
536
|
+
return;
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
wp_enqueue_style(
|
|
540
|
+
'my-plugin-admin',
|
|
541
|
+
plugins_url( 'css/admin.css', dirname( __FILE__ ) ),
|
|
542
|
+
array(),
|
|
543
|
+
MY_PLUGIN_VERSION
|
|
544
|
+
);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
new My_Plugin_Assets();
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
## Resources
|
|
554
|
+
|
|
555
|
+
- [WordPress Script/Style Enqueuing](https://developer.wordpress.org/plugins/javascript/enqueuing/)
|
|
556
|
+
- [@wordpress/scripts](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-scripts/)
|
|
557
|
+
- [WordPress Dependency Extraction](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-dependency-extraction-webpack-plugin/)
|
|
558
|
+
|
|
559
|
+
|