@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,352 @@
|
|
|
1
|
+
# WordPress Plugin Structure
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This rule defines how to detect WordPress plugin projects and the standard directory structures for different plugin complexity levels.
|
|
6
|
+
|
|
7
|
+
## Plugin Detection
|
|
8
|
+
|
|
9
|
+
### Detection Criteria
|
|
10
|
+
|
|
11
|
+
AI agents should detect a WordPress plugin project when ANY of the following conditions are met:
|
|
12
|
+
|
|
13
|
+
#### 1. Plugin Header Detection
|
|
14
|
+
|
|
15
|
+
Look for PHP files containing a plugin header comment block with required headers:
|
|
16
|
+
|
|
17
|
+
```php
|
|
18
|
+
<?php
|
|
19
|
+
/**
|
|
20
|
+
* Plugin Name: My Plugin Name
|
|
21
|
+
* Plugin URI: https://example.com/my-plugin
|
|
22
|
+
* Description: Brief description of the plugin
|
|
23
|
+
* Version: 1.0.0
|
|
24
|
+
* Author: Author Name
|
|
25
|
+
* Author URI: https://example.com
|
|
26
|
+
* License: GPL-2.0+
|
|
27
|
+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
|
28
|
+
* Text Domain: my-plugin
|
|
29
|
+
* Domain Path: /languages
|
|
30
|
+
* Requires at least: 6.0
|
|
31
|
+
* Requires PHP: 7.4
|
|
32
|
+
*/
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Required Headers**:
|
|
36
|
+
- `Plugin Name` - Display name of the plugin
|
|
37
|
+
- `Description` - Brief description
|
|
38
|
+
- `Version` - Semantic version number
|
|
39
|
+
- `Author` - Plugin author name
|
|
40
|
+
|
|
41
|
+
**Recommended Headers**:
|
|
42
|
+
- `Plugin URI` - Plugin homepage
|
|
43
|
+
- `Author URI` - Author website
|
|
44
|
+
- `License` - License identifier (GPL-2.0+, MIT, etc.)
|
|
45
|
+
- `Text Domain` - Translation text domain (should match plugin slug)
|
|
46
|
+
- `Domain Path` - Path to translation files (usually `/languages`)
|
|
47
|
+
- `Requires at least` - Minimum WordPress version
|
|
48
|
+
- `Requires PHP` - Minimum PHP version
|
|
49
|
+
|
|
50
|
+
#### 2. File Pattern Detection
|
|
51
|
+
|
|
52
|
+
- Main plugin file (typically matches directory name: `my-plugin/my-plugin.php`)
|
|
53
|
+
- `readme.txt` - WordPress.org format readme
|
|
54
|
+
- `uninstall.php` - Cleanup script for plugin uninstallation
|
|
55
|
+
- `languages/` directory - Translation files (`.pot`, `.po`, `.mo`)
|
|
56
|
+
|
|
57
|
+
#### 3. Directory Structure Detection
|
|
58
|
+
|
|
59
|
+
Common plugin directory patterns:
|
|
60
|
+
- `includes/` or `inc/` - Core functionality
|
|
61
|
+
- `admin/` - Admin-specific code
|
|
62
|
+
- `public/` - Frontend-specific code
|
|
63
|
+
- `assets/` - CSS, JS, images
|
|
64
|
+
- `blocks/` - Gutenberg blocks
|
|
65
|
+
- `templates/` - Template files
|
|
66
|
+
|
|
67
|
+
## Standard Directory Structures
|
|
68
|
+
|
|
69
|
+
### 1. Simple Procedural Plugin
|
|
70
|
+
|
|
71
|
+
**Complexity**: Low
|
|
72
|
+
**File Count**: 1-5 files
|
|
73
|
+
**Use Case**: Small utility plugins, simple functionality, quick prototypes
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
my-plugin/
|
|
77
|
+
├── my-plugin.php # Main plugin file (all code)
|
|
78
|
+
└── readme.txt # WordPress.org readme
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**When to Use**:
|
|
82
|
+
- Single feature plugins (e.g., disable comments, add custom CSS)
|
|
83
|
+
- Utility functions
|
|
84
|
+
- Quick prototypes
|
|
85
|
+
- Learning/tutorial plugins
|
|
86
|
+
|
|
87
|
+
### 2. Organized Procedural Plugin
|
|
88
|
+
|
|
89
|
+
**Complexity**: Medium
|
|
90
|
+
**File Count**: 5-20 files
|
|
91
|
+
**Use Case**: Medium-sized plugins, organized code, team collaboration
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
my-plugin/
|
|
95
|
+
├── my-plugin.php # Main plugin file (loader)
|
|
96
|
+
├── includes/
|
|
97
|
+
│ ├── functions.php # Core functions
|
|
98
|
+
│ ├── hooks.php # Hook callbacks
|
|
99
|
+
│ └── shortcodes.php # Shortcode handlers
|
|
100
|
+
├── admin/
|
|
101
|
+
│ ├── settings.php # Admin settings
|
|
102
|
+
│ └── meta-boxes.php # Meta boxes
|
|
103
|
+
├── public/
|
|
104
|
+
│ └── display.php # Frontend display
|
|
105
|
+
├── assets/
|
|
106
|
+
│ ├── css/
|
|
107
|
+
│ │ ├── admin.css
|
|
108
|
+
│ │ └── public.css
|
|
109
|
+
│ ├── js/
|
|
110
|
+
│ │ ├── admin.js
|
|
111
|
+
│ │ └── public.js
|
|
112
|
+
│ └── images/
|
|
113
|
+
├── languages/
|
|
114
|
+
│ └── my-plugin.pot # Translation template
|
|
115
|
+
├── uninstall.php # Cleanup on uninstall
|
|
116
|
+
└── readme.txt
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**When to Use**:
|
|
120
|
+
- Multiple features
|
|
121
|
+
- Admin and frontend functionality
|
|
122
|
+
- Custom assets (CSS/JS)
|
|
123
|
+
- Team collaboration
|
|
124
|
+
|
|
125
|
+
### 3. Object-Oriented Plugin
|
|
126
|
+
|
|
127
|
+
**Complexity**: Medium-High
|
|
128
|
+
**File Count**: 10-50 files
|
|
129
|
+
**Use Case**: Large plugins, maintainable code, extensibility
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
my-plugin/
|
|
133
|
+
├── my-plugin.php # Main plugin file (bootstrap)
|
|
134
|
+
├── includes/
|
|
135
|
+
│ ├── class-plugin.php # Main plugin class
|
|
136
|
+
│ ├── class-admin.php # Admin functionality
|
|
137
|
+
│ ├── class-public.php # Public functionality
|
|
138
|
+
│ ├── class-loader.php # Hook loader
|
|
139
|
+
│ └── class-activator.php # Activation logic
|
|
140
|
+
├── admin/
|
|
141
|
+
│ ├── class-settings.php # Settings page
|
|
142
|
+
│ └── partials/ # Admin view templates
|
|
143
|
+
├── public/
|
|
144
|
+
│ ├── class-shortcode.php # Shortcode handler
|
|
145
|
+
│ └── partials/ # Public view templates
|
|
146
|
+
├── assets/
|
|
147
|
+
│ ├── css/
|
|
148
|
+
│ ├── js/
|
|
149
|
+
│ └── images/
|
|
150
|
+
├── languages/
|
|
151
|
+
├── uninstall.php
|
|
152
|
+
└── readme.txt
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**When to Use**:
|
|
156
|
+
- Complex functionality
|
|
157
|
+
- Need for extensibility
|
|
158
|
+
- Multiple developers
|
|
159
|
+
- Long-term maintenance
|
|
160
|
+
|
|
161
|
+
### 4. WordPress Plugin Boilerplate
|
|
162
|
+
|
|
163
|
+
**Complexity**: High
|
|
164
|
+
**File Count**: 20+ files
|
|
165
|
+
**Use Case**: Standard WordPress plugin structure, best practices, enterprise plugins
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
plugin-name/
|
|
169
|
+
├── plugin-name.php
|
|
170
|
+
├── admin/
|
|
171
|
+
│ ├── class-plugin-name-admin.php
|
|
172
|
+
│ ├── css/
|
|
173
|
+
│ │ └── plugin-name-admin.css
|
|
174
|
+
│ ├── js/
|
|
175
|
+
│ │ └── plugin-name-admin.js
|
|
176
|
+
│ └── partials/
|
|
177
|
+
│ └── plugin-name-admin-display.php
|
|
178
|
+
├── includes/
|
|
179
|
+
│ ├── class-plugin-name.php
|
|
180
|
+
│ ├── class-plugin-name-loader.php
|
|
181
|
+
│ ├── class-plugin-name-i18n.php
|
|
182
|
+
│ ├── class-plugin-name-activator.php
|
|
183
|
+
│ └── class-plugin-name-deactivator.php
|
|
184
|
+
├── public/
|
|
185
|
+
│ ├── class-plugin-name-public.php
|
|
186
|
+
│ ├── css/
|
|
187
|
+
│ │ └── plugin-name-public.css
|
|
188
|
+
│ ├── js/
|
|
189
|
+
│ │ └── plugin-name-public.js
|
|
190
|
+
│ └── partials/
|
|
191
|
+
│ └── plugin-name-public-display.php
|
|
192
|
+
├── languages/
|
|
193
|
+
│ └── plugin-name.pot
|
|
194
|
+
├── uninstall.php
|
|
195
|
+
└── README.txt
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**When to Use**:
|
|
199
|
+
- Following WordPress.org best practices
|
|
200
|
+
- Enterprise-level plugins
|
|
201
|
+
- Maximum maintainability
|
|
202
|
+
- Plugin marketplace submission
|
|
203
|
+
|
|
204
|
+
## File Naming Conventions
|
|
205
|
+
|
|
206
|
+
### PHP Files
|
|
207
|
+
|
|
208
|
+
- **Main plugin file**: `plugin-slug.php` (matches directory name)
|
|
209
|
+
- **Class files**: `class-{class-name}.php` (lowercase, hyphens)
|
|
210
|
+
- **Function files**: `{purpose}-functions.php` or `functions.php`
|
|
211
|
+
- **Template files**: `{template-name}.php`
|
|
212
|
+
|
|
213
|
+
**Examples**:
|
|
214
|
+
- `class-plugin-name.php`
|
|
215
|
+
- `class-admin-settings.php`
|
|
216
|
+
- `helper-functions.php`
|
|
217
|
+
- `contact-form-template.php`
|
|
218
|
+
|
|
219
|
+
### Asset Files
|
|
220
|
+
|
|
221
|
+
- **CSS**: `{plugin-slug}-{context}.css` (e.g., `my-plugin-admin.css`)
|
|
222
|
+
- **JavaScript**: `{plugin-slug}-{context}.js` (e.g., `my-plugin-public.js`)
|
|
223
|
+
- **Images**: Descriptive names with hyphens
|
|
224
|
+
|
|
225
|
+
### Translation Files
|
|
226
|
+
|
|
227
|
+
- **POT template**: `{text-domain}.pot`
|
|
228
|
+
- **PO files**: `{text-domain}-{locale}.po` (e.g., `my-plugin-es_ES.po`)
|
|
229
|
+
- **MO files**: `{text-domain}-{locale}.mo` (e.g., `my-plugin-es_ES.mo`)
|
|
230
|
+
|
|
231
|
+
## Required Files
|
|
232
|
+
|
|
233
|
+
### Main Plugin File
|
|
234
|
+
|
|
235
|
+
**Purpose**: Entry point for the plugin, contains plugin header
|
|
236
|
+
|
|
237
|
+
**Location**: Root of plugin directory
|
|
238
|
+
|
|
239
|
+
**Naming**: Should match plugin directory name
|
|
240
|
+
|
|
241
|
+
**Example**: `my-plugin/my-plugin.php`
|
|
242
|
+
|
|
243
|
+
### readme.txt
|
|
244
|
+
|
|
245
|
+
**Purpose**: WordPress.org plugin directory readme
|
|
246
|
+
|
|
247
|
+
**Location**: Root of plugin directory
|
|
248
|
+
|
|
249
|
+
**Format**: WordPress.org readme format
|
|
250
|
+
|
|
251
|
+
**Required Sections**:
|
|
252
|
+
- Contributors
|
|
253
|
+
- Tags
|
|
254
|
+
- Requires at least
|
|
255
|
+
- Tested up to
|
|
256
|
+
- Stable tag
|
|
257
|
+
- License
|
|
258
|
+
- Short Description
|
|
259
|
+
- Description
|
|
260
|
+
- Installation
|
|
261
|
+
- Frequently Asked Questions
|
|
262
|
+
- Screenshots
|
|
263
|
+
- Changelog
|
|
264
|
+
|
|
265
|
+
### uninstall.php
|
|
266
|
+
|
|
267
|
+
**Purpose**: Clean up plugin data on uninstallation
|
|
268
|
+
|
|
269
|
+
**Location**: Root of plugin directory
|
|
270
|
+
|
|
271
|
+
**Security**: Must check for `WP_UNINSTALL_PLUGIN` constant
|
|
272
|
+
|
|
273
|
+
**Example**:
|
|
274
|
+
```php
|
|
275
|
+
<?php
|
|
276
|
+
if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
|
|
277
|
+
exit;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Delete options
|
|
281
|
+
delete_option( 'my_plugin_option' );
|
|
282
|
+
|
|
283
|
+
// Delete custom tables
|
|
284
|
+
global $wpdb;
|
|
285
|
+
$wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}my_plugin_table" );
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Best Practices
|
|
289
|
+
|
|
290
|
+
### Security
|
|
291
|
+
|
|
292
|
+
✅ **DO**:
|
|
293
|
+
- Always check `ABSPATH` constant in all PHP files
|
|
294
|
+
- Use `WP_UNINSTALL_PLUGIN` in uninstall.php
|
|
295
|
+
- Prefix all function names, class names, and database tables
|
|
296
|
+
- Use nonces for form submissions
|
|
297
|
+
- Sanitize all input, escape all output
|
|
298
|
+
|
|
299
|
+
❌ **DON'T**:
|
|
300
|
+
- Allow direct file access
|
|
301
|
+
- Use generic function/class names
|
|
302
|
+
- Store sensitive data in plain text
|
|
303
|
+
|
|
304
|
+
### Performance
|
|
305
|
+
|
|
306
|
+
✅ **DO**:
|
|
307
|
+
- Load assets only when needed
|
|
308
|
+
- Use conditional loading for admin/frontend
|
|
309
|
+
- Minimize database queries
|
|
310
|
+
- Use transients for caching
|
|
311
|
+
|
|
312
|
+
❌ **DON'T**:
|
|
313
|
+
- Load all assets on every page
|
|
314
|
+
- Make unnecessary database queries
|
|
315
|
+
- Ignore caching opportunities
|
|
316
|
+
|
|
317
|
+
### Maintainability
|
|
318
|
+
|
|
319
|
+
✅ **DO**:
|
|
320
|
+
- Use consistent naming conventions
|
|
321
|
+
- Organize code logically
|
|
322
|
+
- Comment complex logic
|
|
323
|
+
- Follow WordPress Coding Standards
|
|
324
|
+
|
|
325
|
+
❌ **DON'T**:
|
|
326
|
+
- Mix concerns (admin/public code)
|
|
327
|
+
- Use inconsistent naming
|
|
328
|
+
- Leave code undocumented
|
|
329
|
+
|
|
330
|
+
## AI Agent Guidelines
|
|
331
|
+
|
|
332
|
+
When scaffolding a new WordPress plugin:
|
|
333
|
+
|
|
334
|
+
1. **Ask for complexity level** or infer from requirements
|
|
335
|
+
2. **Choose appropriate structure** based on complexity
|
|
336
|
+
3. **Create directory structure** first
|
|
337
|
+
4. **Generate main plugin file** with proper headers
|
|
338
|
+
5. **Add security checks** to all files
|
|
339
|
+
6. **Create readme.txt** with proper format
|
|
340
|
+
7. **Add uninstall.php** if plugin stores data
|
|
341
|
+
8. **Set up translation files** if i18n is needed
|
|
342
|
+
|
|
343
|
+
When analyzing existing plugins:
|
|
344
|
+
|
|
345
|
+
1. **Detect plugin header** in PHP files
|
|
346
|
+
2. **Identify structure pattern** used
|
|
347
|
+
3. **Check for required files** (readme.txt, uninstall.php)
|
|
348
|
+
4. **Validate naming conventions**
|
|
349
|
+
5. **Verify security checks** (ABSPATH, nonces)
|
|
350
|
+
6. **Suggest improvements** based on best practices
|
|
351
|
+
|
|
352
|
+
|