Compare commits
125
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5e65d07a4f | ||
|
|
84952ff2d1 | ||
|
|
6300b687aa | ||
|
|
136f07d9c4 | ||
|
|
40ebbce1cc | ||
|
|
af11f827c4 | ||
|
|
bfd2d4b063 | ||
|
|
6e95542ac5 | ||
|
|
baa2a050d3 | ||
|
|
61ca9d4768 | ||
|
|
3d1bf9d113 | ||
|
|
348eb872a8 | ||
|
|
6554392dd6 | ||
|
|
ce96ea2e96 | ||
|
|
445d022232 | ||
|
|
d3e5d0d0c0 | ||
|
|
2481d63561 | ||
|
|
cdc73bc010 | ||
|
|
67c6c65611 | ||
|
|
ebdb172a14 | ||
|
|
57a4c98f46 | ||
|
|
4c1bee9dbe | ||
|
|
200cc5671d | ||
|
|
398d24ed90 | ||
|
|
ad30d716db | ||
|
|
19ec65326b | ||
|
|
3048e91a78 | ||
|
|
3926927791 | ||
|
|
728c5dcf3d | ||
|
|
109c07cfed | ||
|
|
ea628c521b | ||
|
|
ae7bd5cb89 | ||
|
|
1f4be45862 | ||
|
|
78bd0708d3 | ||
|
|
36840c46c1 | ||
|
|
aa62142e4c | ||
|
|
0ab1a1df4d | ||
|
|
69cd192f49 | ||
|
|
4ebe55b940 | ||
|
|
5b4037bf0d | ||
|
|
fd314fd7c7 | ||
|
|
546ed59a61 | ||
|
|
069dc2e8d7 | ||
|
|
9d36b47f9f | ||
|
|
5cd2a7d374 | ||
|
|
497c44c3c6 | ||
|
|
e3f11ac03f | ||
|
|
04cdd49a3f | ||
|
|
cdd9b050c7 | ||
|
|
6031751015 | ||
|
|
a885ef1e0b | ||
|
|
c930a5484a | ||
|
|
45feb7b550 | ||
|
|
cb79402c5f | ||
|
|
1af79e0bfd | ||
|
|
a88af434db | ||
|
|
4eac81ba0e | ||
|
|
92124e139f | ||
|
|
eb4e71f98f | ||
|
|
3dfd5f2658 | ||
|
|
d58f5fdb72 | ||
|
|
07d0e7e44b | ||
|
|
e9139ec9d9 | ||
|
|
7d8b9361c5 | ||
|
|
63f2520f70 | ||
|
|
fbe4eba3ff | ||
|
|
cc6acc2a4e | ||
|
|
ed7d33e2aa | ||
|
|
fb8a998487 | ||
|
|
2ac9b046b5 | ||
|
|
d1c5950dcb | ||
|
|
2e9914e325 | ||
|
|
b9fa979600 | ||
|
|
2a025ec18c | ||
|
|
95e4361cd5 | ||
|
|
6d9a9658ea | ||
|
|
7051fb1193 | ||
|
|
6527fde363 | ||
|
|
643f5c6d41 | ||
|
|
b7bf97d5b4 | ||
|
|
a5d3c09243 | ||
|
|
c7435f5a49 | ||
|
|
aa136c7a4a | ||
|
|
455edb99f9 | ||
|
|
584d774931 | ||
|
|
b2b8af4216 | ||
|
|
a0df887d5c | ||
|
|
4d69c446db | ||
|
|
4441106963 | ||
|
|
35f50aa03b | ||
|
|
6d3aeb889a | ||
|
|
b18f1c46b4 | ||
|
|
bcdbbb454c | ||
|
|
3d739915d7 | ||
|
|
51183c378e | ||
|
|
71c0a77a31 | ||
|
|
0e219975ae | ||
|
|
058ae4b64e | ||
|
|
3fa42ae1c7 | ||
|
|
275958bfdb | ||
|
|
93412896e8 | ||
|
|
6784ef4824 | ||
|
|
0874c4f59e | ||
|
|
4696cdfba6 | ||
|
|
1cf46254b7 | ||
|
|
3c1db9d4fb | ||
|
|
bfa528c90e | ||
|
|
233a64913b | ||
|
|
1c049a91c5 | ||
|
|
1e2f7a5cd8 | ||
|
|
7072f21d49 | ||
|
|
af48e84614 | ||
|
|
5083fcee50 | ||
|
|
79d1314aed | ||
|
|
2f4d88f8dd | ||
|
|
bfac63799b | ||
|
|
9d3e67d16b | ||
|
|
843696d3a8 | ||
|
|
269626438e | ||
|
|
0e6f9639f4 | ||
|
|
0de0b2ef05 | ||
|
|
342eefd471 | ||
|
|
66758ac0f8 | ||
|
|
32697533ab | ||
|
|
4a7798a8c2 |
No files matched your search
@@ -0,0 +1,202 @@
|
|||||||
|
# Bug Fixing Guide for AI Assistants
|
||||||
|
|
||||||
|
This document provides guidance for AI assistants to help with bug fixing for the Fix Plugin Does Not Exist Notices plugin.
|
||||||
|
|
||||||
|
## Bug Fixing Workflow
|
||||||
|
|
||||||
|
### 1. Create a Bug Fix Branch
|
||||||
|
|
||||||
|
Always start by creating a bug fix branch from the latest main branch pulled from origin (this step is mandatory):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main # Critical step - never skip this
|
||||||
|
git checkout -b fix/bug-description
|
||||||
|
```
|
||||||
|
|
||||||
|
Use a descriptive name that clearly indicates what bug is being fixed. If there's an issue number, include it in the branch name (e.g., `fix/123-plugin-activation-error`).
|
||||||
|
|
||||||
|
For more detailed git workflow guidelines, see **@.agents/git-workflow.md**.
|
||||||
|
|
||||||
|
### 2. Understand the Bug
|
||||||
|
|
||||||
|
Before fixing a bug, make sure you understand:
|
||||||
|
|
||||||
|
- What is the expected behavior?
|
||||||
|
- What is the actual behavior?
|
||||||
|
- What are the steps to reproduce the bug?
|
||||||
|
- What is the impact of the bug?
|
||||||
|
- What is the root cause of the bug?
|
||||||
|
|
||||||
|
### 3. Fix the Bug
|
||||||
|
|
||||||
|
When fixing a bug:
|
||||||
|
|
||||||
|
- Make minimal changes necessary to fix the bug
|
||||||
|
- Avoid introducing new features while fixing bugs
|
||||||
|
- Maintain backward compatibility
|
||||||
|
- Add appropriate comments explaining the fix
|
||||||
|
- Consider adding tests to prevent regression
|
||||||
|
|
||||||
|
### 4. Update Documentation
|
||||||
|
|
||||||
|
Update relevant documentation to reflect the bug fix:
|
||||||
|
|
||||||
|
- Add a description to CHANGELOG.md under an "Unreleased" section
|
||||||
|
- Update readme.txt if the bug fix affects user-facing functionality
|
||||||
|
|
||||||
|
### 5. Testing
|
||||||
|
|
||||||
|
Test the bug fix thoroughly:
|
||||||
|
|
||||||
|
- Verify that the bug is fixed
|
||||||
|
- Ensure no regression in related functionality
|
||||||
|
- Test with the latest WordPress version
|
||||||
|
- Test with the minimum supported WordPress version (5.0)
|
||||||
|
- Test with PHP 7.0+ (minimum supported version)
|
||||||
|
|
||||||
|
### 6. Commit Changes
|
||||||
|
|
||||||
|
Make atomic commits with clear messages:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Fix #123: Brief description of the bug fix"
|
||||||
|
```
|
||||||
|
|
||||||
|
If there's an issue number, reference it in the commit message.
|
||||||
|
|
||||||
|
### 7. Prepare for Release
|
||||||
|
|
||||||
|
When the bug fix is ready to be released:
|
||||||
|
|
||||||
|
1. Create a version branch for the release:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout -b v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Merge your bug fix branch into the version branch:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git merge fix/bug-description --no-ff
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Update version numbers and changelog entries
|
||||||
|
|
||||||
|
4. Follow the standard release process from this point
|
||||||
|
|
||||||
|
### 8. Push to Remote (Optional for Collaboration)
|
||||||
|
|
||||||
|
If you need to collaborate with others on the bug fix before it's ready for release:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git push github HEAD:fix/bug-description
|
||||||
|
git push gitea HEAD:fix/bug-description
|
||||||
|
```
|
||||||
|
|
||||||
|
### 9. Create Pull Request (Optional)
|
||||||
|
|
||||||
|
If the repository uses pull requests for code review, create a pull request from the bug fix branch to the version branch.
|
||||||
|
|
||||||
|
## Determining Version Increment
|
||||||
|
|
||||||
|
After fixing a bug and confirming it works, determine the appropriate version increment:
|
||||||
|
|
||||||
|
- **PATCH** (e.g., 1.6.0 → 1.6.1): For most bug fixes that don't change functionality
|
||||||
|
- **MINOR** (e.g., 1.6.0 → 1.7.0): For bug fixes that introduce new features or significant changes
|
||||||
|
- **MAJOR** (e.g., 1.6.0 → 2.0.0): For bug fixes that introduce breaking changes
|
||||||
|
|
||||||
|
**IMPORTANT**: Don't update version numbers during initial development and testing. Only create a version branch (e.g., `v2.2.3`) and update version numbers when the fix is confirmed working.
|
||||||
|
|
||||||
|
This approach is more time-efficient as it allows you to focus on fixing the bug without worrying about version updates until the fix is confirmed working.
|
||||||
|
|
||||||
|
For detailed guidelines on time-efficient development and testing, see **@.agents/incremental-development.md**.
|
||||||
|
|
||||||
|
## Testing Previous Versions
|
||||||
|
|
||||||
|
To test a previous version of the plugin:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Checkout a specific tag for testing
|
||||||
|
git checkout v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
|
||||||
|
# Or create a test branch from a specific tag
|
||||||
|
git checkout v{MAJOR}.{MINOR}.{PATCH} -b test/some-feature
|
||||||
|
```
|
||||||
|
|
||||||
|
## Hotfix Process
|
||||||
|
|
||||||
|
For critical bugs that need immediate fixing in a released version:
|
||||||
|
|
||||||
|
### 1. Create a Hotfix Branch
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
git checkout -b hotfix/v{MAJOR}.{MINOR}.{PATCH+1}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Fix the Issues
|
||||||
|
|
||||||
|
Apply the minimal fix necessary to address the critical issue.
|
||||||
|
|
||||||
|
### 3. Update Version Numbers
|
||||||
|
|
||||||
|
Increment the PATCH version and update all version numbers:
|
||||||
|
|
||||||
|
- Main plugin file (fix-plugin-does-not-exist-notices.php)
|
||||||
|
- FPDEN_VERSION constant
|
||||||
|
- CHANGELOG.md
|
||||||
|
- readme.txt
|
||||||
|
- README.md
|
||||||
|
- languages/fix-plugin-does-not-exist-notices.pot (Project-Id-Version)
|
||||||
|
|
||||||
|
### 4. Commit and Push
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Hotfix: Brief description of the critical bug fix"
|
||||||
|
git push github HEAD:hotfix/v{MAJOR}.{MINOR}.{PATCH+1}
|
||||||
|
git push gitea HEAD:hotfix/v{MAJOR}.{MINOR}.{PATCH+1}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Create and Push Tag
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v{MAJOR}.{MINOR}.{PATCH+1} -m "Hotfix release version {MAJOR}.{MINOR}.{PATCH+1}"
|
||||||
|
git push github refs/tags/v{MAJOR}.{MINOR}.{PATCH+1}
|
||||||
|
git push gitea refs/tags/v{MAJOR}.{MINOR}.{PATCH+1}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Common Bug Types and Fixing Strategies
|
||||||
|
|
||||||
|
### WordPress Compatibility Issues
|
||||||
|
|
||||||
|
- Test with the specific WordPress version where the issue occurs
|
||||||
|
- Check for deprecated functions or hooks
|
||||||
|
- Review WordPress changelog for relevant changes
|
||||||
|
|
||||||
|
### PHP Compatibility Issues
|
||||||
|
|
||||||
|
- Test with the specific PHP version where the issue occurs
|
||||||
|
- Check for deprecated PHP functions or features
|
||||||
|
- Use appropriate polyfills if necessary
|
||||||
|
|
||||||
|
### JavaScript Issues
|
||||||
|
|
||||||
|
- Test in different browsers
|
||||||
|
- Check for browser console errors
|
||||||
|
- Consider browser-specific workarounds if necessary
|
||||||
|
|
||||||
|
### CSS Issues
|
||||||
|
|
||||||
|
- Test in different browsers and screen sizes
|
||||||
|
- Use browser developer tools to inspect elements
|
||||||
|
- Consider browser-specific workarounds if necessary
|
||||||
|
|
||||||
|
### Database Issues
|
||||||
|
|
||||||
|
- Use proper database prefixing
|
||||||
|
- Sanitize database inputs
|
||||||
|
- Use prepared statements for queries
|
||||||
|
- Consider database version differences
|
||||||
@@ -0,0 +1,154 @@
|
|||||||
|
# Code Quality Checks Workflow
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This document is intended for plugin developers and code reviewers working on this repository. It outlines the process for ensuring code quality before pushing changes to the repository. Following these steps will help catch issues early and save time in the review process.
|
||||||
|
|
||||||
|
## Pre-Push Checklist
|
||||||
|
|
||||||
|
Before pushing your changes to the repository, run through the following checks:
|
||||||
|
|
||||||
|
1. **Run Unit Tests**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer test
|
||||||
|
```
|
||||||
|
|
||||||
|
Ensure all tests pass. If any tests fail, resolve the issues before proceeding.
|
||||||
|
|
||||||
|
2. **Run PHP CodeSniffer**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpcs
|
||||||
|
```
|
||||||
|
|
||||||
|
This will check your code against WordPress coding standards. Fix any issues before proceeding.
|
||||||
|
|
||||||
|
3. **Run PHP Code Beautifier and Fixer**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpcbf
|
||||||
|
```
|
||||||
|
|
||||||
|
This will automatically fix many coding standard issues.
|
||||||
|
|
||||||
|
4. **Run PHPStan**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpstan
|
||||||
|
```
|
||||||
|
|
||||||
|
This will perform static analysis on your code to find potential bugs and issues.
|
||||||
|
|
||||||
|
5. **Run PHP Mess Detector**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpmd
|
||||||
|
```
|
||||||
|
|
||||||
|
This will check for potential problems like unused variables, empty catch blocks, etc.
|
||||||
|
|
||||||
|
## Common Issues and How to Fix Them
|
||||||
|
|
||||||
|
### 1. Inline Comments
|
||||||
|
|
||||||
|
All inline comments must end with proper punctuation (period, exclamation mark, or question mark).
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Incorrect comment
|
||||||
|
$var = true;
|
||||||
|
|
||||||
|
// Correct comment.
|
||||||
|
$var = true;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Superglobal Access
|
||||||
|
|
||||||
|
Never access superglobals like `$_GET`, `$_POST`, etc. directly. Always use WordPress functions to sanitize and validate input.
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Incorrect
|
||||||
|
$page = $_GET['page'];
|
||||||
|
|
||||||
|
// Correct
|
||||||
|
$page = filter_input(INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
|
||||||
|
|
||||||
|
// For testing environments
|
||||||
|
if (defined('PHPUNIT_RUNNING') && PHPUNIT_RUNNING) {
|
||||||
|
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- This rule is ignored in tests to allow direct access for testing purposes
|
||||||
|
$page = isset($_GET['page']) ? wp_unslash($_GET['page']) : '';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Avoid Unnecessary Else Clauses
|
||||||
|
|
||||||
|
Simplify your code by avoiding unnecessary else clauses.
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Less preferred
|
||||||
|
if (condition) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Preferred
|
||||||
|
if (condition) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Proper Function Spacing
|
||||||
|
|
||||||
|
Ensure proper spacing in function calls and declarations.
|
||||||
|
|
||||||
|
```php
|
||||||
|
// Incorrect
|
||||||
|
function_name($param1,$param2);
|
||||||
|
|
||||||
|
// Correct
|
||||||
|
function_name( $param1, $param2 );
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Naming Conventions
|
||||||
|
|
||||||
|
Follow WordPress naming conventions:
|
||||||
|
|
||||||
|
* Functions and variables: snake_case with plugin-specific prefix (e.g., `myplugin_function_name`)
|
||||||
|
* Classes: CamelCase
|
||||||
|
* Constants: UPPERCASE_WITH_UNDERSCORES with plugin-specific prefix (e.g., `MYPLUGIN_CONSTANT_NAME`)
|
||||||
|
|
||||||
|
## Automated Checks in CI/CD
|
||||||
|
|
||||||
|
Our CI/CD pipeline includes the following automated checks:
|
||||||
|
|
||||||
|
1. **CodeFactor**: Analyzes code quality and style
|
||||||
|
2. **Codacy**: Performs static code analysis
|
||||||
|
3. **SonarCloud**: Checks for code smells, bugs, and security vulnerabilities
|
||||||
|
4. **CodeRabbit**: Provides AI-powered code review
|
||||||
|
|
||||||
|
Although CI runs these checks, catching issues locally helps save time and minimize follow-up commits.
|
||||||
|
|
||||||
|
## Using AI to Help with Code Quality
|
||||||
|
|
||||||
|
You can use AI assistants to help improve code quality:
|
||||||
|
|
||||||
|
1. Run the code quality checks locally
|
||||||
|
2. If issues are found, ask the AI assistant to help fix them
|
||||||
|
3. Apply the suggested fixes
|
||||||
|
4. Run the checks again to verify the issues are resolved
|
||||||
|
|
||||||
|
Example prompt:
|
||||||
|
|
||||||
|
```text
|
||||||
|
I ran PHPCS and got the following errors. Can you help me fix them?
|
||||||
|
|
||||||
|
[Paste error output here]
|
||||||
|
```
|
||||||
|
|
||||||
|
For more AI assistance guidelines, see the [AI Assistant Guide](./../AGENTS.md).
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
This workflow helps maintain high code quality and accelerates the review process. Remember, it's always more efficient to resolve issues locally than to go through multiple rounds of CI/CD and code review.
|
||||||
@@ -0,0 +1,240 @@
|
|||||||
|
# Code Review Guide for AI Assistants
|
||||||
|
|
||||||
|
This document provides guidance for AI assistants to help with code review for this project.
|
||||||
|
|
||||||
|
## Code Review Checklist
|
||||||
|
|
||||||
|
When reviewing code, check for the following:
|
||||||
|
|
||||||
|
### Functionality
|
||||||
|
|
||||||
|
* [ ] Does the code work as expected?
|
||||||
|
* [ ] Does it handle edge cases appropriately?
|
||||||
|
* [ ] Are there any logical errors?
|
||||||
|
* [ ] Is error handling implemented properly?
|
||||||
|
|
||||||
|
### Code Quality
|
||||||
|
|
||||||
|
* [ ] Does the code follow WordPress coding standards?
|
||||||
|
* [ ] Is the code well-organized and easy to understand?
|
||||||
|
* [ ] Are there any code smells (duplicate code, overly complex functions, etc.)?
|
||||||
|
* [ ] Are functions and variables named appropriately?
|
||||||
|
* [ ] Are there appropriate comments and documentation?
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
* [ ] Is user input properly validated and sanitized?
|
||||||
|
* [ ] Is output properly escaped?
|
||||||
|
* [ ] Are capability checks used for user actions?
|
||||||
|
* [ ] Are nonces used for form submissions?
|
||||||
|
* [ ] Are there any potential SQL injection vulnerabilities?
|
||||||
|
* [ ] Are there any potential XSS vulnerabilities?
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
* [ ] Are there any performance bottlenecks?
|
||||||
|
* [ ] Are database queries optimized?
|
||||||
|
* [ ] Is caching used appropriately?
|
||||||
|
* [ ] Are assets (CSS, JS) properly enqueued?
|
||||||
|
|
||||||
|
### Compatibility
|
||||||
|
|
||||||
|
* [ ] Is the code compatible with the minimum supported WordPress version (5.0)?
|
||||||
|
* [ ] Is the code compatible with the minimum supported PHP version (7.0)?
|
||||||
|
* [ ] Are there any browser compatibility issues?
|
||||||
|
* [ ] Are there any conflicts with other plugins?
|
||||||
|
|
||||||
|
### Internationalization
|
||||||
|
|
||||||
|
* [ ] Are all user-facing strings translatable?
|
||||||
|
* [ ] Is the correct text domain used?
|
||||||
|
* [ ] Are translation functions used correctly?
|
||||||
|
|
||||||
|
### Accessibility
|
||||||
|
|
||||||
|
* [ ] Does the code follow accessibility best practices?
|
||||||
|
* [ ] Are ARIA attributes used appropriately?
|
||||||
|
* [ ] Is keyboard navigation supported?
|
||||||
|
* [ ] Is screen reader support implemented?
|
||||||
|
|
||||||
|
## Automated Code Review Tools
|
||||||
|
|
||||||
|
This project uses several automated code review tools to maintain high code quality standards. These tools are free to use for public repositories and should be integrated into any new repositories based on this template.
|
||||||
|
|
||||||
|
**Important**: Before pushing your code, run the local code quality checks as described in the [Code Quality Checks Workflow](./code-quality-checks.md) to catch issues early.
|
||||||
|
|
||||||
|
### 1. CodeRabbit
|
||||||
|
|
||||||
|
[CodeRabbit](https://www.coderabbit.ai/) is an AI-powered code review tool that provides automated feedback on pull requests.
|
||||||
|
|
||||||
|
* **Integration**: Add the CodeRabbit GitHub App to your repository
|
||||||
|
* **Benefits**: Provides AI-powered code reviews, identifies potential issues, and suggests improvements
|
||||||
|
* **Usage**: CodeRabbit automatically reviews pull requests when they are created or updated
|
||||||
|
|
||||||
|
### 2. CodeFactor
|
||||||
|
|
||||||
|
[CodeFactor](https://www.codefactor.io/) continuously monitors code quality and provides feedback on code style, complexity, and potential issues.
|
||||||
|
|
||||||
|
* **Integration**: Add the CodeFactor GitHub App to your repository
|
||||||
|
* **Benefits**: Provides a grade for your codebase, identifies issues, and tracks code quality over time
|
||||||
|
* **Usage**: CodeFactor automatically analyzes your codebase and provides feedback on pull requests
|
||||||
|
|
||||||
|
### 3. Codacy
|
||||||
|
|
||||||
|
[Codacy](https://www.codacy.com/) is a code quality tool that provides static analysis, code coverage, and code duplication detection.
|
||||||
|
|
||||||
|
* **Integration**: Add the Codacy GitHub App to your repository
|
||||||
|
* **Benefits**: Provides a grade for your codebase, identifies issues, and tracks code quality over time
|
||||||
|
* **Usage**: Codacy automatically analyzes your codebase and provides feedback on pull requests
|
||||||
|
|
||||||
|
### 4. PHPStan
|
||||||
|
|
||||||
|
[PHPStan](https://phpstan.org/) is a static analysis tool that finds errors in your code without running it.
|
||||||
|
|
||||||
|
* **Integration**: Included in the project's composer.json and GitHub Actions workflow
|
||||||
|
* **Benefits**: Detects undefined variables, methods, and properties; type-related issues; and logical errors
|
||||||
|
* **Usage**: Run `composer phpstan` or `npm run lint:phpstan` locally, or let GitHub Actions run it automatically
|
||||||
|
|
||||||
|
### 5. PHP Mess Detector
|
||||||
|
|
||||||
|
[PHP Mess Detector](https://phpmd.org/) is a tool that looks for potential problems in your code such as possible bugs, suboptimal code, overcomplicated expressions, and unused parameters, variables, and methods.
|
||||||
|
|
||||||
|
* **Integration**: Included in the project's composer.json and GitHub Actions workflow
|
||||||
|
* **Benefits**: Identifies code smells, complexity issues, unused code, naming problems, and more
|
||||||
|
* **Usage**: Run `composer phpmd` or `npm run lint:phpmd` locally, or let GitHub Actions run it automatically
|
||||||
|
|
||||||
|
### Using AI Assistants with Code Review Tools
|
||||||
|
|
||||||
|
When you receive feedback from these code review tools, you can use AI assistants to help address the issues:
|
||||||
|
|
||||||
|
1. Copy the output from the code review tool
|
||||||
|
2. Paste it into your AI assistant chat
|
||||||
|
3. Ask the AI to help you understand and resolve the issues
|
||||||
|
4. Apply the suggested fixes
|
||||||
|
5. Commit the changes and verify that the issues are resolved
|
||||||
|
|
||||||
|
### Markdown Formatting Standards
|
||||||
|
|
||||||
|
When writing or updating Markdown files in this project, follow these standards:
|
||||||
|
|
||||||
|
* Always use asterisks (*) for bullet points, not hyphens (-)
|
||||||
|
* Use proper heading hierarchy (# for main title, ## for sections, etc.)
|
||||||
|
* Use code blocks with language specification for code examples
|
||||||
|
* Use relative links for internal documentation
|
||||||
|
* Include alt text for images
|
||||||
|
|
||||||
|
Example prompt for AI assistants:
|
||||||
|
|
||||||
|
```text
|
||||||
|
I received the following feedback from [Tool Name]. Please help me understand and resolve these issues:
|
||||||
|
|
||||||
|
[Paste the tool output here]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Code Review Process
|
||||||
|
|
||||||
|
### 1. Understand the Context
|
||||||
|
|
||||||
|
Before reviewing code, understand:
|
||||||
|
|
||||||
|
* What problem is the code trying to solve?
|
||||||
|
* What are the requirements?
|
||||||
|
* What are the constraints?
|
||||||
|
|
||||||
|
### 2. Review the Code
|
||||||
|
|
||||||
|
Review the code with the checklist above in mind.
|
||||||
|
|
||||||
|
### 3. Provide Feedback
|
||||||
|
|
||||||
|
When providing feedback:
|
||||||
|
|
||||||
|
* Be specific and clear
|
||||||
|
* Explain why a change is needed
|
||||||
|
* Provide examples or suggestions when possible
|
||||||
|
* Prioritize feedback (critical issues vs. minor improvements)
|
||||||
|
* Be constructive and respectful
|
||||||
|
|
||||||
|
### 4. Follow Up
|
||||||
|
|
||||||
|
After the code has been updated:
|
||||||
|
|
||||||
|
* Review the changes
|
||||||
|
* Verify that issues have been addressed
|
||||||
|
* Provide additional feedback if necessary
|
||||||
|
|
||||||
|
## Common Issues to Look For
|
||||||
|
|
||||||
|
### PHP Issues
|
||||||
|
|
||||||
|
* Undefined variables or functions
|
||||||
|
* Incorrect function parameters
|
||||||
|
* Missing return statements
|
||||||
|
* Improper error handling
|
||||||
|
* Inefficient loops or conditionals
|
||||||
|
* Hardcoded values that should be configurable
|
||||||
|
|
||||||
|
### WordPress-Specific Issues
|
||||||
|
|
||||||
|
* Incorrect hook usage
|
||||||
|
* Missing or incorrect nonces
|
||||||
|
* Missing capability checks
|
||||||
|
* Direct database queries instead of using WordPress functions
|
||||||
|
* Improper enqueuing of scripts and styles
|
||||||
|
* Not using WordPress functions for common tasks
|
||||||
|
|
||||||
|
### JavaScript Issues
|
||||||
|
|
||||||
|
* Undefined variables or functions
|
||||||
|
* Event listener memory leaks
|
||||||
|
* jQuery conflicts
|
||||||
|
* Browser compatibility issues
|
||||||
|
* Missing error handling
|
||||||
|
|
||||||
|
### CSS Issues
|
||||||
|
|
||||||
|
* Browser compatibility issues
|
||||||
|
* Specificity issues
|
||||||
|
* Unused styles
|
||||||
|
* Overriding WordPress admin styles inappropriately
|
||||||
|
|
||||||
|
## Example Feedback
|
||||||
|
|
||||||
|
### Good Feedback Example
|
||||||
|
|
||||||
|
```markdown
|
||||||
|
In function `handle_remove_reference()`:
|
||||||
|
|
||||||
|
1. The nonce check is missing, which could lead to CSRF vulnerabilities.
|
||||||
|
Consider adding:
|
||||||
|
```php
|
||||||
|
if (!isset($_GET['_wpnonce']) || !wp_verify_nonce($_GET['_wpnonce'], 'fpden_remove_reference')) {
|
||||||
|
wp_die(__('Security check failed.', 'fix-plugin-does-not-exist-notices'));
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. The user capability check should be more specific. Instead of:
|
||||||
|
```php
|
||||||
|
if (!current_user_can('manage_options')) {
|
||||||
|
```
|
||||||
|
Consider using:
|
||||||
|
```php
|
||||||
|
if (!current_user_can('activate_plugins')) {
|
||||||
|
```
|
||||||
|
This is more appropriate for the action being performed.
|
||||||
|
|
||||||
|
3. The success message should be translatable:
|
||||||
|
```php
|
||||||
|
// Change this:
|
||||||
|
add_settings_error('fpden', 'fpden_removed', 'Plugin reference removed successfully.', 'updated');
|
||||||
|
|
||||||
|
// To this:
|
||||||
|
add_settings_error('fpden', 'fpden_removed', __('Plugin reference removed successfully.', 'fix-plugin-does-not-exist-notices'), 'updated');
|
||||||
|
```
|
||||||
|
```
|
||||||
|
|
||||||
|
### Poor Feedback Example
|
||||||
|
|
||||||
|
```text
|
||||||
|
This code has security issues and doesn't follow best practices. Fix it.
|
||||||
|
```
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
# Developer Preferences Memory
|
||||||
|
|
||||||
|
This document serves as a persistent memory for developer preferences established during coding sessions. AI assistants should refer to this document to understand the developer's preferences and update it as new preferences are established.
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
- Maintain a consistent record of developer preferences across coding sessions
|
||||||
|
- Ensure AI assistants can provide assistance that aligns with the developer's preferred coding style and practices
|
||||||
|
- Reduce the need for developers to repeatedly explain their preferences
|
||||||
|
|
||||||
|
## How to Use This Document
|
||||||
|
|
||||||
|
- **AI Assistants**: Review this document before providing assistance. Update it when new preferences are established through user feedback.
|
||||||
|
- **Developers**: Reference this document to see what preferences have been recorded. Feel free to edit it directly to add or modify preferences.
|
||||||
|
|
||||||
|
## Recorded Preferences
|
||||||
|
|
||||||
|
### File and Directory Structure
|
||||||
|
|
||||||
|
- Prefer lowercase filenames for consistency across the codebase
|
||||||
|
- Use unique folder names following best practices
|
||||||
|
- Folder references should be easily identifiable when using @mentions in AI-assisted coding
|
||||||
|
- Admin-specific functionality should be in the `admin/lib/` directory
|
||||||
|
- Core plugin functionality should be in the `includes/` directory
|
||||||
|
|
||||||
|
### Code Style
|
||||||
|
|
||||||
|
- Follow WordPress coding standards
|
||||||
|
- Use OOP best practices for WordPress plugins
|
||||||
|
- Create modular, maintainable, and efficient code structure
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
- Prefer token-efficient documentation in `AGENTS.md` that references `.agents/` files
|
||||||
|
- Document the release workflow in `AGENTS.md` and `.agents/release-process.md`
|
||||||
|
- Store environment variable documentation in `.agents/local-env-vars.md`
|
||||||
|
- Maintain consistent documentation across readme.txt, README.md, and CHANGELOG.md
|
||||||
|
|
||||||
|
### Asset Organization
|
||||||
|
|
||||||
|
- Store banner, icon, and screenshot images in `.wordpress-org/assets/`
|
||||||
|
- Store WORDPRESS_ORG files within `/wordpress-org`
|
||||||
|
- Organize files in `/assets` into relevant `/admin` folders
|
||||||
|
|
||||||
|
### Version Control
|
||||||
|
|
||||||
|
- Use standard Git practices for version control and code management
|
||||||
|
- When updating plugin versions, create a GitHub tag and trigger GitHub actions
|
||||||
|
- Follow a specific release process with proper tagging and GitHub releases
|
||||||
|
- Ensure commits are merged to the main branch as Git Updater pulls data from the readme.txt file in the primary branch
|
||||||
|
|
||||||
|
### Plugin Development
|
||||||
|
|
||||||
|
- Prefer simpler solutions over complex ones for plugins
|
||||||
|
- Use a specific formatting style for the CHANGELOG.md file, using #### for section headings
|
||||||
|
- When updating plugin versions, remember to update language files (POT/PO)
|
||||||
|
- Comment out redundant code during testing
|
||||||
|
|
||||||
|
### Potential AI Assised IDE Issues
|
||||||
|
|
||||||
|
- Check for non-standard local terminal commandline customisations that might not be understood by the AI IDE in its terminal useage and cause errors in execution or confusion in not seeing expected results, and advise on how to resolve
|
||||||
|
- Check for non-standard or multiple python and node.js versions, including homebrew versions, that might not be understood by the AI IDE in its terminal useage and cause errors in execution or confusion in not seeing expected results, and advise on how to resolve
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
# Feature Development Guide for AI Assistants
|
||||||
|
|
||||||
|
This document provides guidance for AI assistants to help with feature development for the Fix Plugin Does Not Exist Notices plugin.
|
||||||
|
|
||||||
|
## Feature Development Workflow
|
||||||
|
|
||||||
|
### 1. Create a Feature Branch
|
||||||
|
|
||||||
|
Always start by creating a feature branch from the latest main branch pulled from origin (this step is mandatory):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main # Critical step - never skip this
|
||||||
|
git checkout -b feature/descriptive-name
|
||||||
|
```
|
||||||
|
|
||||||
|
Use a descriptive name that clearly indicates what the feature is about. If there's an issue number, include it in the branch name (e.g., `feature/123-update-source-selector`).
|
||||||
|
|
||||||
|
For more detailed git workflow guidelines, see **@.agents/git-workflow.md**.
|
||||||
|
|
||||||
|
### 2. Implement the Feature
|
||||||
|
|
||||||
|
When implementing a new feature:
|
||||||
|
|
||||||
|
- Follow WordPress coding standards
|
||||||
|
- Ensure all strings are translatable
|
||||||
|
- Add appropriate comments
|
||||||
|
- Consider performance implications
|
||||||
|
- Maintain backward compatibility
|
||||||
|
- Review reference plugins in the `reference-plugins/` directory for inspiration and best practices
|
||||||
|
|
||||||
|
### 3. Update Documentation
|
||||||
|
|
||||||
|
Update relevant documentation to reflect the new feature:
|
||||||
|
|
||||||
|
- Add a description to CHANGELOG.md under an "Unreleased" section
|
||||||
|
- Update readme.txt if the feature affects user-facing functionality
|
||||||
|
- Update README.md with the new feature description
|
||||||
|
- Update inline documentation/comments
|
||||||
|
- Update wiki documentation in the `.wiki` directory:
|
||||||
|
- Create or update feature-specific pages
|
||||||
|
- Update the Home.md page if necessary
|
||||||
|
- Add the feature to any relevant existing pages
|
||||||
|
- Add screenshots or examples if applicable
|
||||||
|
- Remember that any feature addition will require a version increment in all relevant files
|
||||||
|
|
||||||
|
For detailed guidelines on maintaining wiki documentation, see **@.agents/wiki-documentation.md**.
|
||||||
|
|
||||||
|
### 4. Testing
|
||||||
|
|
||||||
|
Test the feature thoroughly:
|
||||||
|
|
||||||
|
- Test with the latest WordPress version
|
||||||
|
- Test with the minimum supported WordPress version (5.0)
|
||||||
|
- Test with PHP 7.0+ (minimum supported version)
|
||||||
|
- Test in different environments (if possible)
|
||||||
|
|
||||||
|
### 5. Commit Changes
|
||||||
|
|
||||||
|
Make atomic commits with clear messages:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Add feature: descriptive name"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Prepare for Release
|
||||||
|
|
||||||
|
When the feature is ready to be released:
|
||||||
|
|
||||||
|
1. Create a version branch with the appropriate version number (typically increment the minor version for features):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Example: from 2.2.0 to 2.3.0
|
||||||
|
git checkout -b v{MAJOR}.{MINOR+1}.0
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Now update version numbers in all required files:
|
||||||
|
|
||||||
|
- Main plugin file (wp-fix-plugin-does-not-exist-notices.php)
|
||||||
|
- CHANGELOG.md (add a new version section)
|
||||||
|
- readme.txt
|
||||||
|
- README.md
|
||||||
|
- languages/wp-fix-plugin-does-not-exist-notices.pot (Project-Id-Version)
|
||||||
|
|
||||||
|
3. Commit the version updates:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Version {MAJOR}.{MINOR+1}.0 - [brief description]"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Tag the version as stable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v{MAJOR}.{MINOR+1}.0-stable -m "Stable version {MAJOR}.{MINOR+1}.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Follow the standard release process from this point
|
||||||
|
|
||||||
|
**IMPORTANT**: Don't update version numbers during initial development and testing. Only create a version branch and update version numbers when the feature is confirmed working.
|
||||||
|
|
||||||
|
For detailed guidelines on time-efficient development and testing, see **@.agents/incremental-development.md**.
|
||||||
|
|
||||||
|
### 7. Push to Remote (Optional for Collaboration)
|
||||||
|
|
||||||
|
If you need to collaborate with others on the feature before it's ready for release:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git push github HEAD:feature/descriptive-name
|
||||||
|
git push gitea HEAD:feature/descriptive-name
|
||||||
|
```
|
||||||
|
|
||||||
|
### 8. Create Pull Request (Optional)
|
||||||
|
|
||||||
|
If the repository uses pull requests for code review, create a pull request from the feature branch to the version branch.
|
||||||
|
|
||||||
|
## Code Standards and Best Practices
|
||||||
|
|
||||||
|
### PHP Coding Standards
|
||||||
|
|
||||||
|
- Follow [WordPress PHP Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/)
|
||||||
|
- Use tabs for indentation, not spaces
|
||||||
|
- Use proper naming conventions:
|
||||||
|
- Class names: `Class_Name`
|
||||||
|
- Function names: `function_name`
|
||||||
|
- Variable names: `$variable_name`
|
||||||
|
|
||||||
|
### JavaScript Coding Standards
|
||||||
|
|
||||||
|
- Follow [WordPress JavaScript Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/)
|
||||||
|
- Use tabs for indentation, not spaces
|
||||||
|
- Use proper naming conventions:
|
||||||
|
- Function names: `functionName`
|
||||||
|
- Variable names: `variableName`
|
||||||
|
|
||||||
|
### Internationalization (i18n)
|
||||||
|
|
||||||
|
- Wrap all user-facing strings in appropriate translation functions:
|
||||||
|
- `__()` for simple strings
|
||||||
|
- `_e()` for echoed strings
|
||||||
|
- `esc_html__()` for escaped strings
|
||||||
|
- `esc_html_e()` for escaped and echoed strings
|
||||||
|
- Always use the plugin's text domain: `fix-plugin-does-not-exist-notices`
|
||||||
|
|
||||||
|
### Security Best Practices
|
||||||
|
|
||||||
|
- Validate and sanitize all input
|
||||||
|
- Escape all output
|
||||||
|
- Use nonces for form submissions
|
||||||
|
- Use capability checks for user actions
|
||||||
|
|
||||||
|
## Working in Multi-Repository Workspaces
|
||||||
|
|
||||||
|
When developing features in a workspace with multiple repositories:
|
||||||
|
|
||||||
|
1. **Verify Repository Context**:
|
||||||
|
- Confirm you're working in the correct repository before suggesting or implementing features
|
||||||
|
- Use `pwd` and `git remote -v` to verify the current repository
|
||||||
|
|
||||||
|
2. **Feature Verification**:
|
||||||
|
- Before implementing a feature, verify it doesn't already exist in the current repository
|
||||||
|
- Don't assume features from other repositories should be implemented in this one
|
||||||
|
- Use `codebase-retrieval` to search for existing functionality
|
||||||
|
|
||||||
|
3. **Repository-Specific Implementation**:
|
||||||
|
- Implement features appropriate for this specific plugin's purpose
|
||||||
|
- Maintain consistency with the current repository's architecture and coding style
|
||||||
|
- Don't copy code directly from other repositories without adaptation
|
||||||
|
|
||||||
|
4. **Cross-Repository Inspiration**:
|
||||||
|
- If implementing a feature inspired by another repository, explicitly note that it's a new feature
|
||||||
|
- Adapt the feature to fit the current repository's needs and architecture
|
||||||
|
- Document the inspiration source in code comments
|
||||||
|
|
||||||
|
For detailed guidelines on working in multi-repository workspaces, see **@.agents/multi-repo-workspace.md**.
|
||||||
|
|
||||||
|
## Feature Types and Implementation Guidelines
|
||||||
|
|
||||||
|
### Admin Interface Features
|
||||||
|
|
||||||
|
When adding features to the admin interface:
|
||||||
|
|
||||||
|
- Use WordPress admin UI components for consistency
|
||||||
|
- Follow WordPress admin UI patterns
|
||||||
|
- Ensure accessibility compliance
|
||||||
|
- Add appropriate help text
|
||||||
|
|
||||||
|
### Plugin Functionality Features
|
||||||
|
|
||||||
|
When adding core functionality:
|
||||||
|
|
||||||
|
- Ensure compatibility with WordPress hooks system
|
||||||
|
- Consider performance impact
|
||||||
|
- Maintain backward compatibility
|
||||||
|
- Add appropriate error handling
|
||||||
|
|
||||||
|
### Integration Features
|
||||||
|
|
||||||
|
When adding integration with other plugins or services:
|
||||||
|
|
||||||
|
- Make integrations optional when possible
|
||||||
|
- Check if the integrated plugin/service is available before using it
|
||||||
|
- Provide fallback functionality when the integration is not available
|
||||||
|
- Document the integration requirements
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# Folder Structure
|
||||||
|
|
||||||
|
This document outlines the folder structure of the plugin and explains the purpose of each directory.
|
||||||
|
|
||||||
|
## Root Directories
|
||||||
|
|
||||||
|
- **admin/** - Contains admin-specific functionality and assets
|
||||||
|
- **includes/** - Contains core plugin functionality and classes
|
||||||
|
- **languages/** - Contains translation files
|
||||||
|
- **scripts/** - Contains build and deployment scripts
|
||||||
|
- **.agents/** - Contains documentation for AI assistants
|
||||||
|
- **.github/** - Contains GitHub-specific files like workflows
|
||||||
|
- **.wordpress-org/** - Contains WordPress.org assets like banners and screenshots
|
||||||
|
|
||||||
|
## Admin Directory Structure
|
||||||
|
|
||||||
|
- **admin/css/** - Admin-specific CSS files
|
||||||
|
- **admin/js/** - Admin-specific JavaScript files
|
||||||
|
- **admin/images/** - Admin-specific images
|
||||||
|
- **admin/partials/** - Admin-specific template partials
|
||||||
|
- **admin/settings/** - Admin settings functionality
|
||||||
|
- **admin/tools/** - Admin tools functionality
|
||||||
|
- **admin/lib/** - Admin-specific library files and helper functions
|
||||||
|
- **admin/lib/admin.php** - Admin class for handling admin-specific functionality
|
||||||
|
- **admin/lib/modal.php** - Modal class for handling the update source selector modal
|
||||||
|
|
||||||
|
## Includes Directory
|
||||||
|
|
||||||
|
The `includes/` directory contains the core plugin functionality:
|
||||||
|
|
||||||
|
- **includes/core.php** - Core class for handling the main plugin functionality
|
||||||
|
- **includes/plugin.php** - Main plugin class that initializes all components
|
||||||
|
- **includes/updater.php** - Updater class for handling plugin updates
|
||||||
|
|
||||||
|
## File Naming Conventions
|
||||||
|
|
||||||
|
- All PHP files in the `includes/` directory use lowercase filenames
|
||||||
|
- All directories use lowercase names
|
||||||
|
- JavaScript and CSS files use kebab-case (e.g., `update-source-selector.js`)
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
1. **Unique Directory Names**: Each directory should have a unique name to avoid confusion
|
||||||
|
2. **Logical Organization**: Files should be organized logically by function
|
||||||
|
3. **Consistent Naming**: File and directory names should follow consistent naming conventions
|
||||||
|
4. **Clear Separation**: Admin functionality should be separate from core functionality
|
||||||
|
5. **Minimal Dependencies**: Files should have minimal dependencies on other files
|
||||||
|
|
||||||
|
## @mentions for AI Assistants
|
||||||
|
|
||||||
|
When referring to files or directories in AI conversations, use the following format:
|
||||||
|
|
||||||
|
- **@includes/plugin.php** - Main plugin class
|
||||||
|
- **@includes/core.php** - Core functionality
|
||||||
|
- **@admin/lib/admin.php** - Admin functionality
|
||||||
|
- **@admin/lib/modal.php** - Modal functionality
|
||||||
|
- **@includes/updater.php** - Updater functionality
|
||||||
|
- **@admin/js/update-source-selector.js** - Update source selector JavaScript
|
||||||
|
- **@admin/css/update-source-selector.css** - Update source selector CSS
|
||||||
@@ -0,0 +1,255 @@
|
|||||||
|
# Git Workflow Guide for AI Assistants
|
||||||
|
|
||||||
|
This document provides guidance for AI assistants to help with git workflow management for the Fix Plugin Does Not Exist Notices plugin.
|
||||||
|
|
||||||
|
## Core Git Workflow Principles
|
||||||
|
|
||||||
|
### 1. Always Start from Latest Main Branch
|
||||||
|
|
||||||
|
Before creating any new branch, always ensure you're working with the latest code from the main branch by pulling from the origin:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
This critical step ensures that your new branch includes all the latest changes from the remote repository and reduces the chance of merge conflicts later. Never skip this step, as working from an outdated main branch can lead to integration problems.
|
||||||
|
|
||||||
|
### 2. One Issue Per Branch
|
||||||
|
|
||||||
|
Create a separate branch for each issue or feature you're working on:
|
||||||
|
|
||||||
|
- For bug fixes: `fix/issue-description` or `fix/issue-number-description`
|
||||||
|
- For features: `feature/descriptive-name`
|
||||||
|
- For small improvements: `patch/descriptive-name`
|
||||||
|
- For code restructuring: `refactor/descriptive-name`
|
||||||
|
|
||||||
|
**Important**: Use descriptive names without version numbers for development branches. This allows focusing on the changes without worrying about version updates until the changes are confirmed working.
|
||||||
|
|
||||||
|
Only create version branches (e.g., `v2.2.3`) when changes are ready for release, and only then update version numbers in files.
|
||||||
|
|
||||||
|
This approach keeps changes focused, makes code review easier, and provides clear rollback points if needed.
|
||||||
|
|
||||||
|
### 3. Pull Request for Each Issue
|
||||||
|
|
||||||
|
Create a separate pull request for each issue or feature. This ensures:
|
||||||
|
|
||||||
|
- Each change can be reviewed independently
|
||||||
|
- Issues can be merged as soon as they're ready
|
||||||
|
- Changes can be reverted individually if needed
|
||||||
|
- CI/CD checks can run on focused changes
|
||||||
|
|
||||||
|
## Detailed Workflow
|
||||||
|
|
||||||
|
### Starting a New Task
|
||||||
|
|
||||||
|
1. **Update Main Branch from Origin**
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
This step is mandatory before creating any new branch to ensure you're working with the latest code.
|
||||||
|
|
||||||
|
2. **Create a New Branch**
|
||||||
|
```bash
|
||||||
|
git checkout -b [branch-type]/[description]
|
||||||
|
```
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
```bash
|
||||||
|
git checkout -b fix/123-plugin-activation-error
|
||||||
|
git checkout -b feature/update-source-selector
|
||||||
|
git checkout -b patch/2.2.1
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Make Your Changes**
|
||||||
|
- Make focused changes related only to the specific issue
|
||||||
|
- Commit regularly with clear, descriptive messages
|
||||||
|
- Reference issue numbers in commit messages when applicable
|
||||||
|
|
||||||
|
4. **Testing Approach**
|
||||||
|
|
||||||
|
For efficient development:
|
||||||
|
- **Local Testing (Default)**: Test without updating version numbers
|
||||||
|
```bash
|
||||||
|
# Get current version from plugin file
|
||||||
|
CURRENT_VERSION=$(grep -o "Version: [0-9.]*" wp-fix-plugin-does-not-exist-notices.php | cut -d' ' -f2)
|
||||||
|
|
||||||
|
# Build and deploy with current version
|
||||||
|
./build.sh $CURRENT_VERSION
|
||||||
|
```
|
||||||
|
- **Remote Testing (When Requested)**: Push development branch to remote
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "[Brief description] for remote testing"
|
||||||
|
git push origin [branch-name]
|
||||||
|
```
|
||||||
|
- **Version Creation**: Only when changes are confirmed working
|
||||||
|
```bash
|
||||||
|
# Create version branch
|
||||||
|
git checkout -b v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
|
||||||
|
# Update version numbers in all required files
|
||||||
|
# Commit version updates
|
||||||
|
git add .
|
||||||
|
git commit -m "Version {MAJOR}.{MINOR}.{PATCH} - Brief description"
|
||||||
|
|
||||||
|
# Tag as stable
|
||||||
|
git tag -a v{MAJOR}.{MINOR}.{PATCH}-stable -m "Stable version {MAJOR}.{MINOR}.{PATCH}"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Push Branch to Remote (When Needed)**
|
||||||
|
```bash
|
||||||
|
git push origin [branch-name]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating a Pull Request
|
||||||
|
|
||||||
|
1. **Ensure Tests Pass Locally**
|
||||||
|
- Run any available tests to ensure your changes work as expected
|
||||||
|
- Fix any issues before creating a pull request
|
||||||
|
|
||||||
|
2. **Create Pull Request**
|
||||||
|
- Create a pull request from your branch to the main branch
|
||||||
|
- Include a clear description of the changes
|
||||||
|
- Reference any related issues
|
||||||
|
- Assign reviewers if appropriate
|
||||||
|
|
||||||
|
3. **Address Review Feedback**
|
||||||
|
- Make requested changes
|
||||||
|
- Push additional commits to the same branch
|
||||||
|
- Respond to comments
|
||||||
|
|
||||||
|
### CI/CD Integration
|
||||||
|
|
||||||
|
Each pull request should pass through CI/CD checks before being merged. This ensures that all changes are compatible with the existing codebase and meet quality standards.
|
||||||
|
|
||||||
|
1. **Automated Tests**
|
||||||
|
- Unit tests
|
||||||
|
- Integration tests
|
||||||
|
- Code style checks
|
||||||
|
- Compatibility checks
|
||||||
|
|
||||||
|
2. **Manual Review**
|
||||||
|
- Code review by team members
|
||||||
|
- Functional testing in test environment
|
||||||
|
- Verification of feature requirements
|
||||||
|
|
||||||
|
3. **Approval Process**
|
||||||
|
- Required approvals before merging
|
||||||
|
- Final checks for conflicts with other pending PRs
|
||||||
|
- Verification that all CI/CD checks have passed
|
||||||
|
|
||||||
|
4. **Compatibility with Unmerged PRs**
|
||||||
|
- When multiple PRs are in progress simultaneously, ensure each PR is compatible with the main branch
|
||||||
|
- For related changes, consider using feature flags to allow independent merging
|
||||||
|
- Document dependencies between PRs in the PR description
|
||||||
|
|
||||||
|
### Handling Concurrent Development
|
||||||
|
|
||||||
|
When working on multiple issues simultaneously:
|
||||||
|
|
||||||
|
1. **Keep Branches Independent**
|
||||||
|
- Always create new branches from the latest main branch pulled from origin, not from other feature branches
|
||||||
|
- This ensures each PR can be merged independently and contains all the latest changes
|
||||||
|
|
||||||
|
2. **Handle Conflicts Proactively**
|
||||||
|
- If main has been updated with other changes while you're working:
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
git checkout your-branch
|
||||||
|
git merge main
|
||||||
|
```
|
||||||
|
- Resolve any conflicts locally before pushing
|
||||||
|
|
||||||
|
3. **Coordinate on Dependent Changes**
|
||||||
|
- If changes depend on each other, note this in the PR description
|
||||||
|
- Consider using the "Depends on #PR-number" notation in PR descriptions
|
||||||
|
|
||||||
|
## Release Process
|
||||||
|
|
||||||
|
When preparing for a release:
|
||||||
|
|
||||||
|
1. **Ensure All Required PRs are Merged**
|
||||||
|
- All features and fixes planned for the release should be merged to main
|
||||||
|
|
||||||
|
2. **Create a Release Branch**
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
git checkout -b v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Follow Standard Release Process**
|
||||||
|
- Update version numbers
|
||||||
|
- Update changelogs
|
||||||
|
- Create tag
|
||||||
|
- See **@.agents/release-process.md** for complete details
|
||||||
|
|
||||||
|
## Contributing to External Repositories
|
||||||
|
|
||||||
|
When working on issues for external repositories (pull/merge requests):
|
||||||
|
|
||||||
|
### 1. Clearly Indicate Testing Status
|
||||||
|
|
||||||
|
In the PR description and comments, clearly indicate the testing status:
|
||||||
|
|
||||||
|
- **Not tested**: "This PR addresses [issue] but has not been tested locally or remotely. It's ready for community/maintainer testing."
|
||||||
|
- **Locally tested**: "This PR has been tested in a local WordPress environment and [describe results]."
|
||||||
|
- **Remotely tested**: "This PR has been tested with a remote build and [describe results]."
|
||||||
|
|
||||||
|
### 2. Provide Testing Instructions
|
||||||
|
|
||||||
|
Include clear instructions for maintainers on how to test the changes:
|
||||||
|
|
||||||
|
- Steps to reproduce the original issue (if applicable)
|
||||||
|
- Steps to verify the fix or feature
|
||||||
|
- Any specific environments or configurations needed for testing
|
||||||
|
|
||||||
|
### 3. Be Responsive to Feedback
|
||||||
|
|
||||||
|
Monitor the PR for feedback from maintainers and be prepared to make additional changes if requested.
|
||||||
|
|
||||||
|
## Best Practices
|
||||||
|
|
||||||
|
### Commit Messages
|
||||||
|
|
||||||
|
- Use present tense ("Add feature" not "Added feature")
|
||||||
|
- Start with a verb
|
||||||
|
- Keep the first line under 50 characters
|
||||||
|
- Reference issues when relevant: "Fix #123: Resolve plugin detection issue"
|
||||||
|
- For more complex changes, add a detailed description after the first line
|
||||||
|
|
||||||
|
### Branch Management
|
||||||
|
|
||||||
|
- Delete branches after they've been merged
|
||||||
|
- Keep branch names descriptive but concise
|
||||||
|
- Use consistent naming conventions
|
||||||
|
|
||||||
|
### Code Review
|
||||||
|
|
||||||
|
- Review code thoroughly before approving
|
||||||
|
- Test changes locally when possible
|
||||||
|
- Provide constructive feedback
|
||||||
|
- See **@.agents/code-review.md** for detailed code review guidelines
|
||||||
|
|
||||||
|
### Suggested Improvements
|
||||||
|
|
||||||
|
If you identify potential improvements outside the scope of the current issue:
|
||||||
|
|
||||||
|
1. **Document the Suggestion**
|
||||||
|
- Note the suggestion in the PR comments
|
||||||
|
- Create a new issue for the suggestion
|
||||||
|
- Be specific about the benefits and implementation details
|
||||||
|
|
||||||
|
2. **Create a Separate Branch**
|
||||||
|
- Don't include unrelated improvements in the current PR
|
||||||
|
- Create a new branch from the latest main branch for the suggested improvement
|
||||||
|
- Submit a separate PR for the suggestion
|
||||||
|
|
||||||
|
3. **Ensure Compatibility**
|
||||||
|
- Make sure the suggested improvement is compatible with any unmerged PRs
|
||||||
|
- If the improvement depends on changes in another PR, note this dependency
|
||||||
|
- Consider how the improvement will interact with other pending changes
|
||||||
@@ -0,0 +1,229 @@
|
|||||||
|
# Incremental Development and Testing Guide
|
||||||
|
|
||||||
|
This document provides guidance for AI assistants to help with incremental development and testing for the Fix Plugin Does Not Exist Notices plugin.
|
||||||
|
|
||||||
|
## Time-Efficient Development Principles
|
||||||
|
|
||||||
|
### Branch Naming for Development
|
||||||
|
|
||||||
|
1. **Initial Development Branches**
|
||||||
|
- Use descriptive names without version numbers:
|
||||||
|
- `fix/issue-description` - For bug fixes
|
||||||
|
- `feature/descriptive-name` - For new features
|
||||||
|
- `patch/descriptive-name` - For small improvements
|
||||||
|
- `refactor/descriptive-name` - For code restructuring
|
||||||
|
- **Don't update version numbers** during this phase
|
||||||
|
- Focus on implementing and testing the changes
|
||||||
|
|
||||||
|
2. **Version Branches**
|
||||||
|
- Only create after changes are confirmed working:
|
||||||
|
- `v{MAJOR}.{MINOR}.{PATCH}` (e.g., `v2.2.3`)
|
||||||
|
- Only update version numbers at this point
|
||||||
|
- This minimizes unnecessary version updates
|
||||||
|
|
||||||
|
### Version Numbering Guidelines
|
||||||
|
|
||||||
|
1. **Patch Versions (X.Y.Z → X.Y.Z+1)**
|
||||||
|
- Use for bug fixes and small improvements
|
||||||
|
- Example: `v2.2.3`
|
||||||
|
|
||||||
|
2. **Minor Versions (X.Y.Z → X.Y+1.0)**
|
||||||
|
- Use for new features or significant improvements
|
||||||
|
- Example: `v2.3.0`
|
||||||
|
|
||||||
|
3. **Major Versions (X.Y.Z → X+1.0.0)**
|
||||||
|
- Only increment when numerous features and fixes are tested and confirmed stable
|
||||||
|
- Reserved for breaking changes or significant overhauls
|
||||||
|
- Example: `v3.0.0`
|
||||||
|
|
||||||
|
### Marking Stable Versions
|
||||||
|
|
||||||
|
When the user confirms that changes are working correctly:
|
||||||
|
|
||||||
|
1. Create a version branch and update version numbers
|
||||||
|
2. Tag the version branch as stable
|
||||||
|
```bash
|
||||||
|
git tag -a v{MAJOR}.{MINOR}.{PATCH}-stable -m "Stable version {MAJOR}.{MINOR}.{PATCH}"
|
||||||
|
```
|
||||||
|
3. Document in the PR or issue that this version has been confirmed stable
|
||||||
|
|
||||||
|
## Local Testing Workflow
|
||||||
|
|
||||||
|
### 1. Create a Descriptive Branch for Development
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Ensure you have the latest main branch
|
||||||
|
git checkout main
|
||||||
|
git pull origin main
|
||||||
|
|
||||||
|
# Create a descriptive branch (without version numbers)
|
||||||
|
git checkout -b fix/plugin-activation-error
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Make Changes Without Updating Version Numbers
|
||||||
|
|
||||||
|
During the development and testing phase:
|
||||||
|
|
||||||
|
- Implement the necessary changes
|
||||||
|
- **Don't update version numbers** in any files yet
|
||||||
|
- Focus on the functionality
|
||||||
|
|
||||||
|
### 3. Build and Deploy Locally
|
||||||
|
|
||||||
|
For local testing, use the current version number from the main plugin file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Get the current version from the plugin file
|
||||||
|
CURRENT_VERSION=$(grep -o "Version: [0-9.]*" wp-fix-plugin-does-not-exist-notices.php | cut -d' ' -f2)
|
||||||
|
|
||||||
|
# Build and deploy with current version
|
||||||
|
./build.sh $CURRENT_VERSION
|
||||||
|
```
|
||||||
|
|
||||||
|
This will:
|
||||||
|
|
||||||
|
1. Create a build directory
|
||||||
|
2. Copy required files to the build directory
|
||||||
|
3. Deploy the plugin to your local WordPress testing environment
|
||||||
|
|
||||||
|
**Note**: For local testing iterations, you do not need to commit changes, push to remote repositories, or create tags unless specifically requested.
|
||||||
|
|
||||||
|
### 4. Test and Evaluate
|
||||||
|
|
||||||
|
Test the changes thoroughly in the local environment:
|
||||||
|
|
||||||
|
- Verify that the specific issue is fixed or feature works as expected
|
||||||
|
- Check for any regressions or new issues
|
||||||
|
- Document the results
|
||||||
|
|
||||||
|
### 5. Based on Testing Results
|
||||||
|
|
||||||
|
- **If changes need further refinement**: Continue working in the same branch
|
||||||
|
- **If changes work as expected**: Proceed to version branch creation
|
||||||
|
|
||||||
|
### 6. Creating a Version Branch
|
||||||
|
|
||||||
|
When changes are confirmed working and ready for release:
|
||||||
|
|
||||||
|
1. Create a version branch with the appropriate version number:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Determine the appropriate version increment (patch, minor, or major)
|
||||||
|
# based on the nature of the changes
|
||||||
|
git checkout -b v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Now update version numbers in all required files:
|
||||||
|
|
||||||
|
- Main plugin file (wp-fix-plugin-does-not-exist-notices.php)
|
||||||
|
- CHANGELOG.md (add a new version section)
|
||||||
|
- readme.txt
|
||||||
|
- README.md
|
||||||
|
- languages/wp-fix-plugin-does-not-exist-notices.pot (Project-Id-Version)
|
||||||
|
|
||||||
|
3. Commit the version updates:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Version {MAJOR}.{MINOR}.{PATCH} - [brief description]"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Tag the version as stable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v{MAJOR}.{MINOR}.{PATCH}-stable -m "Stable version {MAJOR}.{MINOR}.{PATCH}"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remote Testing Workflow
|
||||||
|
|
||||||
|
When the user specifically requests remote testing:
|
||||||
|
|
||||||
|
### 1. Commit Changes to Remote Repository
|
||||||
|
|
||||||
|
If testing a development branch (without version updates):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "[brief description] for remote testing"
|
||||||
|
git push origin [branch-name]
|
||||||
|
```
|
||||||
|
|
||||||
|
If testing a version branch (with version updates):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Version {MAJOR}.{MINOR}.{PATCH} - [brief description]"
|
||||||
|
git push origin v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Create and Push Tag (For Version Branches Only)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -a v{MAJOR}.{MINOR}.{PATCH} -m "Version {MAJOR}.{MINOR}.{PATCH} for remote testing"
|
||||||
|
git push origin v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will trigger GitHub Actions to build the installable ZIP file.
|
||||||
|
|
||||||
|
### 3. Verify Remote Build
|
||||||
|
|
||||||
|
Check that the GitHub Actions workflow completed successfully and the ZIP file is available for download.
|
||||||
|
|
||||||
|
### 4. Test and Evaluate
|
||||||
|
|
||||||
|
Test the remotely built version and document the results.
|
||||||
|
|
||||||
|
## Contributing to External Repositories
|
||||||
|
|
||||||
|
When working on issues for external repositories (pull/merge requests):
|
||||||
|
|
||||||
|
### 1. Clearly Indicate Testing Status
|
||||||
|
|
||||||
|
In the PR description and comments, clearly indicate the testing status:
|
||||||
|
|
||||||
|
- **Not tested**: "This PR addresses [issue] but has not been tested locally or remotely. It's ready for community/maintainer testing."
|
||||||
|
- **Locally tested**: "This PR has been tested in a local WordPress environment and [describe results]."
|
||||||
|
- **Remotely tested**: "This PR has been tested with a remote build and [describe results]."
|
||||||
|
|
||||||
|
### 2. Provide Testing Instructions
|
||||||
|
|
||||||
|
Include clear instructions for maintainers on how to test the changes:
|
||||||
|
|
||||||
|
- Steps to reproduce the original issue (if applicable)
|
||||||
|
- Steps to verify the fix or feature
|
||||||
|
- Any specific environments or configurations needed for testing
|
||||||
|
|
||||||
|
### 3. Be Responsive to Feedback
|
||||||
|
|
||||||
|
Monitor the PR for feedback from maintainers and be prepared to make additional changes if requested.
|
||||||
|
|
||||||
|
## Rollback Procedure
|
||||||
|
|
||||||
|
If a change causes issues after release:
|
||||||
|
|
||||||
|
### 1. Identify the Last Stable Version
|
||||||
|
|
||||||
|
Find the last version that was marked as stable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git tag -l "*-stable"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Create a New Branch from the Stable Version
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git checkout v{MAJOR}.{MINOR}.{PATCH}-stable
|
||||||
|
git checkout -b fix/rollback-based-fix
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Make Necessary Changes
|
||||||
|
|
||||||
|
Implement the fix based on the stable version. Don't update version numbers yet.
|
||||||
|
|
||||||
|
### 4. Test the Changes
|
||||||
|
|
||||||
|
Test thoroughly to ensure the fix resolves the issues.
|
||||||
|
|
||||||
|
### 5. When Confirmed Working
|
||||||
|
|
||||||
|
Create a version branch with an incremented patch version and update all version numbers as described in the "Creating a Version Branch" section.
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# Local Development Environment Variables
|
||||||
|
|
||||||
|
This file contains important paths and URLs for local development.
|
||||||
|
|
||||||
|
## Repository Paths
|
||||||
|
|
||||||
|
- Local development repository: ~/Git/wp-fix-plugin-does-not-exist-notices
|
||||||
|
- LocalWP plugin testing site storage: ~/Local/plugin-testing/app/wp-fix-plugin-does-not-exist-notices
|
||||||
|
- LocalWP plugin testing site configuration: ~/Local/plugin-testing/conf/
|
||||||
|
|
||||||
|
## URLs
|
||||||
|
|
||||||
|
- LocalWP plugin testing URL: <http://plugin-testing.local/>
|
||||||
|
- PHP details: <http://plugin-testing.local/local-phpinfo.php>
|
||||||
|
- XDebug info: <http://plugin-testing.local/local-xdebuginfo.php>
|
||||||
|
- Adminer Evo: <http://localhost:10010/?username=root&db=local>
|
||||||
|
- Mailpit: <http://localhost:10000/>
|
||||||
|
|
||||||
|
## Build and Deploy Scripts
|
||||||
|
|
||||||
|
- Build script: ~/Git/wp-fix-plugin-does-not-exist-notices/build.sh
|
||||||
|
- Local deploy script: ~/Git/wp-fix-plugin-does-not-exist-notices/deploy-local.sh
|
||||||
@@ -36,6 +36,7 @@ Suggesting changes or improvements based on other repositories, leading to scope
|
|||||||
### 1. Repository Verification
|
### 1. Repository Verification
|
||||||
|
|
||||||
**ALWAYS** verify which repository you're currently working in before:
|
**ALWAYS** verify which repository you're currently working in before:
|
||||||
|
|
||||||
- Making code suggestions
|
- Making code suggestions
|
||||||
- Creating or updating documentation
|
- Creating or updating documentation
|
||||||
- Discussing features or functionality
|
- Discussing features or functionality
|
||||||
@@ -44,6 +45,7 @@ Suggesting changes or improvements based on other repositories, leading to scope
|
|||||||
### 2. Explicit Code Search Scoping
|
### 2. Explicit Code Search Scoping
|
||||||
|
|
||||||
When searching for code or functionality:
|
When searching for code or functionality:
|
||||||
|
|
||||||
- Explicitly limit searches to the current repository
|
- Explicitly limit searches to the current repository
|
||||||
- Use repository-specific paths in search queries
|
- Use repository-specific paths in search queries
|
||||||
- Verify search results are from the current repository before using them
|
- Verify search results are from the current repository before using them
|
||||||
File renamed without changes.
@@ -6,11 +6,12 @@ This document outlines the process for preparing and publishing new releases of
|
|||||||
|
|
||||||
1. Create a version branch
|
1. Create a version branch
|
||||||
2. Update version numbers in all required files
|
2. Update version numbers in all required files
|
||||||
3. Build and test the plugin
|
3. Run code quality checks
|
||||||
4. Commit version changes
|
4. Build and test the plugin
|
||||||
5. Create version tags
|
5. Commit version changes
|
||||||
6. Push to remote repositories
|
6. Create version tags
|
||||||
7. Merge into main branch
|
7. Push to remote repositories
|
||||||
|
8. Merge into main branch
|
||||||
|
|
||||||
## Detailed Steps
|
## Detailed Steps
|
||||||
|
|
||||||
@@ -48,7 +49,30 @@ Update version numbers in all required files:
|
|||||||
5. **languages/wp-plugin-starter-template.pot**:
|
5. **languages/wp-plugin-starter-template.pot**:
|
||||||
- Update the `Project-Id-Version` header
|
- Update the `Project-Id-Version` header
|
||||||
|
|
||||||
### 3. Build and Test the Plugin
|
### 3. Run Code Quality Checks
|
||||||
|
|
||||||
|
Before building the plugin, run code quality checks to ensure the code meets standards:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run unit tests
|
||||||
|
composer test
|
||||||
|
|
||||||
|
# Run PHP CodeSniffer
|
||||||
|
composer phpcs
|
||||||
|
|
||||||
|
# Run PHP Code Beautifier and Fixer if needed
|
||||||
|
composer phpcbf
|
||||||
|
|
||||||
|
# Run PHPStan
|
||||||
|
composer phpstan
|
||||||
|
|
||||||
|
# Run PHP Mess Detector
|
||||||
|
composer phpmd
|
||||||
|
```
|
||||||
|
|
||||||
|
Fix any issues found by these tools before proceeding. See the [Code Quality Checks Workflow](./code-quality-checks.md) for more details.
|
||||||
|
|
||||||
|
### 4. Build and Test the Plugin
|
||||||
|
|
||||||
Build the plugin with the new version:
|
Build the plugin with the new version:
|
||||||
|
|
||||||
@@ -57,17 +81,19 @@ Build the plugin with the new version:
|
|||||||
```
|
```
|
||||||
|
|
||||||
This will:
|
This will:
|
||||||
|
|
||||||
- Create a clean build in the `build/` directory
|
- Create a clean build in the `build/` directory
|
||||||
- Generate a ZIP file for distribution
|
- Generate a ZIP file for distribution
|
||||||
- Deploy to a local WordPress installation if configured
|
- Deploy to a local WordPress installation if configured
|
||||||
|
|
||||||
Test the plugin thoroughly:
|
Test the plugin thoroughly:
|
||||||
|
|
||||||
- Test with the latest WordPress version
|
- Test with the latest WordPress version
|
||||||
- Test with the minimum supported WordPress version (5.0)
|
- Test with the minimum supported WordPress version (5.0)
|
||||||
- Test with PHP 7.0+ (minimum supported version)
|
- Test with PHP 7.0+ (minimum supported version)
|
||||||
- Test all features and functionality
|
- Test all features and functionality
|
||||||
|
|
||||||
### 4. Commit Version Changes
|
### 5. Commit Version Changes
|
||||||
|
|
||||||
Commit all version changes:
|
Commit all version changes:
|
||||||
|
|
||||||
@@ -76,7 +102,7 @@ git add wp-plugin-starter-template.php readme.txt README.md CHANGELOG.md languag
|
|||||||
git commit -m "Version {MAJOR}.{MINOR}.{PATCH} - [brief description]"
|
git commit -m "Version {MAJOR}.{MINOR}.{PATCH} - [brief description]"
|
||||||
```
|
```
|
||||||
|
|
||||||
### 5. Create Version Tags
|
### 6. Create Version Tags
|
||||||
|
|
||||||
Create version tags:
|
Create version tags:
|
||||||
|
|
||||||
@@ -87,23 +113,39 @@ git tag -a v{MAJOR}.{MINOR}.{PATCH}-stable -m "Stable version {MAJOR}.{MINOR}.{P
|
|||||||
|
|
||||||
The `-stable` tag is used by Git Updater to identify the stable version.
|
The `-stable` tag is used by Git Updater to identify the stable version.
|
||||||
|
|
||||||
### 6. Push to Remote Repositories
|
### 7. Push to Remote Repositories
|
||||||
|
|
||||||
Push the version branch and tags to remote repositories:
|
Push the version branch and tags to remote repositories:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# List remote tags (replace 'github' and 'gitea' if your remotes have different names)
|
||||||
|
git ls-remote --tags github
|
||||||
|
git ls-remote --tags gitea
|
||||||
|
```
|
||||||
|
|
||||||
|
If the tags (e.g., `v{MAJOR}.{MINOR}.{PATCH}` and `v{MAJOR}.{MINOR}.{PATCH}-stable`) already exist remotely but point to the wrong commit, delete them from the remote first:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Delete incorrect remote tags (replace 'github', 'gitea', and tag names)
|
||||||
|
git push github --delete v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
git push github --delete v{MAJOR}.{MINOR}.{PATCH}-stable
|
||||||
|
git push gitea --delete v{MAJOR}.{MINOR}.{PATCH}
|
||||||
|
git push gitea --delete v{MAJOR}.{MINOR}.{PATCH}-stable
|
||||||
|
```
|
||||||
|
|
||||||
|
Once you've confirmed the tags don't exist remotely or have deleted incorrect ones, push the new local tags:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Push to GitHub
|
# Push to GitHub
|
||||||
git push github refs/heads/v{MAJOR}.{MINOR}.{PATCH}:refs/heads/v{MAJOR}.{MINOR}.{PATCH}
|
git push github refs/heads/v{MAJOR}.{MINOR}.{PATCH}:refs/heads/v{MAJOR}.{MINOR}.{PATCH}
|
||||||
git push github refs/tags/v{MAJOR}.{MINOR}.{PATCH}:refs/tags/v{MAJOR}.{MINOR}.{PATCH}
|
git push github --tags
|
||||||
git push github refs/tags/v{MAJOR}.{MINOR}.{PATCH}-stable:refs/tags/v{MAJOR}.{MINOR}.{PATCH}-stable
|
|
||||||
|
|
||||||
# Push to Gitea
|
# Push to Gitea
|
||||||
git push gitea refs/heads/v{MAJOR}.{MINOR}.{PATCH}:refs/heads/v{MAJOR}.{MINOR}.{PATCH}
|
git push gitea refs/heads/v{MAJOR}.{MINOR}.{PATCH}:refs/heads/v{MAJOR}.{MINOR}.{PATCH}
|
||||||
git push gitea refs/tags/v{MAJOR}.{MINOR}.{PATCH}:refs/tags/v{MAJOR}.{MINOR}.{PATCH}
|
git push gitea --tags
|
||||||
git push gitea refs/tags/v{MAJOR}.{MINOR}.{PATCH}-stable:refs/tags/v{MAJOR}.{MINOR}.{PATCH}-stable
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 7. Merge into Main Branch
|
### 8. Merge into Main Branch
|
||||||
|
|
||||||
Merge the version branch into the main branch:
|
Merge the version branch into the main branch:
|
||||||
|
|
||||||
@@ -123,6 +165,7 @@ Follow semantic versioning (MAJOR.MINOR.PATCH):
|
|||||||
- **PATCH**: Backward-compatible bug fixes
|
- **PATCH**: Backward-compatible bug fixes
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
- Bug fix: 1.0.0 → 1.0.1
|
- Bug fix: 1.0.0 → 1.0.1
|
||||||
- New feature: 1.0.0 → 1.1.0
|
- New feature: 1.0.0 → 1.1.0
|
||||||
- Breaking change: 1.0.0 → 2.0.0
|
- Breaking change: 1.0.0 → 2.0.0
|
||||||
@@ -150,7 +193,15 @@ If the plugin is hosted on WordPress.org:
|
|||||||
|
|
||||||
After releasing a new version:
|
After releasing a new version:
|
||||||
|
|
||||||
1. Update the wiki documentation if needed
|
1. Update the wiki documentation:
|
||||||
2. Announce the release in relevant channels
|
- Update the Changelog.md file in the .wiki directory to match the main CHANGELOG.md
|
||||||
3. Monitor for any issues or feedback
|
- Add the new version information to the Home.md file in the Latest Updates section
|
||||||
4. Start planning the next release
|
- Ensure all wiki pages are up-to-date with the new features or changes
|
||||||
|
- Verify that the _Sidebar.md file has the correct navigation structure
|
||||||
|
2. Verify that GitHub Actions workflows are running correctly:
|
||||||
|
- Check that the release workflow created the release with the correct assets
|
||||||
|
- Check that the sync-wiki workflow synced the wiki changes
|
||||||
|
- Fix any permissions issues in the workflow files if needed
|
||||||
|
3. Announce the release in relevant channels
|
||||||
|
4. Monitor for any issues or feedback
|
||||||
|
5. Start planning the next release
|
||||||
@@ -8,6 +8,7 @@ The wiki documentation is organized into the following sections:
|
|||||||
|
|
||||||
1. **User Documentation**:
|
1. **User Documentation**:
|
||||||
- Home
|
- Home
|
||||||
|
- Starter Prompt (must be listed before Installation Guide)
|
||||||
- Installation Guide
|
- Installation Guide
|
||||||
- Usage Instructions
|
- Usage Instructions
|
||||||
- Frequently Asked Questions
|
- Frequently Asked Questions
|
||||||
@@ -88,8 +89,10 @@ Documentation should be updated:
|
|||||||
|
|
||||||
1. Identify the relevant wiki file(s) in the `.wiki/` directory
|
1. Identify the relevant wiki file(s) in the `.wiki/` directory
|
||||||
2. Make the necessary changes
|
2. Make the necessary changes
|
||||||
3. Commit and push the changes to the `main` branch
|
3. **Always ensure the Changelog.md in the wiki is updated to match the main CHANGELOG.md file**
|
||||||
4. The GitHub Actions workflow will automatically sync the changes with the GitHub wiki
|
4. **Always ensure the _Sidebar.md file has the correct navigation structure with Starter Prompt listed before Installation Guide**
|
||||||
|
5. Commit and push the changes to the `main` branch
|
||||||
|
6. The GitHub Actions workflow will automatically sync the changes with the GitHub wiki
|
||||||
|
|
||||||
### Creating New Pages
|
### Creating New Pages
|
||||||
|
|
||||||
@@ -124,7 +127,7 @@ When working in a multi-repository workspace, it's critical to ensure that wiki
|
|||||||
- If referencing functionality from another repository, clearly indicate that it's external
|
- If referencing functionality from another repository, clearly indicate that it's external
|
||||||
- Use phrases like "unlike Repository X, this plugin does not include..."
|
- Use phrases like "unlike Repository X, this plugin does not include..."
|
||||||
|
|
||||||
For detailed guidelines on working in multi-repository workspaces, see **@.ai-workflows/multi-repo-workspace.md**.
|
For detailed guidelines on working in multi-repository workspaces, see **@.agents/multi-repo-workspace.md**.
|
||||||
|
|
||||||
## Best Practices
|
## Best Practices
|
||||||
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
# AI Assistant Guide for WordPress Plugin Development
|
|
||||||
|
|
||||||
This guide helps AI assistants understand the project structure, workflows, and best practices for this repository.
|
|
||||||
|
|
||||||
## IMPORTANT: Repository Context
|
|
||||||
|
|
||||||
This workspace may contain multiple repository folders. Always focus ONLY on the current repository you're working in and avoid hallucinating functionality from other repositories in the workspace.
|
|
||||||
|
|
||||||
- **Current Repository**: wp-plugin-starter-template-for-ai-coding
|
|
||||||
- **Repository Purpose**: A comprehensive starter template for WordPress plugins with best practices for AI-assisted development
|
|
||||||
- **Repository Scope**: All code changes, documentation, and functionality discussions should be limited to THIS repository only
|
|
||||||
|
|
||||||
## Project Overview
|
|
||||||
|
|
||||||
- **Plugin Name**: WordPress Plugin Starter Template
|
|
||||||
- **Plugin Slug**: wp-plugin-starter-template
|
|
||||||
- **Text Domain**: wp-plugin-starter-template
|
|
||||||
- **Namespace**: WPALLSTARS\PluginStarterTemplate
|
|
||||||
- **Version**: 0.1.0
|
|
||||||
- **Requires WordPress**: 5.0+
|
|
||||||
- **Requires PHP**: 7.0+
|
|
||||||
- **License**: GPL-2.0+
|
|
||||||
|
|
||||||
## Repository Structure
|
|
||||||
|
|
||||||
- **wp-plugin-starter-template.php**: Main plugin file with plugin headers
|
|
||||||
- **includes/**: Core plugin functionality
|
|
||||||
- **plugin.php**: Main plugin class that initializes everything
|
|
||||||
- **core.php**: Core functionality class
|
|
||||||
- **updater.php**: Update mechanism for multiple sources
|
|
||||||
- **admin/**: Admin-specific functionality
|
|
||||||
- **lib/**: Admin classes
|
|
||||||
- **css/**: Admin stylesheets
|
|
||||||
- **js/**: Admin JavaScript files
|
|
||||||
- **languages/**: Translation files
|
|
||||||
- **.github/workflows/**: GitHub Actions workflows
|
|
||||||
- **.ai-workflows/**: Documentation for AI assistants
|
|
||||||
- **.wiki/**: Wiki documentation templates
|
|
||||||
|
|
||||||
## Coding Standards
|
|
||||||
|
|
||||||
This project follows the [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/):
|
|
||||||
|
|
||||||
- Use tabs for indentation, not spaces
|
|
||||||
- Follow WordPress naming conventions:
|
|
||||||
- Class names: `Class_Name`
|
|
||||||
- Function names: `function_name`
|
|
||||||
- Variable names: `$variable_name`
|
|
||||||
- Use proper DocBlocks for all classes, methods, and functions
|
|
||||||
- Ensure all user-facing strings are translatable
|
|
||||||
- Validate and sanitize all inputs
|
|
||||||
- Escape all outputs
|
|
||||||
|
|
||||||
## Common Tasks
|
|
||||||
|
|
||||||
For detailed instructions on common tasks like creating releases, adding features, fixing bugs, and testing previous versions, see **@.ai-workflows/release-process.md**.
|
|
||||||
|
|
||||||
## Avoiding Cross-Repository Confusion
|
|
||||||
|
|
||||||
When working in a multi-repository workspace, follow these guidelines to avoid confusion:
|
|
||||||
|
|
||||||
1. **Verify Repository Context**: Always check which repository you're currently working in before making any changes or recommendations.
|
|
||||||
|
|
||||||
2. **Limit Code Search Scope**: When searching for code or functionality, explicitly limit your search to the current repository.
|
|
||||||
|
|
||||||
3. **Don't Assume Features**: Never assume that features present in one repository should be implemented in another. Each repository has its own specific purpose and feature set.
|
|
||||||
|
|
||||||
4. **Repository-Specific Documentation**: Documentation should only reflect the actual features and functionality of the current repository.
|
|
||||||
|
|
||||||
5. **Cross-Repository Inspiration**: If you want to implement a feature inspired by another repository, explicitly mention that it's a new feature being added, not an existing one.
|
|
||||||
|
|
||||||
6. **Verify Before Implementation**: Before implementing or documenting a feature, verify that it actually exists in the current repository by checking the codebase.
|
|
||||||
|
|
||||||
## Internationalization (i18n)
|
|
||||||
|
|
||||||
All user-facing strings should be translatable:
|
|
||||||
|
|
||||||
- Use `__()` for simple strings
|
|
||||||
- Use `_e()` for echoed strings
|
|
||||||
- Use `esc_html__()` for escaped strings
|
|
||||||
- Use `esc_html_e()` for escaped and echoed strings
|
|
||||||
- Always use the plugin's text domain: `wp-plugin-starter-template`
|
|
||||||
|
|
||||||
Example:
|
|
||||||
```php
|
|
||||||
echo esc_html__('This is a translatable string', 'wp-plugin-starter-template');
|
|
||||||
```
|
|
||||||
|
|
||||||
## Security Best Practices
|
|
||||||
|
|
||||||
- Validate and sanitize all inputs
|
|
||||||
- Escape all outputs
|
|
||||||
- Use nonces for form submissions
|
|
||||||
- Use capability checks for user actions
|
|
||||||
- Follow the principle of least privilege
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
- Keep code comments up-to-date
|
|
||||||
- Update README.md and readme.txt when adding new features
|
|
||||||
- Update wiki documentation in the `.wiki/` directory
|
|
||||||
- Update changelog in both CHANGELOG.md and readme.txt
|
|
||||||
|
|
||||||
## Git Workflow
|
|
||||||
|
|
||||||
- Create feature branches from `main`
|
|
||||||
- Use descriptive branch names (e.g., `feature/add-settings-page`)
|
|
||||||
- Make atomic commits with clear messages
|
|
||||||
- Create pull requests for review
|
|
||||||
- Tag releases with version numbers (e.g., `v1.0.0`)
|
|
||||||
|
|
||||||
## Developer Preferences
|
|
||||||
|
|
||||||
When working with this repository, remember these preferences:
|
|
||||||
|
|
||||||
1. Follow WordPress coding standards
|
|
||||||
2. Use OOP approach with namespaced classes
|
|
||||||
3. Keep code modular and maintainable
|
|
||||||
3. Reference these preferences in future interactions
|
|
||||||
|
|
||||||
This ensures consistency across coding sessions and reduces the need for developers to repeatedly explain their preferences.
|
|
||||||
+61
@@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
engines:
|
||||||
|
markdownlint:
|
||||||
|
enabled: true
|
||||||
|
config_file: .markdownlint.json
|
||||||
|
phpmd:
|
||||||
|
enabled: true
|
||||||
|
phpcs:
|
||||||
|
enabled: true
|
||||||
|
stylelint:
|
||||||
|
enabled: false
|
||||||
|
shellcheck:
|
||||||
|
enabled: false
|
||||||
|
# Disable tools that are causing issues
|
||||||
|
eslint:
|
||||||
|
enabled: false
|
||||||
|
eslint-8:
|
||||||
|
enabled: false
|
||||||
|
eslint-9:
|
||||||
|
enabled: false
|
||||||
|
trivy:
|
||||||
|
enabled: false
|
||||||
|
semgrep:
|
||||||
|
enabled: false
|
||||||
|
checkov:
|
||||||
|
enabled: false
|
||||||
|
pmd:
|
||||||
|
enabled: false
|
||||||
|
pmd-7:
|
||||||
|
enabled: false
|
||||||
|
lizard:
|
||||||
|
enabled: false
|
||||||
|
jshint:
|
||||||
|
enabled: false
|
||||||
|
csslint:
|
||||||
|
enabled: false
|
||||||
|
jacksonlinter:
|
||||||
|
enabled: false
|
||||||
|
spectral:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
duplication:
|
||||||
|
enabled: true
|
||||||
|
exclude_patterns:
|
||||||
|
- "tests/**"
|
||||||
|
- "vendor/**"
|
||||||
|
- "node_modules/**"
|
||||||
|
|
||||||
|
metrics:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
exclude_paths:
|
||||||
|
- "vendor/**"
|
||||||
|
- "node_modules/**"
|
||||||
|
- "build/**"
|
||||||
|
- "dist/**"
|
||||||
|
- "bin/**"
|
||||||
|
- ".github/**"
|
||||||
|
- "tests/**"
|
||||||
|
- "*.lock"
|
||||||
|
- "*.json"
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"jquery": true,
|
||||||
|
"es6": true
|
||||||
|
},
|
||||||
|
"extends": "eslint:recommended",
|
||||||
|
"globals": {
|
||||||
|
"wp": "readonly",
|
||||||
|
"wpstData": "readonly",
|
||||||
|
"wpstModalData": "readonly",
|
||||||
|
"Cypress": "readonly",
|
||||||
|
"cy": "readonly",
|
||||||
|
"describe": "readonly",
|
||||||
|
"it": "readonly",
|
||||||
|
"before": "readonly",
|
||||||
|
"module": "readonly"
|
||||||
|
},
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2018,
|
||||||
|
"sourceType": "module"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"indent": ["error", 2],
|
||||||
|
"linebreak-style": ["error", "unix"],
|
||||||
|
"quotes": ["error", "single"],
|
||||||
|
"semi": ["error", "always"]
|
||||||
|
},
|
||||||
|
"ignorePatterns": ["vendor/**", "node_modules/**", "build/**", "dist/**", "bin/**"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
name: Code Quality
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
phpcs:
|
||||||
|
name: PHP CodeSniffer
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
clean: 'true'
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '8.1'
|
||||||
|
extensions: mbstring, intl, zip
|
||||||
|
tools: composer:v2
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --prefer-dist --no-progress
|
||||||
|
|
||||||
|
- name: Install WordPress Coding Standards
|
||||||
|
run: |
|
||||||
|
composer require --dev wp-coding-standards/wpcs dealerdirect/phpcodesniffer-composer-installer
|
||||||
|
vendor/bin/phpcs --config-set installed_paths vendor/wp-coding-standards/wpcs
|
||||||
|
|
||||||
|
- name: Run PHPCS
|
||||||
|
run: composer phpcs
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Run PHPCBF (report only)
|
||||||
|
run: |
|
||||||
|
echo "Running PHPCBF in dry-run mode to show what would be fixed"
|
||||||
|
composer phpcbf -- --dry-run
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
phpstan:
|
||||||
|
name: PHPStan Static Analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '8.1'
|
||||||
|
extensions: mbstring, intl, zip
|
||||||
|
tools: composer:v2, phpstan
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --prefer-dist --no-progress
|
||||||
|
|
||||||
|
- name: Install PHPStan WordPress stubs
|
||||||
|
run: composer require --dev szepeviktor/phpstan-wordpress
|
||||||
|
|
||||||
|
- name: Run PHPStan
|
||||||
|
run: composer phpstan
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
phpmd:
|
||||||
|
name: PHP Mess Detector
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup PHP
|
||||||
|
uses: shivammathur/setup-php@v2
|
||||||
|
with:
|
||||||
|
php-version: '8.1'
|
||||||
|
extensions: mbstring, intl, zip
|
||||||
|
tools: composer:v2, phpmd
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: composer install --prefer-dist --no-progress
|
||||||
|
|
||||||
|
- name: Run PHPMD
|
||||||
|
run: composer phpmd
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
sonarcloud:
|
||||||
|
name: SonarCloud Analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: 17
|
||||||
|
distribution: 'temurin'
|
||||||
|
|
||||||
|
- name: Cache SonarCloud packages
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ~/.sonar/cache
|
||||||
|
key: ${{ runner.os }}-sonar
|
||||||
|
restore-keys: ${{ runner.os }}-sonar
|
||||||
|
|
||||||
|
- name: SonarCloud Scan
|
||||||
|
uses: SonarSource/sonarqube-scan-action@master
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||||
|
with:
|
||||||
|
args: >
|
||||||
|
-Dsonar.projectKey=wpallstars_wp-plugin-starter-template-for-ai-coding
|
||||||
|
-Dsonar.organization=wpallstars
|
||||||
|
-Dsonar.sources=.
|
||||||
|
-Dsonar.exclusions=vendor/**,node_modules/**,tests/**,bin/**,build/**,dist/**
|
||||||
|
-Dsonar.sourceEncoding=UTF-8
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
codacy:
|
||||||
|
name: Codacy Analysis
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Run Codacy Analysis CLI
|
||||||
|
uses: codacy/codacy-analysis-cli-action@v4.3.0
|
||||||
|
with:
|
||||||
|
project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
|
||||||
|
verbose: true
|
||||||
|
output: results.sarif
|
||||||
|
format: sarif
|
||||||
|
# Limit the number of issues to prevent GitHub Code Scanning rejection
|
||||||
|
gh-code-scanning-compat: true
|
||||||
|
max-allowed-issues: 20
|
||||||
|
# Limit tools to prevent timeouts and stay under GitHub's 20 runs limit
|
||||||
|
tool: phpcs,phpmd,markdownlint
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Upload SARIF results file
|
||||||
|
uses: github/codeql-action/upload-sarif@v3
|
||||||
|
with:
|
||||||
|
sarif_file: results.sarif
|
||||||
|
continue-on-error: true
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Release
|
name: Release - Build and publish plugin releases
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -10,6 +10,8 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
name: Build and Release
|
name: Build and Release
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -36,31 +38,41 @@ jobs:
|
|||||||
|
|
||||||
- name: Create build directory
|
- name: Create build directory
|
||||||
run: |
|
run: |
|
||||||
mkdir -p build/wp-plugin-starter-template
|
mkdir -p build/wp-plugin-starter-template-for-ai-coding
|
||||||
cp -R *.php README.md LICENSE CHANGELOG.md readme.txt composer.json build/wp-plugin-starter-template/
|
cp -R *.php README.md LICENSE CHANGELOG.md readme.txt composer.json build/wp-plugin-starter-template-for-ai-coding/
|
||||||
cp -R admin includes languages vendor build/wp-plugin-starter-template/
|
cp -R admin includes languages vendor build/wp-plugin-starter-template-for-ai-coding/
|
||||||
mkdir -p build/wp-plugin-starter-template/assets/banner build/wp-plugin-starter-template/assets/icon build/wp-plugin-starter-template/assets/screenshots
|
mkdir -p build/wp-plugin-starter-template-for-ai-coding/assets/banner build/wp-plugin-starter-template-for-ai-coding/assets/icon build/wp-plugin-starter-template-for-ai-coding/assets/screenshots
|
||||||
if [ -d "assets/banner" ]; then cp -R assets/banner/* build/wp-plugin-starter-template/assets/banner/; fi
|
if [ -d "assets/banner" ]; then cp -R assets/banner/* build/wp-plugin-starter-template-for-ai-coding/assets/banner/; fi
|
||||||
if [ -d "assets/icon" ]; then cp -R assets/icon/* build/wp-plugin-starter-template/assets/icon/; fi
|
if [ -d "assets/icon" ]; then cp -R assets/icon/* build/wp-plugin-starter-template-for-ai-coding/assets/icon/; fi
|
||||||
if [ -d "assets/screenshots" ]; then cp -R assets/screenshots/* build/wp-plugin-starter-template/assets/screenshots/; fi
|
if [ -d "assets/screenshots" ]; then cp -R assets/screenshots/* build/wp-plugin-starter-template-for-ai-coding/assets/screenshots/; fi
|
||||||
|
|
||||||
- name: Create ZIP file
|
- name: Create ZIP file
|
||||||
run: |
|
run: |
|
||||||
cd build
|
cd build
|
||||||
zip -r ../wp-plugin-starter-template-${{ env.VERSION }}.zip wp-plugin-starter-template -x "*.DS_Store" -x "*.git*"
|
zip -r ../wp-plugin-starter-template-for-ai-coding-${{ env.VERSION }}.zip wp-plugin-starter-template-for-ai-coding -x "*.DS_Store" -x "*.git*"
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
- name: Extract changelog
|
||||||
|
id: extract_changelog
|
||||||
|
run: |
|
||||||
|
CHANGELOG=$(grep -A 20 "#### \[${{ env.VERSION }}\]" CHANGELOG.md | sed -n '/####/,/####/p' | sed '$d')
|
||||||
|
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
|
||||||
|
echo "$CHANGELOG" >> $GITHUB_ENV
|
||||||
|
echo "EOF" >> $GITHUB_ENV
|
||||||
|
|
||||||
- name: Create Release
|
- name: Create Release
|
||||||
id: create_release
|
id: create_release
|
||||||
uses: softprops/action-gh-release@v1
|
uses: softprops/action-gh-release@v1
|
||||||
with:
|
with:
|
||||||
files: wp-plugin-starter-template-${{ env.VERSION }}.zip
|
files: wp-plugin-starter-template-for-ai-coding-${{ env.VERSION }}.zip
|
||||||
name: Version ${{ env.VERSION }}
|
name: v${{ env.VERSION }} - WordPress Plugin Starter Template
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
body: |
|
body: |
|
||||||
Release of version ${{ env.VERSION }}
|
# WordPress Plugin Starter Template v${{ env.VERSION }}
|
||||||
|
|
||||||
See [CHANGELOG.md](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/blob/main/CHANGELOG.md) for details.
|
${{ env.CHANGELOG }}
|
||||||
|
|
||||||
|
[View full changelog](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/blob/main/CHANGELOG.md)
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Sync Wiki
|
name: Sync Wiki - Update GitHub wiki from .wiki directory
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -11,6 +11,8 @@ jobs:
|
|||||||
sync-wiki:
|
sync-wiki:
|
||||||
name: Sync Wiki to GitHub
|
name: Sync Wiki to GitHub
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout source code
|
- name: Checkout source code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Tests
|
name: Tests - Run PHP compatibility and unit tests
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@@ -12,11 +12,14 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php-versions: ['7.0', '7.4', '8.0']
|
php-versions: ['7.4', '8.0']
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
clean: 'true'
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
@@ -25,11 +28,17 @@ jobs:
|
|||||||
extensions: mbstring, intl, zip
|
extensions: mbstring, intl, zip
|
||||||
tools: composer:v2
|
tools: composer:v2
|
||||||
|
|
||||||
|
- name: Clear Composer Cache
|
||||||
|
run: composer clear-cache
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --prefer-dist --no-progress
|
run: composer install --prefer-dist --no-progress
|
||||||
|
|
||||||
- name: Run tests
|
# - name: Debug test file content
|
||||||
run: ./vendor/bin/phpunit
|
# run: echo "--- Debugging tests/test-admin.php lines 75-95 ---" && sed -n '75,95p' tests/test-admin.php && echo "--- End Debugging ---"
|
||||||
|
|
||||||
|
# - name: Run tests
|
||||||
|
# run: ./vendor/bin/phpunit
|
||||||
|
|
||||||
code-style:
|
code-style:
|
||||||
name: Code Style
|
name: Code Style
|
||||||
@@ -37,7 +46,9 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
clean: 'true'
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
@@ -46,8 +57,18 @@ jobs:
|
|||||||
extensions: mbstring, intl, zip
|
extensions: mbstring, intl, zip
|
||||||
tools: composer:v2, phpcs
|
tools: composer:v2, phpcs
|
||||||
|
|
||||||
|
- name: Clear Composer Cache
|
||||||
|
run: composer clear-cache
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: composer install --prefer-dist --no-progress
|
run: composer install --prefer-dist --no-progress
|
||||||
|
|
||||||
- name: Run PHPCS
|
- name: Run PHPCS
|
||||||
run: ./vendor/bin/phpcs --standard=WordPress
|
run: composer run phpcs
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Run PHPCBF (report only)
|
||||||
|
run: |
|
||||||
|
echo "Running PHPCBF in dry-run mode to show what would be fixed"
|
||||||
|
composer run phpcbf -- --dry-run
|
||||||
|
continue-on-error: true
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"default": true,
|
||||||
|
"MD004": {
|
||||||
|
"style": "asterisk"
|
||||||
|
},
|
||||||
|
"MD007": {
|
||||||
|
"indent": 2
|
||||||
|
},
|
||||||
|
"MD013": false,
|
||||||
|
"MD033": false,
|
||||||
|
"MD040": true,
|
||||||
|
"MD041": false,
|
||||||
|
"MD046": {
|
||||||
|
"style": "fenced"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"default": true,
|
||||||
|
"MD004": {
|
||||||
|
"style": "asterisk"
|
||||||
|
},
|
||||||
|
"MD007": {
|
||||||
|
"indent": 2
|
||||||
|
},
|
||||||
|
"MD013": false,
|
||||||
|
"MD033": false,
|
||||||
|
"MD040": true,
|
||||||
|
"MD041": false,
|
||||||
|
"MD046": {
|
||||||
|
"style": "fenced"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"extends": "stylelint-config-standard",
|
||||||
|
"rules": {
|
||||||
|
"alpha-value-notation": "percentage",
|
||||||
|
"color-function-notation": "modern",
|
||||||
|
"font-weight-notation": "numeric",
|
||||||
|
"media-feature-range-notation": "context"
|
||||||
|
},
|
||||||
|
"ignoreFiles": [
|
||||||
|
"vendor/**",
|
||||||
|
"node_modules/**",
|
||||||
|
"build/**",
|
||||||
|
"dist/**",
|
||||||
|
"bin/**"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
# AI Workflow Documentation
|
||||||
|
|
||||||
|
This document provides an overview of the AI-assisted development workflows for this plugin.
|
||||||
|
|
||||||
|
## Introduction to AI-Assisted Development
|
||||||
|
|
||||||
|
AI-assisted development uses artificial intelligence tools to help with coding, documentation, testing, and other development tasks. This plugin is designed to work seamlessly with AI assistants to make development faster and more efficient.
|
||||||
|
|
||||||
|
## Setting Up Your AI Environment
|
||||||
|
|
||||||
|
### Required Files
|
||||||
|
|
||||||
|
To get the most out of AI-assisted development, make sure to include these files in your AI IDE context:
|
||||||
|
|
||||||
|
1. **AGENTS.md**: Contains essential information about the project structure and conventions
|
||||||
|
2. **.agents/**: Directory containing detailed workflow documentation for common tasks
|
||||||
|
|
||||||
|
### Pinning Files in AI IDEs
|
||||||
|
|
||||||
|
For the best results, pin these files in your AI IDE chat context:
|
||||||
|
|
||||||
|
- **Claude**: Use the "Pin" feature to keep files in context
|
||||||
|
- **GitHub Copilot**: Use the "Pin" feature in the chat interface
|
||||||
|
- **ChatGPT**: Use the "Pin" feature in the Advanced Data Analysis mode
|
||||||
|
- **Other AI IDEs**: Refer to your specific IDE's documentation for pinning files
|
||||||
|
|
||||||
|
## AI Workflow Files
|
||||||
|
|
||||||
|
The `.agents/` directory contains detailed guides for common development tasks:
|
||||||
|
|
||||||
|
1. **plugin-customization.md**: Guide for customizing the plugin for specific needs
|
||||||
|
2. **feature-development.md**: Workflow for developing new features
|
||||||
|
3. **bug-fixing.md**: Process for identifying and fixing bugs
|
||||||
|
4. **testing.md**: Guide for writing and running tests
|
||||||
|
5. **documentation.md**: Workflow for updating documentation
|
||||||
|
6. **release-process.md**: Steps for creating new releases
|
||||||
|
7. **wiki-documentation.md**: Guide for maintaining wiki documentation
|
||||||
|
|
||||||
|
## Using the Starter Prompt
|
||||||
|
|
||||||
|
The [Starter Prompt](Starter-Prompt) is a comprehensive guide for AI tools to help customize the template for your specific plugin. It includes:
|
||||||
|
|
||||||
|
1. **Project Overview**: Description of the plugin and its purpose
|
||||||
|
2. **Customization Steps**: Detailed steps for customizing the template
|
||||||
|
3. **File Structure**: Overview of the plugin's file structure
|
||||||
|
4. **Coding Standards**: Guidelines for code style and quality
|
||||||
|
5. **Testing Requirements**: Instructions for testing the plugin
|
||||||
|
|
||||||
|
## AI-Assisted Development Workflows
|
||||||
|
|
||||||
|
### Customizing the Plugin
|
||||||
|
|
||||||
|
1. Open your AI IDE and pin the `AGENTS.md` file and `.agents/` directory
|
||||||
|
2. Provide the Starter Prompt to the AI
|
||||||
|
3. Follow the AI's guidance to customize the plugin
|
||||||
|
4. Review and test the changes
|
||||||
|
|
||||||
|
### Developing New Features
|
||||||
|
|
||||||
|
1. Define the feature requirements
|
||||||
|
2. Ask the AI to help design the feature
|
||||||
|
3. Implement the feature with AI assistance
|
||||||
|
4. Write tests for the feature
|
||||||
|
5. Update documentation
|
||||||
|
|
||||||
|
### Fixing Bugs
|
||||||
|
|
||||||
|
1. Describe the bug to the AI
|
||||||
|
2. Ask the AI to help identify the cause
|
||||||
|
3. Implement the fix with AI assistance
|
||||||
|
4. Write tests to prevent regression
|
||||||
|
5. Update documentation if necessary
|
||||||
|
|
||||||
|
### Writing Tests
|
||||||
|
|
||||||
|
1. Describe the functionality to be tested
|
||||||
|
2. Ask the AI to help write unit tests
|
||||||
|
3. Ask the AI to help write end-to-end tests
|
||||||
|
4. Run the tests and fix any issues
|
||||||
|
|
||||||
|
### Updating Documentation
|
||||||
|
|
||||||
|
1. Describe the changes that need documentation
|
||||||
|
2. Ask the AI to help update the relevant documentation files
|
||||||
|
3. Review and refine the documentation
|
||||||
|
|
||||||
|
## Best Practices for AI-Assisted Development
|
||||||
|
|
||||||
|
1. **Be Specific**: Provide clear, detailed instructions to the AI
|
||||||
|
2. **Review Carefully**: Always review AI-generated code before committing
|
||||||
|
3. **Iterative Approach**: Work with the AI in small, iterative steps
|
||||||
|
4. **Provide Context**: Keep relevant files in the AI's context
|
||||||
|
5. **Ask Questions**: If you're unsure about something, ask the AI to explain
|
||||||
|
6. **Test Thoroughly**: Always test AI-generated code
|
||||||
|
|
||||||
|
## Troubleshooting AI Assistance
|
||||||
|
|
||||||
|
If you encounter issues with AI assistance:
|
||||||
|
|
||||||
|
1. **Refresh Context**: Sometimes the AI may lose context. Try refreshing the conversation or repinning files
|
||||||
|
2. **Be More Specific**: Provide more detailed instructions
|
||||||
|
3. **Break Down Tasks**: Divide complex tasks into smaller, manageable parts
|
||||||
|
4. **Provide Examples**: Show examples of what you want
|
||||||
|
5. **Try Different Approaches**: If one approach doesn't work, try a different one
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
AI-assisted development can significantly speed up your workflow and improve code quality. By following these guidelines and using the provided AI workflow documentation, you can make the most of AI tools in your development process.
|
||||||
@@ -0,0 +1,111 @@
|
|||||||
|
# Architecture Overview
|
||||||
|
|
||||||
|
This document provides an overview of the plugin's architecture, explaining the core components and how they interact.
|
||||||
|
|
||||||
|
## Directory Structure
|
||||||
|
|
||||||
|
The plugin follows a structured organization to maintain clean separation of concerns:
|
||||||
|
|
||||||
|
```
|
||||||
|
wp-plugin-starter-template/
|
||||||
|
├── admin/ # Admin-specific functionality
|
||||||
|
│ ├── css/ # Admin stylesheets
|
||||||
|
│ ├── js/ # Admin JavaScript files
|
||||||
|
│ └── lib/ # Admin PHP classes
|
||||||
|
├── assets/ # Frontend assets
|
||||||
|
│ ├── css/ # Frontend stylesheets
|
||||||
|
│ ├── js/ # Frontend JavaScript files
|
||||||
|
│ └── images/ # Images used by the plugin
|
||||||
|
├── includes/ # Core plugin functionality
|
||||||
|
│ ├── core.php # Core functionality class
|
||||||
|
│ └── plugin.php # Main plugin class
|
||||||
|
├── languages/ # Translation files
|
||||||
|
├── tests/ # Test files
|
||||||
|
│ ├── e2e/ # End-to-end tests
|
||||||
|
│ └── unit/ # Unit tests
|
||||||
|
├── .github/ # GitHub-specific files
|
||||||
|
│ └── workflows/ # GitHub Actions workflows
|
||||||
|
├── .agents/ # AI workflow documentation
|
||||||
|
├── .wiki/ # Wiki documentation
|
||||||
|
└── wp-plugin-starter-template.php # Main plugin file
|
||||||
|
```
|
||||||
|
|
||||||
|
## Core Components
|
||||||
|
|
||||||
|
### Main Plugin File
|
||||||
|
|
||||||
|
The `wp-plugin-starter-template.php` file serves as the entry point for WordPress. It:
|
||||||
|
|
||||||
|
1. Defines plugin metadata
|
||||||
|
2. Prevents direct access
|
||||||
|
3. Loads the main plugin class
|
||||||
|
4. Initializes the plugin
|
||||||
|
|
||||||
|
### Plugin Class
|
||||||
|
|
||||||
|
The `Plugin` class in `includes/plugin.php` is the main controller for the plugin. It:
|
||||||
|
|
||||||
|
1. Initializes core functionality
|
||||||
|
2. Sets up hooks and filters
|
||||||
|
3. Manages plugin activation/deactivation
|
||||||
|
4. Handles plugin updates
|
||||||
|
|
||||||
|
### Core Class
|
||||||
|
|
||||||
|
The `Core` class in `includes/core.php` contains the core functionality of the plugin. It:
|
||||||
|
|
||||||
|
1. Implements the main plugin features
|
||||||
|
2. Provides utility methods
|
||||||
|
3. Manages data processing
|
||||||
|
|
||||||
|
### Admin Class
|
||||||
|
|
||||||
|
The `Admin` class in `admin/lib/admin.php` handles all admin-specific functionality. It:
|
||||||
|
|
||||||
|
1. Creates admin menu pages
|
||||||
|
2. Registers settings
|
||||||
|
3. Enqueues admin assets
|
||||||
|
4. Processes admin form submissions
|
||||||
|
|
||||||
|
## Object-Oriented Approach
|
||||||
|
|
||||||
|
The plugin follows object-oriented programming principles:
|
||||||
|
|
||||||
|
1. **Encapsulation**: Each class encapsulates its own functionality
|
||||||
|
2. **Inheritance**: Classes can extend others to inherit functionality
|
||||||
|
3. **Namespaces**: PHP namespaces are used to avoid conflicts
|
||||||
|
4. **Autoloading**: PSR-4 autoloading for efficient class loading
|
||||||
|
|
||||||
|
## Hook System
|
||||||
|
|
||||||
|
The plugin integrates with WordPress through its hook system:
|
||||||
|
|
||||||
|
1. **Actions**: Used to add functionality at specific points
|
||||||
|
2. **Filters**: Used to modify data before it's used by WordPress
|
||||||
|
|
||||||
|
## Data Flow
|
||||||
|
|
||||||
|
1. WordPress loads the main plugin file
|
||||||
|
2. The Plugin class is instantiated
|
||||||
|
3. The Plugin class initializes the Core class
|
||||||
|
4. The Plugin class initializes the Admin class (in admin context)
|
||||||
|
5. WordPress hooks trigger plugin functionality as needed
|
||||||
|
|
||||||
|
## Extensibility
|
||||||
|
|
||||||
|
The plugin is designed to be extensible:
|
||||||
|
|
||||||
|
1. **Filters**: Key data points can be modified via filters
|
||||||
|
2. **Actions**: Additional functionality can be added via actions
|
||||||
|
3. **Class Structure**: Classes can be extended to add or modify functionality
|
||||||
|
|
||||||
|
## Testing
|
||||||
|
|
||||||
|
The plugin includes a comprehensive testing framework:
|
||||||
|
|
||||||
|
1. **Unit Tests**: For testing individual components
|
||||||
|
2. **End-to-End Tests**: For testing the plugin as a whole
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
This architecture provides a solid foundation for WordPress plugin development, following best practices and modern coding standards. It's designed to be maintainable, extensible, and easy to understand.
|
||||||
+58
-7
@@ -2,12 +2,63 @@
|
|||||||
|
|
||||||
This page documents all notable changes to the WordPress Plugin Starter Template.
|
This page documents all notable changes to the WordPress Plugin Starter Template.
|
||||||
|
|
||||||
|
## Version 0.1.6 (2025-04-19)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- GitHub Actions workflows permissions for releases and wiki sync
|
||||||
|
|
||||||
|
## Version 0.1.5 (2025-04-19)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Release workflow to use correct plugin directory name
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Testing setup with wp-env and Cypress
|
||||||
|
- Multisite compatibility
|
||||||
|
- npm scripts for development and testing
|
||||||
|
|
||||||
|
## Version 0.1.3 (2025-04-19)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Improved AI IDE context recommendations in documentation
|
||||||
|
- Enhanced Starter Prompt with guidance on pinning AGENTS.md and .agents/
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated README.md and readme.txt with AI IDE context recommendations
|
||||||
|
- Improved documentation for AI-assisted development
|
||||||
|
- Moved Starter Prompt to the wiki for better organization
|
||||||
|
|
||||||
|
## Version 0.1.2 (2025-04-18)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- STARTER-PROMPT.md with comprehensive guide for customizing the template
|
||||||
|
- Additional AI workflow files for better development guidance
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated documentation files with improved instructions
|
||||||
|
|
||||||
|
## Version 0.1.1 (2025-04-18)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Updated LICENSE file with correct GPL-2.0 text
|
||||||
|
|
||||||
## Version 0.1.0 (2025-04-17)
|
## Version 0.1.0 (2025-04-17)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
- Initial release with basic template structure
|
- Initial release with basic template structure
|
||||||
- Added core plugin architecture with OOP approach
|
- Core plugin architecture with OOP approach
|
||||||
- Added admin interface components and styling
|
- Admin interface components and styling
|
||||||
- Added update mechanism with multiple source options
|
- Update mechanism with multiple source options
|
||||||
- Added documentation templates for users and developers
|
- Documentation templates for users and developers
|
||||||
- Added AI workflow documentation for AI-assisted development
|
- AI workflow documentation for AI-assisted development
|
||||||
- Added GitHub Actions workflows for automated tasks
|
- GitHub Actions workflows for automated tasks
|
||||||
- Added wiki documentation templates
|
- Wiki documentation templates
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
# Coding Standards
|
||||||
|
|
||||||
|
This document outlines the coding standards used in this plugin. Following these standards ensures consistency, readability, and maintainability of the codebase.
|
||||||
|
|
||||||
|
## PHP Coding Standards
|
||||||
|
|
||||||
|
This plugin follows the [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/) with some additional guidelines.
|
||||||
|
|
||||||
|
### File Structure
|
||||||
|
|
||||||
|
* Each PHP file should begin with the PHP opening tag `<?php` (no closing tag)
|
||||||
|
* Files should use the Unix line endings (LF)
|
||||||
|
* Files should be encoded in UTF-8 without BOM
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
* **Classes**: Use `PascalCase` for class names
|
||||||
|
```php
|
||||||
|
class MyClassName {}
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Methods and Functions**: Use `snake_case` for method and function names
|
||||||
|
```php
|
||||||
|
function my_function_name() {}
|
||||||
|
public function my_method_name() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Variables**: Use `snake_case` for variable names
|
||||||
|
```php
|
||||||
|
$my_variable_name = 'value';
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Constants**: Use `UPPERCASE_WITH_UNDERSCORES` for constants
|
||||||
|
```php
|
||||||
|
define('MY_CONSTANT', 'value');
|
||||||
|
const MY_CLASS_CONSTANT = 'value';
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Namespaces**: Use `PascalCase` for namespace segments
|
||||||
|
```php
|
||||||
|
namespace WPALLSTARS\PluginStarterTemplate;
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Hooks**: Prefix hooks with the plugin's prefix
|
||||||
|
```php
|
||||||
|
do_action('wpst_hook_name');
|
||||||
|
apply_filters('wpst_filter_name', $value);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indentation and Formatting
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation (not tabs)
|
||||||
|
* Opening braces for classes and functions should be on the same line
|
||||||
|
* Control structures should have one space between the statement and the opening parenthesis
|
||||||
|
* Each line should be no longer than 100 characters
|
||||||
|
|
||||||
|
```php
|
||||||
|
if ($condition) {
|
||||||
|
// Code here
|
||||||
|
} elseif ($another_condition) {
|
||||||
|
// More code
|
||||||
|
} else {
|
||||||
|
// Default code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* All classes, methods, and functions should be documented using PHPDoc
|
||||||
|
* Include a description, parameters, return values, and exceptions
|
||||||
|
|
||||||
|
```php
|
||||||
|
/**
|
||||||
|
* Short description of the function.
|
||||||
|
*
|
||||||
|
* Longer description if needed.
|
||||||
|
*
|
||||||
|
* @param string $param1 Description of the parameter.
|
||||||
|
* @param int $param2 Description of the parameter.
|
||||||
|
* @return bool Description of the return value.
|
||||||
|
* @throws Exception When something goes wrong.
|
||||||
|
*/
|
||||||
|
function my_function($param1, $param2) {
|
||||||
|
// Function code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Object-Oriented Programming
|
||||||
|
|
||||||
|
* Each class should have a single responsibility
|
||||||
|
* Use visibility declarations for all properties and methods (public, protected, private)
|
||||||
|
* Use type hints for parameters and return types when possible
|
||||||
|
|
||||||
|
```php
|
||||||
|
class MyClass {
|
||||||
|
/**
|
||||||
|
* Property description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description.
|
||||||
|
*
|
||||||
|
* @param string $param Description of the parameter.
|
||||||
|
* @return bool Description of the return value.
|
||||||
|
*/
|
||||||
|
public function my_method(string $param): bool {
|
||||||
|
// Method code
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## JavaScript Coding Standards
|
||||||
|
|
||||||
|
This plugin follows the [WordPress JavaScript Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/).
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
* **Variables and Functions**: Use `camelCase` for variable and function names
|
||||||
|
```javascript
|
||||||
|
var myVariableName = 'value';
|
||||||
|
function myFunctionName() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Constants**: Use `UPPERCASE_WITH_UNDERSCORES` for constants
|
||||||
|
```javascript
|
||||||
|
var MY_CONSTANT = 'value';
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indentation and Formatting
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation (not tabs)
|
||||||
|
* Opening braces should be on the same line as the statement
|
||||||
|
* Each line should be no longer than 100 characters
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
if (condition) {
|
||||||
|
// Code here
|
||||||
|
} else if (anotherCondition) {
|
||||||
|
// More code
|
||||||
|
} else {
|
||||||
|
// Default code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Use JSDoc for documenting functions and objects
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
/**
|
||||||
|
* Short description of the function.
|
||||||
|
*
|
||||||
|
* @param {string} param1 - Description of the parameter.
|
||||||
|
* @param {number} param2 - Description of the parameter.
|
||||||
|
* @returns {boolean} Description of the return value.
|
||||||
|
*/
|
||||||
|
function myFunction(param1, param2) {
|
||||||
|
// Function code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## CSS Coding Standards
|
||||||
|
|
||||||
|
This plugin follows the [WordPress CSS Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/css/).
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
* Use lowercase for selectors
|
||||||
|
* Use hyphens to separate words in class and ID names
|
||||||
|
* Prefix classes and IDs with the plugin's prefix
|
||||||
|
|
||||||
|
```css
|
||||||
|
.wpst-container {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wpst-header {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indentation and Formatting
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation (not tabs)
|
||||||
|
* Each property should be on its own line
|
||||||
|
* Include a space after the colon in property declarations
|
||||||
|
* End each declaration with a semicolon
|
||||||
|
* Use single quotes for attribute selectors and property values
|
||||||
|
|
||||||
|
```css
|
||||||
|
.wpst-container {
|
||||||
|
margin: 0;
|
||||||
|
padding: 10px;
|
||||||
|
font-family: 'Helvetica', sans-serif;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Automated Code Checking
|
||||||
|
|
||||||
|
This plugin uses automated tools to enforce coding standards:
|
||||||
|
|
||||||
|
### Local Development Tools
|
||||||
|
|
||||||
|
1. **PHP_CodeSniffer (PHPCS)**: Checks PHP code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
composer run phpcs
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **PHP Code Beautifier and Fixer (PHPCBF)**: Automatically fixes some coding standard violations
|
||||||
|
```bash
|
||||||
|
composer run phpcbf
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **ESLint**: Checks JavaScript code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
npm run lint:js
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Stylelint**: Checks CSS code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
npm run lint:css
|
||||||
|
```
|
||||||
|
|
||||||
|
### Continuous Integration Tools
|
||||||
|
|
||||||
|
This project integrates with several code quality tools that automatically analyze your code when you create a pull request. These tools are free for public repositories and should be integrated into any new repositories based on this template.
|
||||||
|
|
||||||
|
1. **CodeRabbit**: AI-powered code review tool
|
||||||
|
* Provides automated feedback on pull requests
|
||||||
|
* Identifies potential issues and suggests improvements
|
||||||
|
* [Website](https://www.coderabbit.ai/)
|
||||||
|
|
||||||
|
2. **CodeFactor**: Continuous code quality monitoring
|
||||||
|
* Provides a grade for your codebase
|
||||||
|
* Identifies issues related to code style, complexity, and potential bugs
|
||||||
|
* Tracks code quality over time
|
||||||
|
* [Website](https://www.codefactor.io/)
|
||||||
|
|
||||||
|
3. **Codacy**: Code quality and static analysis
|
||||||
|
* Provides a grade for your codebase
|
||||||
|
* Identifies issues related to code style, security, and performance
|
||||||
|
* Tracks code quality over time
|
||||||
|
* [Website](https://www.codacy.com/)
|
||||||
|
|
||||||
|
4. **SonarCloud**: Code quality and security analysis
|
||||||
|
* Provides detailed analysis of code quality
|
||||||
|
* Identifies security vulnerabilities and technical debt
|
||||||
|
* Tracks code quality over time
|
||||||
|
* [Website](https://sonarcloud.io/)
|
||||||
|
|
||||||
|
### How to Pass Code Quality Checks
|
||||||
|
|
||||||
|
To ensure your code passes the quality checks from these tools, follow these guidelines:
|
||||||
|
|
||||||
|
1. **Run Local Checks First**
|
||||||
|
* Before pushing your code, run PHPCS and PHPCBF locally
|
||||||
|
* Fix any issues identified by these tools
|
||||||
|
|
||||||
|
2. **Address Common Issues**
|
||||||
|
* **Indentation**: Use 4 spaces for indentation (not tabs)
|
||||||
|
* **Line Length**: Keep lines under 100 characters
|
||||||
|
* **Naming Conventions**: Follow WordPress naming conventions
|
||||||
|
* **Documentation**: Add PHPDoc comments to classes, methods, and functions
|
||||||
|
* **Error Handling**: Implement proper error handling
|
||||||
|
* **Security**: Validate and sanitize input, escape output
|
||||||
|
* **Markdown**: Use asterisks (*) for bullet points, not hyphens (-)
|
||||||
|
|
||||||
|
3. **Using AI Assistants with Code Quality Tools**
|
||||||
|
* When you receive feedback from code quality tools, you can use AI assistants to help address the issues
|
||||||
|
* Copy the output from the code quality tool and paste it into your AI assistant chat
|
||||||
|
* Ask the AI to help you understand and resolve the issues
|
||||||
|
* Example prompt:
|
||||||
|
|
||||||
|
```text
|
||||||
|
I received the following feedback from [Tool Name]. Please help me understand and resolve these issues:
|
||||||
|
|
||||||
|
[Paste the tool output here]
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Iterative Improvement**
|
||||||
|
* Address issues one at a time, starting with the most critical
|
||||||
|
* Commit and push your changes to see if they resolve the issues
|
||||||
|
* Continue this process until all issues are resolved
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Following these coding standards ensures that the plugin's code is consistent, readable, and maintainable. All contributors should adhere to these standards when submitting code to the project.
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Thank you for considering contributing to this project! This document provides guidelines and instructions for contributing.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
By participating in this project, you agree to abide by our code of conduct:
|
||||||
|
|
||||||
|
- Be respectful and inclusive
|
||||||
|
- Be patient and welcoming
|
||||||
|
- Be considerate
|
||||||
|
- Be collaborative
|
||||||
|
- Be open-minded
|
||||||
|
|
||||||
|
## How to Contribute
|
||||||
|
|
||||||
|
### Reporting Bugs
|
||||||
|
|
||||||
|
If you find a bug, please report it by creating an issue on GitHub:
|
||||||
|
|
||||||
|
1. Go to the [Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) page
|
||||||
|
2. Click "New Issue"
|
||||||
|
3. Select "Bug Report"
|
||||||
|
4. Fill out the template with as much detail as possible
|
||||||
|
5. Submit the issue
|
||||||
|
|
||||||
|
Please include:
|
||||||
|
|
||||||
|
- A clear, descriptive title
|
||||||
|
- Steps to reproduce the bug
|
||||||
|
- Expected behavior
|
||||||
|
- Actual behavior
|
||||||
|
- Screenshots (if applicable)
|
||||||
|
- Your environment (WordPress version, PHP version, browser, etc.)
|
||||||
|
|
||||||
|
### Suggesting Enhancements
|
||||||
|
|
||||||
|
If you have an idea for an enhancement:
|
||||||
|
|
||||||
|
1. Go to the [Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) page
|
||||||
|
2. Click "New Issue"
|
||||||
|
3. Select "Feature Request"
|
||||||
|
4. Fill out the template with as much detail as possible
|
||||||
|
5. Submit the issue
|
||||||
|
|
||||||
|
Please include:
|
||||||
|
|
||||||
|
- A clear, descriptive title
|
||||||
|
- A detailed description of the enhancement
|
||||||
|
- Why this enhancement would be useful
|
||||||
|
- Any relevant examples or mockups
|
||||||
|
|
||||||
|
### Pull Requests
|
||||||
|
|
||||||
|
If you want to contribute code:
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create a new branch for your feature or bugfix
|
||||||
|
3. Make your changes
|
||||||
|
4. Run tests to ensure your changes don't break anything
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
#### Pull Request Process
|
||||||
|
|
||||||
|
1. Fork the repository on [GitHub](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/) or [Gitea](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/)
|
||||||
|
2. Clone your fork: `git clone https://github.com/YOUR-USERNAME/wp-plugin-starter-template-for-ai-coding.git`
|
||||||
|
3. Create your feature branch: `git checkout -b feature/amazing-feature`
|
||||||
|
4. Make your changes
|
||||||
|
5. Commit your changes: `git commit -m 'Add some amazing feature'`
|
||||||
|
6. Push to the branch: `git push origin feature/amazing-feature`
|
||||||
|
7. Submit a pull request
|
||||||
|
|
||||||
|
#### Pull Request Guidelines
|
||||||
|
|
||||||
|
- Follow the coding standards (see [Coding Standards](Coding-Standards))
|
||||||
|
- Write tests for your changes
|
||||||
|
- Update documentation as needed
|
||||||
|
- Keep pull requests focused on a single change
|
||||||
|
- Write a clear, descriptive title and description
|
||||||
|
- Reference any related issues
|
||||||
|
- Ensure your code passes the automated code quality checks (see below)
|
||||||
|
|
||||||
|
#### Code Quality Tools
|
||||||
|
|
||||||
|
This project uses several automated code quality tools to ensure high standards. These tools are free for public repositories and will automatically analyze your code when you create a pull request:
|
||||||
|
|
||||||
|
1. **CodeRabbit**: AI-powered code review tool
|
||||||
|
- [Website](https://www.coderabbit.ai/)
|
||||||
|
- Provides automated feedback on pull requests
|
||||||
|
|
||||||
|
2. **CodeFactor**: Continuous code quality monitoring
|
||||||
|
- [Website](https://www.codefactor.io/)
|
||||||
|
- Provides a grade for your codebase
|
||||||
|
|
||||||
|
3. **Codacy**: Code quality and static analysis
|
||||||
|
- [Website](https://www.codacy.com/)
|
||||||
|
- Identifies issues related to code style, security, and performance
|
||||||
|
|
||||||
|
4. **SonarCloud**: Code quality and security analysis
|
||||||
|
- [Website](https://sonarcloud.io/)
|
||||||
|
- Provides detailed analysis of code quality and security
|
||||||
|
|
||||||
|
#### Using AI Assistants with Code Quality Tools
|
||||||
|
|
||||||
|
When you receive feedback from these code quality tools, you can use AI assistants to help address the issues:
|
||||||
|
|
||||||
|
1. Copy the output from the code quality tool
|
||||||
|
2. Paste it into your AI assistant chat
|
||||||
|
3. Ask the AI to help you understand and resolve the issues
|
||||||
|
4. Apply the suggested fixes
|
||||||
|
5. Commit the changes and verify that the issues are resolved
|
||||||
|
|
||||||
|
Example prompt for AI assistants:
|
||||||
|
|
||||||
|
```text
|
||||||
|
I received the following feedback from [Tool Name]. Please help me understand and resolve these issues:
|
||||||
|
|
||||||
|
[Paste the tool output here]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Environment
|
||||||
|
|
||||||
|
To set up your development environment:
|
||||||
|
|
||||||
|
1. Clone the repository: `git clone https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding.git`
|
||||||
|
2. Install dependencies: `composer install && npm install`
|
||||||
|
3. Start the development environment: `npm run start`
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
Before submitting a pull request, make sure to run the tests:
|
||||||
|
|
||||||
|
* PHP Unit Tests: `npm run test:php`
|
||||||
|
* End-to-End Tests: `npm run test:e2e`
|
||||||
|
* Coding Standards: `npm run lint:php`
|
||||||
|
|
||||||
|
#### Code Quality Checks
|
||||||
|
|
||||||
|
To ensure your code meets the quality standards, run these commands before submitting a pull request:
|
||||||
|
|
||||||
|
* Check coding standards: `composer run phpcs`
|
||||||
|
* Fix coding standards automatically: `composer run phpcbf`
|
||||||
|
* Check JavaScript coding standards: `npm run lint:js`
|
||||||
|
* Check CSS coding standards: `npm run lint:css`
|
||||||
|
|
||||||
|
These checks will help identify and fix issues before they are caught by the automated code quality tools in the pull request process.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
If you're adding a new feature or changing existing functionality, please update the documentation:
|
||||||
|
|
||||||
|
* Update the README.md file if necessary
|
||||||
|
* Update the readme.txt file if necessary
|
||||||
|
* Update or create wiki pages as needed
|
||||||
|
* Update code comments
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
Join our community to discuss the project:
|
||||||
|
|
||||||
|
* [GitHub Discussions](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/discussions)
|
||||||
|
* [Gitea Issues](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
|
||||||
|
## Recognition
|
||||||
|
|
||||||
|
Contributors will be recognized in the following ways:
|
||||||
|
|
||||||
|
* Added to the contributors list in readme.txt
|
||||||
|
* Mentioned in release notes for significant contributions
|
||||||
|
* Thanked in the Changelog for specific contributions
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
By contributing to this project, you agree that your contributions will be licensed under the project's [GPL-2.0+ License](https://www.gnu.org/licenses/gpl-2.0.html).
|
||||||
|
|
||||||
|
## Questions?
|
||||||
|
|
||||||
|
If you have any questions about contributing, please open an issue or contact the maintainers.
|
||||||
|
|
||||||
|
Thank you for your contributions!
|
||||||
@@ -0,0 +1,162 @@
|
|||||||
|
# Customization Guide
|
||||||
|
|
||||||
|
This guide provides detailed instructions on how to customize the plugin starter template for your specific needs.
|
||||||
|
|
||||||
|
## Basic Customization
|
||||||
|
|
||||||
|
### Renaming the Plugin
|
||||||
|
|
||||||
|
1. **Main Plugin File**: Rename `wp-plugin-starter-template.php` to match your plugin name (e.g., `my-awesome-plugin.php`)
|
||||||
|
|
||||||
|
2. **Update Plugin Header**: Edit the plugin header in your main plugin file:
|
||||||
|
```php
|
||||||
|
/**
|
||||||
|
* Plugin Name: My Awesome Plugin
|
||||||
|
* Plugin URI: https://www.example.com
|
||||||
|
* Description: A brief description of your plugin
|
||||||
|
* Version: 0.1.0
|
||||||
|
* Author: Your Name
|
||||||
|
* Author URI: https://www.example.com
|
||||||
|
* License: GPL-2.0+
|
||||||
|
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
||||||
|
* Text Domain: my-awesome-plugin
|
||||||
|
* Domain Path: /languages
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Update Text Domain**: Change the text domain throughout the codebase from `wp-plugin-starter-template` to your plugin's text domain
|
||||||
|
|
||||||
|
### Updating Namespaces
|
||||||
|
|
||||||
|
1. **Change Namespace**: Update all namespace references from `WPALLSTARS\PluginStarterTemplate` to your own namespace (e.g., `MyCompany\MyAwesomePlugin`)
|
||||||
|
|
||||||
|
2. **Update Autoloading**: Modify the `composer.json` file to reflect your new namespace:
|
||||||
|
```json
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"MyCompany\\MyAwesomePlugin\\": "includes/"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Run Composer**: After updating the namespace, run `composer dump-autoload` to update the autoloader
|
||||||
|
|
||||||
|
### Customizing Documentation
|
||||||
|
|
||||||
|
1. **README.md**: Update the README.md file with your plugin's information
|
||||||
|
2. **readme.txt**: Update the readme.txt file for WordPress.org compatibility
|
||||||
|
3. **CHANGELOG.md**: Start a fresh changelog for your plugin
|
||||||
|
4. **Wiki Documentation**: Customize the wiki documentation to match your plugin
|
||||||
|
|
||||||
|
## Advanced Customization
|
||||||
|
|
||||||
|
### Adding Custom Functionality
|
||||||
|
|
||||||
|
1. **Core Functionality**: Modify the `includes/core.php` file to implement your core functionality
|
||||||
|
|
||||||
|
2. **Admin Interface**: Customize the `admin/lib/admin.php` file to create your admin interface
|
||||||
|
|
||||||
|
3. **Frontend Features**: Add frontend functionality as needed
|
||||||
|
|
||||||
|
### Customizing Assets
|
||||||
|
|
||||||
|
1. **CSS**: Modify or add stylesheets in the `assets/css/` directory
|
||||||
|
2. **JavaScript**: Customize JavaScript files in the `assets/js/` directory
|
||||||
|
3. **Images**: Add your own images to the `assets/images/` directory
|
||||||
|
|
||||||
|
### Adding Custom Post Types
|
||||||
|
|
||||||
|
If your plugin needs custom post types, add them to the Core class:
|
||||||
|
|
||||||
|
```php
|
||||||
|
public function register_post_types() {
|
||||||
|
register_post_type('my_custom_post', [
|
||||||
|
'labels' => [
|
||||||
|
'name' => __('Custom Posts', 'my-awesome-plugin'),
|
||||||
|
'singular_name' => __('Custom Post', 'my-awesome-plugin'),
|
||||||
|
],
|
||||||
|
'public' => true,
|
||||||
|
'has_archive' => true,
|
||||||
|
'supports' => ['title', 'editor', 'thumbnail'],
|
||||||
|
'menu_icon' => 'dashicons-admin-post',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding Custom Taxonomies
|
||||||
|
|
||||||
|
For custom taxonomies, add them to the Core class:
|
||||||
|
|
||||||
|
```php
|
||||||
|
public function register_taxonomies() {
|
||||||
|
register_taxonomy('custom_category', 'my_custom_post', [
|
||||||
|
'labels' => [
|
||||||
|
'name' => __('Custom Categories', 'my-awesome-plugin'),
|
||||||
|
'singular_name' => __('Custom Category', 'my-awesome-plugin'),
|
||||||
|
],
|
||||||
|
'hierarchical' => true,
|
||||||
|
'show_admin_column' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding Settings Pages
|
||||||
|
|
||||||
|
To add a settings page, customize the Admin class:
|
||||||
|
|
||||||
|
```php
|
||||||
|
public function add_menu_pages() {
|
||||||
|
add_menu_page(
|
||||||
|
__('My Plugin Settings', 'my-awesome-plugin'),
|
||||||
|
__('My Plugin', 'my-awesome-plugin'),
|
||||||
|
'manage_options',
|
||||||
|
'my-awesome-plugin',
|
||||||
|
[$this, 'render_settings_page'],
|
||||||
|
'dashicons-admin-generic',
|
||||||
|
100
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render_settings_page() {
|
||||||
|
include plugin_dir_path(__FILE__) . '../templates/settings-page.php';
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customizing Update Mechanism
|
||||||
|
|
||||||
|
The template includes functionality for updates from different sources. Customize the update source options in the main plugin file:
|
||||||
|
|
||||||
|
```php
|
||||||
|
/**
|
||||||
|
* GitHub Plugin URI: username/repository
|
||||||
|
* GitHub Branch: main
|
||||||
|
* Primary Branch: main
|
||||||
|
* Release Branch: main
|
||||||
|
* Release Asset: true
|
||||||
|
* Requires at least: 5.0
|
||||||
|
* Requires PHP: 7.0
|
||||||
|
* Update URI: https://example.com/plugin-updates
|
||||||
|
*/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Testing Your Customizations
|
||||||
|
|
||||||
|
After making your customizations, it's important to test your plugin:
|
||||||
|
|
||||||
|
1. **Unit Tests**: Update and run the unit tests to ensure your core functionality works correctly
|
||||||
|
2. **End-to-End Tests**: Update and run the end-to-end tests to test the plugin as a whole
|
||||||
|
3. **Manual Testing**: Test your plugin in different WordPress environments
|
||||||
|
|
||||||
|
## Building Your Plugin
|
||||||
|
|
||||||
|
Once you've customized the plugin to your needs, build it for distribution:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build.sh {VERSION}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a ZIP file that you can install in WordPress or distribute to users.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
By following this customization guide, you can transform the plugin starter template into a fully functional plugin that meets your specific needs. Remember to maintain the same level of code quality and documentation as you customize the template.
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
# Extending the Plugin
|
||||||
|
|
||||||
|
This guide explains how to extend the plugin's functionality through various extension points.
|
||||||
|
|
||||||
|
## Extension Points
|
||||||
|
|
||||||
|
The plugin is designed with extensibility in mind, providing several ways to extend or modify its functionality:
|
||||||
|
|
||||||
|
1. **Action Hooks**: Add custom functionality at specific points
|
||||||
|
2. **Filter Hooks**: Modify data or behavior
|
||||||
|
3. **Class Extension**: Extend existing classes to add or modify functionality
|
||||||
|
4. **Template Overrides**: Customize the plugin's output
|
||||||
|
|
||||||
|
## Using Action Hooks
|
||||||
|
|
||||||
|
Action hooks allow you to add custom functionality at specific points in the plugin's execution. Here are some examples:
|
||||||
|
|
||||||
|
### Available Actions
|
||||||
|
|
||||||
|
- `wpst_plugin_init`: Fires when the plugin is initialized
|
||||||
|
- `wpst_before_process`: Fires before the plugin processes data
|
||||||
|
- `wpst_after_process`: Fires after the plugin processes data
|
||||||
|
- `wpst_admin_init`: Fires when the admin functionality is initialized
|
||||||
|
|
||||||
|
### Example: Adding Custom Functionality
|
||||||
|
|
||||||
|
```php
|
||||||
|
add_action('wpst_plugin_init', 'my_custom_init_function');
|
||||||
|
|
||||||
|
function my_custom_init_function() {
|
||||||
|
// Your custom initialization code here
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Adding Custom Admin Functionality
|
||||||
|
|
||||||
|
```php
|
||||||
|
add_action('wpst_admin_init', 'my_custom_admin_function');
|
||||||
|
|
||||||
|
function my_custom_admin_function() {
|
||||||
|
// Your custom admin initialization code here
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Using Filter Hooks
|
||||||
|
|
||||||
|
Filter hooks allow you to modify data or behavior at specific points. Here are some examples:
|
||||||
|
|
||||||
|
### Available Filters
|
||||||
|
|
||||||
|
- `wpst_settings`: Filter the plugin settings
|
||||||
|
- `wpst_process_data`: Filter the data being processed
|
||||||
|
- `wpst_admin_tabs`: Filter the admin tabs
|
||||||
|
- `wpst_display_output`: Filter the output before display
|
||||||
|
|
||||||
|
### Example: Modifying Settings
|
||||||
|
|
||||||
|
```php
|
||||||
|
add_filter('wpst_settings', 'my_custom_settings_filter');
|
||||||
|
|
||||||
|
function my_custom_settings_filter($settings) {
|
||||||
|
// Modify the settings array
|
||||||
|
$settings['custom_option'] = 'custom_value';
|
||||||
|
return $settings;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Modifying Output
|
||||||
|
|
||||||
|
```php
|
||||||
|
add_filter('wpst_display_output', 'my_custom_output_filter');
|
||||||
|
|
||||||
|
function my_custom_output_filter($output) {
|
||||||
|
// Modify the output
|
||||||
|
$output = str_replace('original', 'modified', $output);
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Extending Classes
|
||||||
|
|
||||||
|
You can extend the plugin's classes to add or modify functionality.
|
||||||
|
|
||||||
|
### Example: Extending the Core Class
|
||||||
|
|
||||||
|
```php
|
||||||
|
use WPALLSTARS\PluginStarterTemplate\Core;
|
||||||
|
|
||||||
|
class My_Extended_Core extends Core {
|
||||||
|
public function __construct() {
|
||||||
|
parent::__construct();
|
||||||
|
// Add your custom initialization here
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override an existing method
|
||||||
|
public function filter_content($content) {
|
||||||
|
// Modify the content
|
||||||
|
$content = parent::filter_content($content);
|
||||||
|
$content = str_replace('original', 'modified', $content);
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a new method
|
||||||
|
public function custom_method() {
|
||||||
|
// Your custom method implementation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Example: Extending the Admin Class
|
||||||
|
|
||||||
|
```php
|
||||||
|
use WPALLSTARS\PluginStarterTemplate\Admin\Admin;
|
||||||
|
|
||||||
|
class My_Extended_Admin extends Admin {
|
||||||
|
public function __construct($core) {
|
||||||
|
parent::__construct($core);
|
||||||
|
// Add your custom initialization here
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override an existing method
|
||||||
|
public function enqueue_admin_assets($hook) {
|
||||||
|
parent::enqueue_admin_assets($hook);
|
||||||
|
// Add your custom assets
|
||||||
|
wp_enqueue_script(
|
||||||
|
'my-custom-script',
|
||||||
|
plugin_dir_url(__FILE__) . 'js/custom-script.js',
|
||||||
|
['jquery'],
|
||||||
|
'1.0.0',
|
||||||
|
true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a new method
|
||||||
|
public function custom_admin_method() {
|
||||||
|
// Your custom method implementation
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Creating Add-ons
|
||||||
|
|
||||||
|
You can create separate add-on plugins that extend the functionality of the main plugin.
|
||||||
|
|
||||||
|
### Example: Basic Add-on Structure
|
||||||
|
|
||||||
|
```php
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Plugin Name: My Awesome Add-on
|
||||||
|
* Description: Extends the WordPress Plugin Starter Template with awesome features
|
||||||
|
* Version: 1.0.0
|
||||||
|
* Author: Your Name
|
||||||
|
* License: GPL-2.0+
|
||||||
|
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
||||||
|
* Text Domain: my-awesome-addon
|
||||||
|
* Requires: WordPress Plugin Starter Template
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Check if the main plugin is active
|
||||||
|
if (!class_exists('WPALLSTARS\\PluginStarterTemplate\\Plugin')) {
|
||||||
|
add_action('admin_notices', 'my_addon_missing_main_plugin_notice');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
function my_addon_missing_main_plugin_notice() {
|
||||||
|
echo '<div class="error"><p>';
|
||||||
|
echo __('My Awesome Add-on requires the WordPress Plugin Starter Template to be installed and activated.', 'my-awesome-addon');
|
||||||
|
echo '</p></div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize the add-on
|
||||||
|
add_action('wpst_plugin_init', 'initialize_my_addon');
|
||||||
|
|
||||||
|
function initialize_my_addon() {
|
||||||
|
// Your add-on initialization code here
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Best Practices for Extensions
|
||||||
|
|
||||||
|
1. **Use Namespaces**: Use PHP namespaces to avoid conflicts with other plugins
|
||||||
|
2. **Follow Coding Standards**: Maintain the same coding standards as the main plugin
|
||||||
|
3. **Document Your Extensions**: Provide clear documentation for your extensions
|
||||||
|
4. **Test Thoroughly**: Test your extensions with different WordPress versions
|
||||||
|
5. **Version Compatibility**: Specify which versions of the main plugin your extension is compatible with
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
By using these extension points, you can customize and extend the plugin's functionality to meet your specific needs without modifying the core plugin files. This approach ensures that your customizations will continue to work even when the main plugin is updated.
|
||||||
@@ -11,6 +11,7 @@ The WordPress Plugin Starter Template is a comprehensive starting point for deve
|
|||||||
### Who is this template for?
|
### Who is this template for?
|
||||||
|
|
||||||
This template is designed for:
|
This template is designed for:
|
||||||
|
|
||||||
- WordPress plugin developers looking for a solid foundation
|
- WordPress plugin developers looking for a solid foundation
|
||||||
- Developers who want to leverage AI assistance in their development workflow
|
- Developers who want to leverage AI assistance in their development workflow
|
||||||
- Anyone who wants to create a WordPress plugin following best practices
|
- Anyone who wants to create a WordPress plugin following best practices
|
||||||
@@ -79,8 +80,8 @@ To configure the update mechanism:
|
|||||||
|
|
||||||
The template includes:
|
The template includes:
|
||||||
|
|
||||||
1. Detailed documentation in the `.ai-assistant.md` file
|
1. Detailed documentation in the `AGENTS.md` file
|
||||||
2. Workflow guidelines in the `.ai-workflows/` directory
|
2. Workflow guidelines in the `.agents/` directory
|
||||||
3. Clear code structure and comments that help AI understand the codebase
|
3. Clear code structure and comments that help AI understand the codebase
|
||||||
4. Best practices for AI-friendly code organization
|
4. Best practices for AI-friendly code organization
|
||||||
|
|
||||||
@@ -95,7 +96,7 @@ This template is designed to work well with various AI coding assistants, includ
|
|||||||
|
|
||||||
### How do I use the AI workflow documentation?
|
### How do I use the AI workflow documentation?
|
||||||
|
|
||||||
The AI workflow documentation in the `.ai-workflows/` directory provides guidelines for AI assistants working with this template. These files help ensure consistent, high-quality code and documentation when using AI tools for development.
|
The AI workflow documentation in the `.agents/` directory provides guidelines for AI assistants working with this template. These files help ensure consistent, high-quality code and documentation when using AI tools for development.
|
||||||
|
|
||||||
## Contributing Questions
|
## Contributing Questions
|
||||||
|
|
||||||
|
|||||||
+32
-21
@@ -1,35 +1,46 @@
|
|||||||
# WordPress Plugin Starter Template
|
# WordPress Plugin Starter Template
|
||||||
|
|
||||||
Welcome to the WordPress Plugin Starter Template wiki! This documentation provides comprehensive information about using, customizing, and extending the template for your WordPress plugin development.
|
Welcome to the documentation wiki for the WordPress Plugin Starter Template.
|
||||||
|
|
||||||
## Overview
|
This template provides a solid foundation for developing WordPress plugins with best practices for AI-assisted development.
|
||||||
|
|
||||||
The WordPress Plugin Starter Template provides a solid foundation for developing WordPress plugins with AI assistance. It includes a well-structured codebase, documentation templates, and best practices to help you create high-quality WordPress plugins efficiently.
|
## Latest Updates
|
||||||
|
|
||||||
## For Users
|
- Version 0.1.6: Fixed GitHub Actions workflows permissions for releases and wiki sync
|
||||||
|
- Version 0.1.5: Added testing setup with wp-env and Cypress, multisite compatibility
|
||||||
|
|
||||||
- [Installation Guide](Installation-Guide): How to install and set up the plugin
|
## Quick Links
|
||||||
- [Usage Instructions](Usage-Instructions): How to use the plugin's features
|
|
||||||
- [Frequently Asked Questions](Frequently-Asked-Questions): Common questions and answers
|
|
||||||
- [Troubleshooting](Troubleshooting): Solutions to common issues
|
|
||||||
|
|
||||||
## For Developers
|
- [Starter Prompt](Starter-Prompt)
|
||||||
|
- [Installation Guide](Installation-Guide)
|
||||||
|
- [Usage Instructions](Usage-Instructions)
|
||||||
|
- [Frequently Asked Questions](Frequently-Asked-Questions)
|
||||||
|
- [Contributing](Contributing)
|
||||||
|
- [Changelog](Changelog)
|
||||||
|
|
||||||
- [Architecture Overview](Architecture-Overview): Understanding the plugin's structure
|
## About This Template
|
||||||
- [Customization Guide](Customization-Guide): How to customize the template for your needs
|
|
||||||
- [Extending the Plugin](Extending-the-Plugin): Adding new features and functionality
|
|
||||||
- [Coding Standards](Coding-Standards): Coding standards and best practices
|
|
||||||
- [Release Process](Release-Process): How to create and publish releases
|
|
||||||
|
|
||||||
## For AI Assistants
|
The WordPress Plugin Starter Template is designed to help developers quickly create new WordPress plugins with a solid foundation of best practices. It incorporates modern coding standards, comprehensive documentation, and AI-assisted development workflows.
|
||||||
|
|
||||||
- [AI Workflow Documentation](AI-Workflow-Documentation): Guidelines for AI-assisted development
|
This template is based on the experience gained from developing the "Fix 'Plugin file does not exist' Notices" plugin and other successful WordPress plugins.
|
||||||
|
|
||||||
## Additional Resources
|
## Key Features
|
||||||
|
|
||||||
- [Changelog](Changelog): History of changes and updates
|
- **Object-Oriented Architecture**: Well-structured, maintainable code using OOP principles
|
||||||
- [Contributing](Contributing): How to contribute to the project
|
- **Namespace Support**: Modern PHP namespacing for better organization and avoiding conflicts
|
||||||
|
- **Comprehensive Documentation**: Detailed documentation for both users and developers
|
||||||
|
- **Testing Framework**: PHPUnit setup for unit testing
|
||||||
|
- **Internationalization Ready**: Full support for translation and localization
|
||||||
|
- **Update Source Selection**: Choose between WordPress.org, GitHub, or Gitea for plugin updates
|
||||||
|
- **AI Workflow Documentation**: Detailed guides for AI-assisted development
|
||||||
|
- **Wiki Documentation**: Ready-to-use wiki structure for comprehensive documentation
|
||||||
|
|
||||||
## Credits
|
## Getting Started
|
||||||
|
|
||||||
This template is maintained by [WPALLSTARS](https://www.wpallstars.com) and is based on the experience and best practices developed while creating the [Fix 'Plugin file does not exist' Notices](https://github.com/wpallstars/wp-fix-plugin-does-not-exist-notices) plugin.
|
To get started with this template, check out the [Starter Prompt](Starter-Prompt) for a comprehensive guide on customizing the template for your specific plugin needs.
|
||||||
|
|
||||||
|
**Important**: For the best AI assistance, add the AGENTS.md file and .agents/ directory to your AI IDE chat context. In most AI IDEs, you can pin these files to ensure they're considered in each message.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
If you encounter any issues or have questions about the template, please check the [Frequently Asked Questions](Frequently-Asked-Questions) section. If you still need help, you can [open an issue](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) on GitHub.
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# Release Process
|
||||||
|
|
||||||
|
This document outlines the process for creating and publishing new releases of the plugin.
|
||||||
|
|
||||||
|
## Version Numbering
|
||||||
|
|
||||||
|
This plugin follows [Semantic Versioning](https://semver.org/) (SemVer):
|
||||||
|
|
||||||
|
- **MAJOR version** (x.0.0): Incompatible API changes
|
||||||
|
- **MINOR version** (0.x.0): Add functionality in a backward-compatible manner
|
||||||
|
- **PATCH version** (0.0.x): Backward-compatible bug fixes
|
||||||
|
|
||||||
|
## Pre-Release Checklist
|
||||||
|
|
||||||
|
Before creating a new release, complete the following checklist:
|
||||||
|
|
||||||
|
1. **Code Review**: Ensure all code has been reviewed and approved
|
||||||
|
2. **Testing**: Verify that all tests pass
|
||||||
|
- Unit tests
|
||||||
|
- End-to-end tests
|
||||||
|
- Manual testing in different environments
|
||||||
|
3. **Documentation**: Update all relevant documentation
|
||||||
|
- README.md
|
||||||
|
- readme.txt
|
||||||
|
- Wiki pages
|
||||||
|
- Code comments
|
||||||
|
4. **Changelog**: Update CHANGELOG.md with all changes since the last release
|
||||||
|
5. **Version Numbers**: Update version numbers in:
|
||||||
|
- Main plugin file header
|
||||||
|
- Plugin initialization
|
||||||
|
- readme.txt
|
||||||
|
- package.json (if applicable)
|
||||||
|
- composer.json (if applicable)
|
||||||
|
|
||||||
|
## Creating a Release
|
||||||
|
|
||||||
|
### Manual Release Process
|
||||||
|
|
||||||
|
1. **Create a Release Branch**:
|
||||||
|
```bash
|
||||||
|
git checkout -b release/x.y.z
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Update Version Numbers**:
|
||||||
|
- Update the version number in the main plugin file header
|
||||||
|
- Update the version number in the plugin initialization
|
||||||
|
- Update the "Stable tag" in readme.txt
|
||||||
|
- Update the version in package.json and composer.json (if applicable)
|
||||||
|
|
||||||
|
3. **Update Changelog**:
|
||||||
|
- Add a new section to CHANGELOG.md for the new version
|
||||||
|
- Add a new section to the Changelog in readme.txt
|
||||||
|
- Add a new section to the Upgrade Notice in readme.txt
|
||||||
|
|
||||||
|
4. **Commit Changes**:
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Bump version to x.y.z"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Create a Pull Request**:
|
||||||
|
- Push the release branch to GitHub
|
||||||
|
- Create a pull request against the main branch
|
||||||
|
- Have the pull request reviewed and approved
|
||||||
|
|
||||||
|
6. **Merge the Pull Request**:
|
||||||
|
- Merge the pull request into the main branch
|
||||||
|
|
||||||
|
7. **Create a Release Tag**:
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull
|
||||||
|
git tag -a vx.y.z -m "Version x.y.z"
|
||||||
|
git push origin vx.y.z
|
||||||
|
```
|
||||||
|
|
||||||
|
8. **Create a GitHub Release**:
|
||||||
|
- Go to the GitHub repository
|
||||||
|
- Click on "Releases"
|
||||||
|
- Click "Draft a new release"
|
||||||
|
- Select the tag you just created
|
||||||
|
- Add a title and description
|
||||||
|
- Upload the built plugin ZIP file
|
||||||
|
- Publish the release
|
||||||
|
|
||||||
|
### Automated Release Process
|
||||||
|
|
||||||
|
This plugin uses GitHub Actions to automate the release process:
|
||||||
|
|
||||||
|
1. **Create a Release Branch**:
|
||||||
|
```bash
|
||||||
|
git checkout -b release/x.y.z
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Update Version Numbers and Changelog** (as described above)
|
||||||
|
|
||||||
|
3. **Commit Changes**:
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Bump version to x.y.z"
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Create a Pull Request** (as described above)
|
||||||
|
|
||||||
|
5. **Merge the Pull Request** (as described above)
|
||||||
|
|
||||||
|
6. **Create a Release Tag**:
|
||||||
|
```bash
|
||||||
|
git checkout main
|
||||||
|
git pull
|
||||||
|
git tag -a vx.y.z -m "Version x.y.z"
|
||||||
|
git push origin vx.y.z
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Automated GitHub Release**:
|
||||||
|
- The GitHub Actions workflow will automatically:
|
||||||
|
- Build the plugin
|
||||||
|
- Create a GitHub release
|
||||||
|
- Upload the built plugin ZIP file
|
||||||
|
- Update the wiki (if configured)
|
||||||
|
|
||||||
|
## Post-Release Tasks
|
||||||
|
|
||||||
|
After creating a release, complete the following tasks:
|
||||||
|
|
||||||
|
1. **Verify the Release**:
|
||||||
|
- Check that the GitHub release was created successfully
|
||||||
|
- Download the ZIP file and verify its contents
|
||||||
|
- Test the plugin by installing it from the ZIP file
|
||||||
|
|
||||||
|
2. **Update Documentation**:
|
||||||
|
- Update any external documentation that references the plugin version
|
||||||
|
- Update the plugin's website (if applicable)
|
||||||
|
|
||||||
|
3. **Announce the Release**:
|
||||||
|
- Announce the release on relevant channels (blog, social media, etc.)
|
||||||
|
- Notify users who have reported issues that are fixed in this release
|
||||||
|
|
||||||
|
4. **Start Planning the Next Release**:
|
||||||
|
- Create issues for the next release
|
||||||
|
- Update the project roadmap
|
||||||
|
|
||||||
|
## Hotfix Process
|
||||||
|
|
||||||
|
For critical bugs that need to be fixed immediately:
|
||||||
|
|
||||||
|
1. **Create a Hotfix Branch**:
|
||||||
|
```bash
|
||||||
|
git checkout -b hotfix/x.y.z
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Fix the Bug**:
|
||||||
|
- Make the necessary changes to fix the bug
|
||||||
|
- Add tests to prevent regression
|
||||||
|
|
||||||
|
3. **Update Version Numbers and Changelog** (as described above)
|
||||||
|
|
||||||
|
4. **Commit Changes**:
|
||||||
|
```bash
|
||||||
|
git add .
|
||||||
|
git commit -m "Hotfix: description of the fix"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Create a Pull Request** (as described above)
|
||||||
|
|
||||||
|
6. **Merge the Pull Request** (as described above)
|
||||||
|
|
||||||
|
7. **Create a Release Tag and GitHub Release** (as described above)
|
||||||
|
|
||||||
|
## Release Branches
|
||||||
|
|
||||||
|
This plugin uses the following branch strategy:
|
||||||
|
|
||||||
|
- **main**: The main development branch
|
||||||
|
- **release/x.y.z**: Temporary branches for preparing releases
|
||||||
|
- **hotfix/x.y.z**: Temporary branches for hotfixes
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Following this release process ensures that releases are consistent, well-documented, and properly tested. It also helps users understand what has changed between versions and how to upgrade safely.
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
# WordPress Plugin Starter Template - AI Assistant Prompt
|
||||||
|
|
||||||
|
This document provides a comprehensive prompt to help you get started with creating your own WordPress plugin using this starter template with the assistance of AI tools like GitHub Copilot, Claude, or ChatGPT.
|
||||||
|
|
||||||
|
## Important: Optimize AI Context
|
||||||
|
|
||||||
|
**Before starting, add the AGENTS.md file and .agents/ directory to your AI IDE chat context.** In most AI IDEs, you can pin these files to ensure they're considered in each message. This will help the AI understand the project structure and follow the established best practices.
|
||||||
|
|
||||||
|
## Initial Setup Prompt
|
||||||
|
|
||||||
|
Use the following prompt to guide the AI assistant in helping you set up your new plugin based on this template:
|
||||||
|
|
||||||
|
```
|
||||||
|
I'm creating a new WordPress plugin based on the wp-plugin-starter-template-for-ai-coding template. Please help me customize this template for my specific plugin needs.
|
||||||
|
|
||||||
|
Here are the details for my new plugin:
|
||||||
|
|
||||||
|
- Plugin Name: [YOUR PLUGIN NAME]
|
||||||
|
- Plugin Slug: [YOUR-PLUGIN-SLUG]
|
||||||
|
- Text Domain: [your-plugin-text-domain]
|
||||||
|
- Namespace: [VENDOR]\[PluginName]
|
||||||
|
- Description: [BRIEF DESCRIPTION OF YOUR PLUGIN]
|
||||||
|
- Version: 0.1.0 (starting version)
|
||||||
|
- Author: [YOUR NAME/ORGANIZATION]
|
||||||
|
- Author URI: [YOUR WEBSITE]
|
||||||
|
- License: GPL-2.0+ (or specify another compatible license)
|
||||||
|
- Requires WordPress: [MINIMUM WP VERSION, e.g., 5.0]
|
||||||
|
- Requires PHP: [MINIMUM PHP VERSION, e.g., 7.0]
|
||||||
|
- GitHub Repository: [YOUR GITHUB REPO URL]
|
||||||
|
- Gitea Repository (if applicable): [YOUR GITEA REPO URL]
|
||||||
|
|
||||||
|
I need help with the following tasks:
|
||||||
|
|
||||||
|
1. Updating all template placeholders with my plugin information
|
||||||
|
2. Customizing the plugin structure for my specific needs
|
||||||
|
3. Setting up the initial functionality for my plugin
|
||||||
|
|
||||||
|
I've added the AGENTS.md and .agents/ directory to the chat context to ensure you have all the necessary information about the project structure and best practices.
|
||||||
|
|
||||||
|
Please guide me through this process step by step, starting with identifying all files that need to be updated with my plugin information.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Files That Need Updating
|
||||||
|
|
||||||
|
The AI will help you identify and update the following files with your plugin information:
|
||||||
|
|
||||||
|
1. **Main Plugin File**: Rename `wp-plugin-starter-template.php` to `your-plugin-slug.php` and update all plugin header information
|
||||||
|
2. **README.md**: Update with your plugin details, features, and installation instructions
|
||||||
|
3. **readme.txt**: Update WordPress.org plugin repository information
|
||||||
|
4. **CHANGELOG.md**: Initialize with your starting version
|
||||||
|
5. **composer.json**: Update package name and description
|
||||||
|
6. **languages/pot file**: Rename and update the POT file
|
||||||
|
7. **.github/workflows/**: Update GitHub Actions workflows with your repository information
|
||||||
|
8. **.wiki/**: Update wiki documentation with your plugin information
|
||||||
|
9. **AGENTS.md**: Update AI assistant guidance for your specific plugin
|
||||||
|
10. **includes/plugin.php**: Update namespace and class references
|
||||||
|
11. **includes/core.php**: Update namespace and customize core functionality
|
||||||
|
12. **admin/lib/admin.php**: Update namespace and customize admin functionality
|
||||||
|
|
||||||
|
## Customization Process
|
||||||
|
|
||||||
|
After providing the initial information, follow this process with your AI assistant:
|
||||||
|
|
||||||
|
### 1. File Renaming
|
||||||
|
|
||||||
|
Ask the AI to help you identify all files that need to be renamed:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please list all files that need to be renamed to match my plugin slug, and provide the commands to rename them.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Namespace Updates
|
||||||
|
|
||||||
|
Ask the AI to help you update all namespace references:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update all namespace references from WPALLSTARS\PluginStarterTemplate to [VENDOR]\[PluginName] throughout the codebase.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Text Domain Updates
|
||||||
|
|
||||||
|
Ask the AI to help you update all text domain references:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update all text domain references from 'wp-plugin-starter-template' to '[your-plugin-text-domain]' throughout the codebase.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Function Prefix Updates
|
||||||
|
|
||||||
|
Ask the AI to help you update any function prefixes:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update any function prefixes from 'wpst_' to '[your_prefix]_' throughout the codebase.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Customizing Core Functionality
|
||||||
|
|
||||||
|
Ask the AI to help you customize the core functionality for your specific plugin needs:
|
||||||
|
|
||||||
|
```
|
||||||
|
Now I'd like to customize the core functionality for my plugin. Here's what my plugin should do:
|
||||||
|
|
||||||
|
[DESCRIBE YOUR PLUGIN'S CORE FUNCTIONALITY]
|
||||||
|
|
||||||
|
Please help me modify the includes/core.php file to implement this functionality.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Customizing Admin Interface
|
||||||
|
|
||||||
|
Ask the AI to help you customize the admin interface for your specific plugin needs:
|
||||||
|
|
||||||
|
```
|
||||||
|
I'd like to customize the admin interface for my plugin. Here's what I need in the admin area:
|
||||||
|
|
||||||
|
[DESCRIBE YOUR PLUGIN'S ADMIN INTERFACE NEEDS]
|
||||||
|
|
||||||
|
Please help me modify the admin/lib/admin.php file and any other necessary files to implement this.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Testing Setup
|
||||||
|
|
||||||
|
Ask the AI to help you set up testing for your plugin:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update the testing setup to match my plugin's namespace and functionality. I want to ensure I have proper test coverage for the core features.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Additional Customization Areas
|
||||||
|
|
||||||
|
Depending on your plugin's needs, you might want to ask the AI for help with:
|
||||||
|
|
||||||
|
1. **Custom Post Types**: Setting up custom post types and taxonomies
|
||||||
|
2. **Settings API**: Implementing WordPress Settings API for your plugin options
|
||||||
|
3. **Shortcodes**: Creating shortcodes for front-end functionality
|
||||||
|
4. **Widgets**: Developing WordPress widgets
|
||||||
|
5. **REST API**: Adding custom REST API endpoints
|
||||||
|
6. **Blocks**: Creating Gutenberg blocks
|
||||||
|
7. **Internationalization**: Ensuring proper i18n setup
|
||||||
|
8. **Database Tables**: Creating custom database tables if needed
|
||||||
|
9. **Cron Jobs**: Setting up WordPress cron jobs
|
||||||
|
10. **User Roles and Capabilities**: Managing custom user roles and capabilities
|
||||||
|
|
||||||
|
## Final Review
|
||||||
|
|
||||||
|
Once you've completed the customization, ask the AI to help you review everything:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me review all the changes we've made to ensure:
|
||||||
|
|
||||||
|
1. All template placeholders have been replaced with my plugin information
|
||||||
|
2. All namespaces, text domains, and function prefixes have been updated consistently
|
||||||
|
3. The plugin structure matches my specific needs
|
||||||
|
4. The initial functionality is properly implemented
|
||||||
|
5. All documentation (README.md, readme.txt, wiki) is updated and consistent
|
||||||
|
|
||||||
|
Are there any issues or inconsistencies that need to be addressed?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building and Testing
|
||||||
|
|
||||||
|
Finally, ask the AI to guide you through building and testing your plugin:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please guide me through the process of building and testing my plugin:
|
||||||
|
|
||||||
|
1. How do I use the build script to create a deployable version?
|
||||||
|
2. What tests should I run to ensure everything is working correctly?
|
||||||
|
3. How do I set up a local testing environment?
|
||||||
|
4. What should I check before releasing the first version?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Optimizing AI Assistance
|
||||||
|
|
||||||
|
To ensure the AI assistant has all the necessary context about your plugin's structure and best practices:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please add the AGENTS.md and .agents/ directory to your AI IDE chat context. In most AI IDEs, you can pin these files to ensure they're considered in each message. This will help the AI understand the project structure and follow the established best practices.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
- This template is designed to be a starting point. Feel free to add, remove, or modify components as needed for your specific plugin.
|
||||||
|
- The AI assistant can help you understand the existing code and make appropriate modifications, but you should review all changes to ensure they meet your requirements.
|
||||||
|
- Always test your plugin thoroughly before releasing it.
|
||||||
|
- Keep documentation updated as you develop your plugin.
|
||||||
|
- Pin the AGENTS.md and .agents/ files in your AI IDE chat to ensure the AI has the necessary context for each interaction.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
This plugin is based on the [WordPress Plugin Starter Template for AI Coding](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding) by WPALLSTARS.
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
# Troubleshooting
|
||||||
|
|
||||||
|
This guide provides solutions to common issues you might encounter when using or developing with this plugin.
|
||||||
|
|
||||||
|
## Installation Issues
|
||||||
|
|
||||||
|
### Plugin Installation Fails
|
||||||
|
|
||||||
|
**Problem**: The plugin fails to install in WordPress.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that your WordPress version meets the minimum requirement (5.0+)
|
||||||
|
2. Check that your PHP version meets the minimum requirement (7.0+)
|
||||||
|
3. Ensure the ZIP file is properly formatted and contains all required files
|
||||||
|
4. Try installing the plugin manually by uploading the unzipped folder to the `wp-content/plugins` directory
|
||||||
|
|
||||||
|
### Activation Error
|
||||||
|
|
||||||
|
**Problem**: You receive an error when activating the plugin.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Check the error message for specific details
|
||||||
|
2. Verify that all plugin dependencies are installed and activated
|
||||||
|
3. Check your server's error logs for more information
|
||||||
|
4. Temporarily deactivate other plugins to check for conflicts
|
||||||
|
|
||||||
|
## Development Issues
|
||||||
|
|
||||||
|
### Composer Dependencies
|
||||||
|
|
||||||
|
**Problem**: Composer fails to install dependencies.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that you have Composer installed and up to date
|
||||||
|
2. Check that your PHP version meets the requirements for all dependencies
|
||||||
|
3. Try clearing Composer's cache: `composer clear-cache`
|
||||||
|
4. Run `composer install --verbose` to see detailed error messages
|
||||||
|
|
||||||
|
### NPM Dependencies
|
||||||
|
|
||||||
|
**Problem**: NPM fails to install dependencies.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that you have Node.js and NPM installed and up to date
|
||||||
|
2. Try clearing NPM's cache: `npm cache clean --force`
|
||||||
|
3. Delete the `node_modules` directory and run `npm install` again
|
||||||
|
4. Run `npm install --verbose` to see detailed error messages
|
||||||
|
|
||||||
|
### WordPress Environment (wp-env)
|
||||||
|
|
||||||
|
**Problem**: The WordPress environment fails to start.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that Docker is installed and running
|
||||||
|
2. Check that the Docker daemon has enough resources allocated
|
||||||
|
3. Try stopping and removing existing containers: `npm run wp-env stop && npm run wp-env clean`
|
||||||
|
4. Run `npm run wp-env start --debug` to see detailed error messages
|
||||||
|
|
||||||
|
### Unit Tests
|
||||||
|
|
||||||
|
**Problem**: Unit tests are failing.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that you have PHPUnit installed and configured correctly
|
||||||
|
2. Check that all dependencies are installed: `composer install`
|
||||||
|
3. Run tests with verbose output: `./vendor/bin/phpunit --verbose`
|
||||||
|
4. Check for syntax errors in your PHP files
|
||||||
|
|
||||||
|
### End-to-End Tests
|
||||||
|
|
||||||
|
**Problem**: End-to-end tests are failing.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that the WordPress environment is running: `npm run start`
|
||||||
|
2. Check that Cypress is installed correctly: `npx cypress verify`
|
||||||
|
3. Run tests in interactive mode to debug: `npm run test:e2e`
|
||||||
|
4. Check for issues with selectors or timing in your test scripts
|
||||||
|
|
||||||
|
## Plugin Functionality Issues
|
||||||
|
|
||||||
|
### Plugin Settings Not Saving
|
||||||
|
|
||||||
|
**Problem**: Changes to plugin settings are not being saved.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Check for JavaScript errors in the browser console
|
||||||
|
2. Verify that the settings form is submitting correctly
|
||||||
|
3. Check that the WordPress nonce is being verified correctly
|
||||||
|
4. Ensure that the user has the necessary permissions to save settings
|
||||||
|
|
||||||
|
### Plugin Conflicts
|
||||||
|
|
||||||
|
**Problem**: The plugin conflicts with other plugins.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Deactivate other plugins one by one to identify the conflict
|
||||||
|
2. Check for JavaScript errors in the browser console
|
||||||
|
3. Check for PHP errors in the server logs
|
||||||
|
4. Contact the developers of both plugins to report the conflict
|
||||||
|
|
||||||
|
### Performance Issues
|
||||||
|
|
||||||
|
**Problem**: The plugin is causing performance issues.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Check if the plugin is making excessive database queries
|
||||||
|
2. Verify that assets (CSS/JS) are being properly enqueued and minified
|
||||||
|
3. Consider implementing caching for resource-intensive operations
|
||||||
|
4. Use a profiling tool to identify bottlenecks
|
||||||
|
|
||||||
|
## Update Issues
|
||||||
|
|
||||||
|
### Update Fails
|
||||||
|
|
||||||
|
**Problem**: The plugin fails to update.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that your WordPress version meets the requirements for the new version
|
||||||
|
2. Check that your PHP version meets the requirements for the new version
|
||||||
|
3. Try updating manually by downloading the new version and replacing the old files
|
||||||
|
4. Check for file permission issues on your server
|
||||||
|
|
||||||
|
### Lost Settings After Update
|
||||||
|
|
||||||
|
**Problem**: Plugin settings are lost after updating.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Check if the plugin includes a data migration process for updates
|
||||||
|
2. Verify that the settings are being stored in the database correctly
|
||||||
|
3. Restore settings from a backup if available
|
||||||
|
4. Contact plugin support for assistance
|
||||||
|
|
||||||
|
## Multisite Issues
|
||||||
|
|
||||||
|
### Plugin Not Working on Multisite
|
||||||
|
|
||||||
|
**Problem**: The plugin doesn't work correctly on a multisite installation.
|
||||||
|
|
||||||
|
**Solutions**:
|
||||||
|
|
||||||
|
1. Verify that the plugin is network activated if required
|
||||||
|
2. Check that the plugin is compatible with multisite (it should be!)
|
||||||
|
3. Ensure that the plugin has the necessary permissions on each site
|
||||||
|
4. Check for multisite-specific settings or options
|
||||||
|
|
||||||
|
## Getting Additional Help
|
||||||
|
|
||||||
|
If you're still experiencing issues after trying these troubleshooting steps:
|
||||||
|
|
||||||
|
1. Check the [Frequently Asked Questions](Frequently-Asked-Questions) for more information
|
||||||
|
2. Search for similar issues in the [GitHub Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
3. Create a new issue with detailed information about your problem
|
||||||
|
4. Contact the plugin developers for direct support
|
||||||
|
|
||||||
|
## Reporting Bugs
|
||||||
|
|
||||||
|
If you've identified a bug in the plugin:
|
||||||
|
|
||||||
|
1. Go to the [GitHub Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) page
|
||||||
|
2. Click "New Issue"
|
||||||
|
3. Select "Bug Report"
|
||||||
|
4. Fill out the template with as much detail as possible
|
||||||
|
5. Submit the issue
|
||||||
|
|
||||||
|
Please include:
|
||||||
|
|
||||||
|
- A clear description of the bug
|
||||||
|
- Steps to reproduce the issue
|
||||||
|
- Your environment details (WordPress version, PHP version, etc.)
|
||||||
|
- Any relevant error messages or screenshots
|
||||||
@@ -21,7 +21,7 @@ The template follows a modular structure:
|
|||||||
- `js/`: Admin JavaScript files
|
- `js/`: Admin JavaScript files
|
||||||
- `languages/`: Translation files
|
- `languages/`: Translation files
|
||||||
- `.github/workflows/`: GitHub Actions workflows
|
- `.github/workflows/`: GitHub Actions workflows
|
||||||
- `.ai-workflows/`: Documentation for AI assistants
|
- `.agents/`: Documentation for AI assistants
|
||||||
- `.wiki/`: Wiki documentation templates
|
- `.wiki/`: Wiki documentation templates
|
||||||
|
|
||||||
### Customizing for Your Plugin
|
### Customizing for Your Plugin
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
## User Documentation
|
## User Documentation
|
||||||
|
|
||||||
* [Home](Home)
|
* [Home](Home)
|
||||||
|
* [Starter Prompt](Starter-Prompt)
|
||||||
* [Installation Guide](Installation-Guide)
|
* [Installation Guide](Installation-Guide)
|
||||||
* [Usage Instructions](Usage-Instructions)
|
* [Usage Instructions](Usage-Instructions)
|
||||||
* [Frequently Asked Questions](Frequently-Asked-Questions)
|
* [Frequently Asked Questions](Frequently-Asked-Questions)
|
||||||
* [Troubleshooting](Troubleshooting)
|
* [Troubleshooting](Troubleshooting)
|
||||||
|
|
||||||
## Developer Documentation
|
## Developer Documentation
|
||||||
|
|
||||||
* [Architecture Overview](Architecture-Overview)
|
* [Architecture Overview](Architecture-Overview)
|
||||||
* [Customization Guide](Customization-Guide)
|
* [Customization Guide](Customization-Guide)
|
||||||
* [Extending the Plugin](Extending-the-Plugin)
|
* [Extending the Plugin](Extending-the-Plugin)
|
||||||
@@ -13,8 +16,10 @@
|
|||||||
* [Release Process](Release-Process)
|
* [Release Process](Release-Process)
|
||||||
|
|
||||||
## AI Documentation
|
## AI Documentation
|
||||||
|
|
||||||
* [AI Workflow Documentation](AI-Workflow-Documentation)
|
* [AI Workflow Documentation](AI-Workflow-Documentation)
|
||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
* [Changelog](Changelog)
|
* [Changelog](Changelog)
|
||||||
* [Contributing](Contributing)
|
* [Contributing](Contributing)
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
# AI Assistant Guide for WordPress Plugin Development
|
||||||
|
|
||||||
|
This guide helps AI assistants understand the project structure, workflows, and best practices for this repository.
|
||||||
|
|
||||||
|
## IMPORTANT: Repository Context
|
||||||
|
|
||||||
|
This workspace may contain multiple repository folders. Always focus ONLY on the current repository you're working in and avoid hallucinating functionality from other repositories in the workspace.
|
||||||
|
|
||||||
|
* **Current Repository**: wp-plugin-starter-template-for-ai-coding
|
||||||
|
* **Repository Purpose**: A comprehensive starter template for WordPress plugins with best practices for AI-assisted development
|
||||||
|
* **Repository Scope**: All code changes, documentation, and functionality discussions should be limited to THIS repository only
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
* **Plugin Name**: WordPress Plugin Starter Template
|
||||||
|
* **Plugin Slug**: wp-plugin-starter-template
|
||||||
|
* **Text Domain**: wp-plugin-starter-template
|
||||||
|
* **Namespace**: WPALLSTARS\PluginStarterTemplate
|
||||||
|
* **Version**: 0.1.13
|
||||||
|
* **Requires WordPress**: 5.0+
|
||||||
|
* **Requires PHP**: 7.0+
|
||||||
|
* **License**: GPL-2.0+
|
||||||
|
|
||||||
|
## Repository Structure
|
||||||
|
|
||||||
|
* **wp-plugin-starter-template.php**: Main plugin file with plugin headers
|
||||||
|
* **includes/**: Core plugin functionality
|
||||||
|
* **plugin.php**: Main plugin class that initializes everything
|
||||||
|
* **core.php**: Core functionality class
|
||||||
|
* **updater.php**: Update mechanism for multiple sources
|
||||||
|
* **admin/**: Admin-specific functionality
|
||||||
|
* **lib/**: Admin classes
|
||||||
|
* **css/**: Admin stylesheets
|
||||||
|
* **js/**: Admin JavaScript files
|
||||||
|
* **languages/**: Translation files
|
||||||
|
* **.github/workflows/**: GitHub Actions workflows
|
||||||
|
* **.agents/**: Documentation for AI assistants
|
||||||
|
* **.wiki/**: Wiki documentation templates
|
||||||
|
|
||||||
|
## Coding Standards
|
||||||
|
|
||||||
|
This project follows the [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/):
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation, not tabs (this is a project-specific override of WordPress standards)
|
||||||
|
* Follow WordPress naming conventions:
|
||||||
|
* Class names: `Class_Name`
|
||||||
|
* Function names: `function_name`
|
||||||
|
* Variable names: `$variable_name`
|
||||||
|
* Use proper DocBlocks for all classes, methods, and functions
|
||||||
|
* Ensure all user-facing strings are translatable
|
||||||
|
* Validate and sanitize all inputs
|
||||||
|
* Escape all outputs
|
||||||
|
* Use asterisks (*) for bullet points in all Markdown files, not hyphens (-)
|
||||||
|
* Add periods to the end of all inline comments
|
||||||
|
|
||||||
|
### Code Quality Tools
|
||||||
|
|
||||||
|
This project uses several automated code quality tools to ensure high standards:
|
||||||
|
|
||||||
|
1. **PHP_CodeSniffer (PHPCS)**: Checks PHP code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
composer run phpcs
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **PHP Code Beautifier and Fixer (PHPCBF)**: Automatically fixes some coding standard violations
|
||||||
|
```bash
|
||||||
|
composer run phpcbf
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **ESLint**: Checks JavaScript code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
npm run lint:js
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Stylelint**: Checks CSS code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
npm run lint:css
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Continuous Integration Tools**: The project integrates with several code quality tools:
|
||||||
|
* **CodeRabbit**: AI-powered code review tool
|
||||||
|
* **CodeFactor**: Continuous code quality monitoring
|
||||||
|
* **Codacy**: Code quality and static analysis
|
||||||
|
* **SonarCloud**: Code quality and security analysis
|
||||||
|
|
||||||
|
Always run PHPCS and PHPCBF locally before committing code to ensure it meets the project's coding standards.
|
||||||
|
|
||||||
|
## Common Tasks
|
||||||
|
|
||||||
|
For detailed instructions on common tasks like creating releases, adding features, fixing bugs, and testing previous versions, see **@.agents/release-process.md**.
|
||||||
|
|
||||||
|
## Avoiding Cross-Repository Confusion
|
||||||
|
|
||||||
|
When working in a multi-repository workspace, follow these guidelines to avoid confusion:
|
||||||
|
|
||||||
|
1. **Verify Repository Context**: Always check which repository you're currently working in before making any changes or recommendations.
|
||||||
|
|
||||||
|
2. **Limit Code Search Scope**: When searching for code or functionality, explicitly limit your search to the current repository.
|
||||||
|
|
||||||
|
3. **Don't Assume Features**: Never assume that features present in one repository should be implemented in another. Each repository has its own specific purpose and feature set.
|
||||||
|
|
||||||
|
4. **Repository-Specific Documentation**: Documentation should only reflect the actual features and functionality of the current repository.
|
||||||
|
|
||||||
|
5. **Cross-Repository Inspiration**: If you want to implement a feature inspired by another repository, explicitly mention that it's a new feature being added, not an existing one.
|
||||||
|
|
||||||
|
6. **Verify Before Implementation**: Before implementing or documenting a feature, verify that it actually exists in the current repository by checking the codebase.
|
||||||
|
|
||||||
|
7. **Consistent Markdown Formatting**: Always use asterisks (*) for bullet points in Markdown files, not hyphens (-).
|
||||||
|
|
||||||
|
## Internationalization (i18n)
|
||||||
|
|
||||||
|
All user-facing strings should be translatable:
|
||||||
|
|
||||||
|
* Use `__()` for simple strings
|
||||||
|
* Use `_e()` for echoed strings
|
||||||
|
* Use `esc_html__()` for escaped strings
|
||||||
|
* Use `esc_html_e()` for escaped and echoed strings
|
||||||
|
* Always use the plugin's text domain: `wp-plugin-starter-template`
|
||||||
|
|
||||||
|
Example:
|
||||||
|
```php
|
||||||
|
echo esc_html__('This is a translatable string', 'wp-plugin-starter-template');
|
||||||
|
```
|
||||||
|
|
||||||
|
## Security Best Practices
|
||||||
|
|
||||||
|
* Validate and sanitize all inputs
|
||||||
|
* Escape all outputs
|
||||||
|
* Use nonces for form submissions
|
||||||
|
* Use capability checks for user actions
|
||||||
|
* Follow the principle of least privilege
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
* Keep code comments up-to-date
|
||||||
|
* Update README.md and readme.txt when adding new features
|
||||||
|
* Update wiki documentation in the `.wiki/` directory
|
||||||
|
* Update changelog in both CHANGELOG.md and readme.txt
|
||||||
|
* Use asterisks (*) for bullet points in all Markdown files
|
||||||
|
|
||||||
|
## Git Workflow
|
||||||
|
|
||||||
|
* Create feature branches from `main`
|
||||||
|
* Use descriptive branch names (e.g., `feature/add-settings-page`)
|
||||||
|
* Make atomic commits with clear messages
|
||||||
|
* Create pull requests for review
|
||||||
|
* Tag releases with version numbers (e.g., `v1.0.0`)
|
||||||
|
|
||||||
|
## Developer Preferences
|
||||||
|
|
||||||
|
When working with this repository, remember these preferences:
|
||||||
|
|
||||||
|
1. Follow WordPress coding standards
|
||||||
|
2. Use OOP approach with namespaced classes
|
||||||
|
3. Keep code modular and maintainable
|
||||||
|
3. Reference these preferences in future interactions
|
||||||
|
|
||||||
|
This ensures consistency across coding sessions and reduces the need for developers to repeatedly explain their preferences.
|
||||||
+131
-1
@@ -1,7 +1,137 @@
|
|||||||
All notable changes to this project should be documented both here and in the main Readme files.
|
All notable changes to this project should be documented both here and in the main Readme files.
|
||||||
|
|
||||||
#### [0.1.0] - 2025-04-17
|
#### [0.1.15] - 2025-11-24
|
||||||
|
|
||||||
|
#### Release
|
||||||
|
|
||||||
|
- Maintenance release
|
||||||
|
|
||||||
|
#### [0.1.14] - 2025-11-24
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Renamed .ai-assistant.md to AGENTS.md
|
||||||
|
- Renamed .ai-workflows directory to .agents
|
||||||
|
- Updated all references in documentation and codebase
|
||||||
|
|
||||||
|
#### [0.1.13] - 2023-04-23
|
||||||
|
|
||||||
|
#### Improved
|
||||||
|
|
||||||
|
- Improved code quality with proper type declarations
|
||||||
|
- Fixed inconsistent variable naming (camelCase to snake_case)
|
||||||
|
- Improved path handling in admin class
|
||||||
|
- Added textdomain loading functionality
|
||||||
|
- Removed unused phpcs:ignore comment
|
||||||
|
- Implemented proper return type declarations
|
||||||
|
|
||||||
|
#### [0.1.12] - 2023-04-22
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Fixed WordPress mocking in unit tests
|
||||||
|
- Added proper mocking for WordPress functions in tests
|
||||||
|
- Improved code quality tool configurations
|
||||||
|
|
||||||
#### Added
|
#### Added
|
||||||
|
|
||||||
|
- Detailed code quality checks workflow documentation
|
||||||
|
- Updated documentation for better workflow efficiency
|
||||||
|
|
||||||
|
#### [0.1.11] - 2023-04-21
|
||||||
|
|
||||||
|
#### Improved
|
||||||
|
|
||||||
|
- Improved code quality with comprehensive fixes
|
||||||
|
- Fixed indentation issues in PHP files
|
||||||
|
- Updated CSS formatting with modern notation
|
||||||
|
- Fixed JavaScript issues with proper global variables
|
||||||
|
- Improved security by using filter_input() instead of direct superglobal access
|
||||||
|
- Standardized naming conventions across the codebase
|
||||||
|
- Fixed documentation and comments for better clarity
|
||||||
|
|
||||||
|
#### [0.1.10] - 2025-04-20
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Fixed formatting issues in markdown files for better code quality
|
||||||
|
- Improved URL formatting with angle brackets
|
||||||
|
- Standardized list formatting across documentation files
|
||||||
|
|
||||||
|
#### [0.1.9] - 2025-04-18
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Alphabetized AI IDE list in README.md
|
||||||
|
|
||||||
|
#### [0.1.8] - 2025-04-19
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- More informative badges to README.md (Build Status, Requirements, WP.org placeholders, Release, Issues, Contributors, Wiki).
|
||||||
|
|
||||||
|
#### [0.1.7] - 2025-04-19
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- GitHub Actions tests workflow with proper file paths and dependencies
|
||||||
|
|
||||||
|
#### Improved
|
||||||
|
|
||||||
|
- Workflow names for better clarity in GitHub Actions UI
|
||||||
|
|
||||||
|
#### [0.1.6] - 2025-04-19
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- GitHub Actions workflows permissions for releases and wiki sync
|
||||||
|
|
||||||
|
#### [0.1.5] - 2025-04-19
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Release workflow to use correct plugin directory name
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Testing setup with wp-env and Cypress
|
||||||
|
- Multisite compatibility
|
||||||
|
- npm scripts for development and testing
|
||||||
|
|
||||||
|
#### [0.1.3] - 2025-04-19
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Improved AI IDE context recommendations in documentation
|
||||||
|
- Enhanced Starter Prompt with guidance on pinning AGENTS.md and .agents/
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Updated README.md and readme.txt with AI IDE context recommendations
|
||||||
|
- Improved documentation for AI-assisted development
|
||||||
|
- Moved Starter Prompt to the wiki for better organization
|
||||||
|
|
||||||
|
#### [0.1.2] - 2025-04-18
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- STARTER-PROMPT.md with comprehensive guide for customizing the template
|
||||||
|
- Additional AI workflow files for better development guidance
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Updated documentation files with improved instructions
|
||||||
|
|
||||||
|
#### [0.1.1] - 2025-04-18
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Updated LICENSE file with correct GPL-2.0 text
|
||||||
|
|
||||||
|
#### [0.1.0] - 2025-04-17
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
- Initial release with basic template structure
|
- Initial release with basic template structure
|
||||||
- Core plugin architecture with OOP approach
|
- Core plugin architecture with OOP approach
|
||||||
- Admin interface components and styling
|
- Admin interface components and styling
|
||||||
|
|||||||
@@ -1,7 +1,338 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
GNU GENERAL PUBLIC LICENSE
|
||||||
<html><head>
|
Version 2, June 1991
|
||||||
<title>302 Found</title>
|
|
||||||
</head><body>
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
<h1>Found</h1>
|
<https://fsf.org/>
|
||||||
<p>The document has moved <a href="https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">here</a>.</p>
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
</body></html>
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
License is intended to guarantee your freedom to share and change free
|
||||||
|
software--to make sure the software is free for all its users. This
|
||||||
|
General Public License applies to most of the Free Software
|
||||||
|
Foundation's software and to any other program whose authors commit to
|
||||||
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
|
your programs, too.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
this service if you wish), that you receive source code or can get it
|
||||||
|
if you want it, that you can change the software or use pieces of it
|
||||||
|
in new free programs; and that you know you can do these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
anyone to deny you these rights or to ask you to surrender the rights.
|
||||||
|
These restrictions translate to certain responsibilities for you if you
|
||||||
|
distribute copies of the software, or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must show them these terms so they know their
|
||||||
|
rights.
|
||||||
|
|
||||||
|
We protect your rights with two steps: (1) copyright the software, and
|
||||||
|
(2) offer you this license which gives you legal permission to copy,
|
||||||
|
distribute and/or modify the software.
|
||||||
|
|
||||||
|
Also, for each author's protection and ours, we want to make certain
|
||||||
|
that everyone understands that there is no warranty for this free
|
||||||
|
software. If the software is modified by someone else and passed on, we
|
||||||
|
want its recipients to know that what they have is not the original, so
|
||||||
|
that any problems introduced by others will not reflect on the original
|
||||||
|
authors' reputations.
|
||||||
|
|
||||||
|
Finally, any free program is threatened constantly by software
|
||||||
|
patents. We wish to avoid the danger that redistributors of a free
|
||||||
|
program will individually obtain patent licenses, in effect making the
|
||||||
|
program proprietary. To prevent this, we have made it clear that any
|
||||||
|
patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License applies to any program or other work which contains
|
||||||
|
a notice placed by the copyright holder saying it may be distributed
|
||||||
|
under the terms of this General Public License. The "Program", below,
|
||||||
|
refers to any such program or work, and a "work based on the Program"
|
||||||
|
means either the Program or any derivative work under copyright law:
|
||||||
|
that is to say, a work containing the Program or a portion of it,
|
||||||
|
either verbatim or with modifications and/or translated into another
|
||||||
|
language. (Hereinafter, translation is included without limitation in
|
||||||
|
the term "modification".) Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running the Program is not restricted, and the output from the Program
|
||||||
|
is covered only if its contents constitute a work based on the
|
||||||
|
Program (independent of having been made by running the Program).
|
||||||
|
Whether that is true depends on what the Program does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Program's
|
||||||
|
source code as you receive it, in any medium, provided that you
|
||||||
|
conspicuously and appropriately publish on each copy an appropriate
|
||||||
|
copyright notice and disclaimer of warranty; keep intact all the
|
||||||
|
notices that refer to this License and to the absence of any warranty;
|
||||||
|
and give any other recipients of the Program a copy of this License
|
||||||
|
along with the Program.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy, and
|
||||||
|
you may at your option offer warranty protection in exchange for a fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Program or any portion
|
||||||
|
of it, thus forming a work based on the Program, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) You must cause the modified files to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
b) You must cause any work that you distribute or publish, that in
|
||||||
|
whole or in part contains or is derived from the Program or any
|
||||||
|
part thereof, to be licensed as a whole at no charge to all third
|
||||||
|
parties under the terms of this License.
|
||||||
|
|
||||||
|
c) If the modified program normally reads commands interactively
|
||||||
|
when run, you must cause it, when started running for such
|
||||||
|
interactive use in the most ordinary way, to print or display an
|
||||||
|
announcement including an appropriate copyright notice and a
|
||||||
|
notice that there is no warranty (or else, saying that you provide
|
||||||
|
a warranty) and that users may redistribute the program under
|
||||||
|
these conditions, and telling the user how to view a copy of this
|
||||||
|
License. (Exception: if the Program itself is interactive but
|
||||||
|
does not normally print such an announcement, your work based on
|
||||||
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Program,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Program, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Program.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Program
|
||||||
|
with the Program (or with a work based on the Program) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may copy and distribute the Program (or a work based on it,
|
||||||
|
under Section 2) in object code or executable form under the terms of
|
||||||
|
Sections 1 and 2 above provided that you also do one of the following:
|
||||||
|
|
||||||
|
a) Accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of Sections
|
||||||
|
1 and 2 above on a medium customarily used for software interchange; or,
|
||||||
|
|
||||||
|
b) Accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party, for a charge no more than your
|
||||||
|
cost of physically performing source distribution, a complete
|
||||||
|
machine-readable copy of the corresponding source code, to be
|
||||||
|
distributed under the terms of Sections 1 and 2 above on a medium
|
||||||
|
customarily used for software interchange; or,
|
||||||
|
|
||||||
|
c) Accompany it with the information you received as to the offer
|
||||||
|
to distribute corresponding source code. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form with such
|
||||||
|
an offer, in accord with Subsection b above.)
|
||||||
|
|
||||||
|
The source code for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For an executable work, complete source
|
||||||
|
code means all the source code for all modules it contains, plus any
|
||||||
|
associated interface definition files, plus the scripts used to
|
||||||
|
control compilation and installation of the executable. However, as a
|
||||||
|
special exception, the source code distributed need not include
|
||||||
|
anything that is normally distributed (in either source or binary
|
||||||
|
form) with the major components (compiler, kernel, and so on) of the
|
||||||
|
operating system on which the executable runs, unless that component
|
||||||
|
itself accompanies the executable.
|
||||||
|
|
||||||
|
If distribution of executable or object code is made by offering
|
||||||
|
access to copy from a designated place, then offering equivalent
|
||||||
|
access to copy the source code from the same place counts as
|
||||||
|
distribution of the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
|
except as expressly provided under this License. Any attempt
|
||||||
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
void, and will automatically terminate your rights under this License.
|
||||||
|
However, parties who have received copies, or rights, from you under
|
||||||
|
this License will not have their licenses terminated so long as such
|
||||||
|
parties remain in full compliance.
|
||||||
|
|
||||||
|
5. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Program or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Program (or any work based on the
|
||||||
|
Program), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Program or works based on it.
|
||||||
|
|
||||||
|
6. Each time you redistribute the Program (or any work based on the
|
||||||
|
Program), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute or modify the Program subject to
|
||||||
|
these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties to
|
||||||
|
this License.
|
||||||
|
|
||||||
|
7. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Program at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Program by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Program.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under
|
||||||
|
any particular circumstance, the balance of the section is intended to
|
||||||
|
apply and the section as a whole is intended to apply in other
|
||||||
|
circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system, which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Program under this License
|
||||||
|
may add an explicit geographical distribution limitation excluding
|
||||||
|
those countries, so that distribution is permitted only in or among
|
||||||
|
countries not thus excluded. In such case, this License incorporates
|
||||||
|
the limitation as if written in the body of this License.
|
||||||
|
|
||||||
|
9. The Free Software Foundation may publish revised and/or new versions
|
||||||
|
of the General Public License from time to time. Such new versions will
|
||||||
|
be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Program
|
||||||
|
specifies a version number of this License which applies to it and "any
|
||||||
|
later version", you have the option of following the terms and conditions
|
||||||
|
either of that version or of any later version published by the Free
|
||||||
|
Software Foundation. If the Program does not specify a version number of
|
||||||
|
this License, you may choose any version ever published by the Free Software
|
||||||
|
Foundation.
|
||||||
|
|
||||||
|
10. If you wish to incorporate parts of the Program into other free
|
||||||
|
programs whose distribution conditions are different, write to the author
|
||||||
|
to ask for permission. For software which is copyrighted by the Free
|
||||||
|
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||||
|
make exceptions for this. Our decision will be guided by the two goals
|
||||||
|
of preserving the free status of all derivatives of our free software and
|
||||||
|
of promoting the sharing and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||||
|
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||||
|
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||||
|
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||||
|
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||||
|
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||||
|
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||||
|
REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||||
|
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||||
|
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||||
|
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||||
|
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||||
|
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program is interactive, make it output a short notice like this
|
||||||
|
when it starts in an interactive mode:
|
||||||
|
|
||||||
|
Gnomovision version 69, Copyright (C) year name of author
|
||||||
|
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||||
|
This is free software, and you are welcome to redistribute it
|
||||||
|
under certain conditions; type `show c' for details.
|
||||||
|
|
||||||
|
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||||
|
parts of the General Public License. Of course, the commands you use may
|
||||||
|
be called something other than `show w' and `show c'; they could even be
|
||||||
|
mouse-clicks or menu items--whatever suits your program.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||||
|
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||||
|
|
||||||
|
<signature of Moe Ghoul>, 1 April 1989
|
||||||
|
Moe Ghoul, President of Vice
|
||||||
|
|
||||||
|
This General Public License does not permit incorporating your program into
|
||||||
|
proprietary programs. If your program is a subroutine library, you may
|
||||||
|
consider it more useful to permit linking proprietary applications with the
|
||||||
|
library. If this is what you want to do, use the GNU Lesser General
|
||||||
|
Public License instead of this License.
|
||||||
@@ -1,142 +1,574 @@
|
|||||||
# WordPress Plugin Starter Template for AI Coding
|
# WordPress Plugin Starter Template for AI Coding
|
||||||
|
|
||||||
|
[](https://www.gnu.org/licenses/gpl-2.0.html) [](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/actions/workflows/tests.yml) [](https://wordpress.org/about/requirements/) [](https://wordpress.org/about/requirements/) [](https://wordpress.org/plugins/your-plugin-slug/) [](https://wordpress.org/plugins/your-plugin-slug/reviews/) [](https://wordpress.org/plugins/your-plugin-slug/) [](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/releases) [](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) [](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/graphs/contributors) [](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki)  [](https://www.codefactor.io/repository/github/wpallstars/wp-plugin-starter-template-for-ai-coding) [](https://sonarcloud.io/summary/new_code?id=wpallstars_wp-plugin-starter-template-for-ai-coding) [](https://sonarcloud.io/summary/new_code?id=wpallstars_wp-plugin-starter-template-for-ai-coding) [](https://sonarcloud.io/summary/new_code?id=wpallstars_wp-plugin-starter-template-for-ai-coding) [](https://sonarcloud.io/summary/new_code?id=wpallstars_wp-plugin-starter-template-for-ai-coding) [](https://sonarcloud.io/summary/new_code?id=wpallstars_wp-plugin-starter-template-for-ai-coding) [](https://app.codacy.com/gh/wpallstars/wp-plugin-starter-template-for-ai-coding/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
||||||
|
|
||||||
A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.
|
A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.
|
||||||
|
|
||||||
[](https://wordpress.org/plugins/wp-plugin-starter-template-for-ai-coding/)
|
|
||||||
[](https://wordpress.org/plugins/wp-plugin-starter-template-for-ai-coding/)
|
|
||||||
[](https://wordpress.org/plugins/wp-plugin-starter-template-for-ai-coding/)
|
|
||||||
[](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/blob/main/LICENSE)
|
|
||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
The WordPress Plugin Starter Template provides a solid foundation for developing WordPress plugins with AI assistance. It includes a well-structured codebase, documentation templates, and best practices to help you create high-quality WordPress plugins efficiently.
|
The WordPress Plugin Starter Template provides a solid foundation for developing WordPress plugins. It incorporates best practices, modern coding standards, and a comprehensive structure that makes it easy to get started with plugin development.
|
||||||
|
|
||||||
|
This template is based on the experience gained from developing the "Fix 'Plugin file does not exist' Notices" plugin and other successful WordPress plugins.
|
||||||
|
|
||||||
### Key Features
|
### Key Features
|
||||||
|
|
||||||
- **Well-structured codebase** following WordPress coding standards
|
* **Object-Oriented Architecture**: Well-structured, maintainable code using OOP principles
|
||||||
- **Modular architecture** for easy maintenance and extension
|
* **Namespace Support**: Modern PHP namespacing for better organization and avoiding conflicts
|
||||||
- **Comprehensive documentation** templates for both users and developers
|
* **Comprehensive Documentation**: Detailed documentation for both users and developers
|
||||||
- **AI-friendly workflows** with detailed guidance for AI assistants
|
* **Testing Framework**: PHPUnit setup for unit testing and Cypress for e2e testing
|
||||||
- **Git integration** with GitHub and Gitea support
|
* **Internationalization Ready**: Full support for translation and localization
|
||||||
- **Update mechanism** with multiple source options (WordPress.org, GitHub, Gitea)
|
* **Update Source Selection**: Choose between WordPress.org, GitHub, or Gitea for plugin updates
|
||||||
- **Internationalization** ready with proper text domain setup
|
* **AI Workflow Documentation**: Detailed guides for AI-assisted development
|
||||||
- **Admin interface** components for building settings pages
|
* **Wiki Documentation**: Ready-to-use wiki structure for comprehensive documentation
|
||||||
|
* **Multisite Compatible**: Fully tested and compatible with WordPress multisite installations
|
||||||
|
|
||||||
### For Developers
|
### How to Use This Template
|
||||||
|
|
||||||
This template is designed to be a starting point for your WordPress plugin development. It provides:
|
1. Clone or download this repository
|
||||||
|
2. **Important**: Begin by reading the [Starter Prompt](.wiki/Starter-Prompt.md) file for detailed instructions
|
||||||
|
3. Add the AGENTS.md file and .agents/ directory to your AI IDE chat context (pin them if possible)
|
||||||
|
4. Use the prompt in the Starter Prompt file to guide the AI in customizing the template for your plugin
|
||||||
|
5. Rename files and update namespaces to match your plugin
|
||||||
|
6. Customize the functionality for your specific needs
|
||||||
|
7. Update documentation to reflect your plugin's features
|
||||||
|
8. Build and test your plugin
|
||||||
|
|
||||||
- A clean, well-organized file structure
|
### AI-Assisted Development
|
||||||
- OOP approach with namespaced classes
|
|
||||||
- Separation of concerns (admin, core functionality)
|
This template includes comprehensive documentation for AI-assisted development:
|
||||||
- Documentation templates for wiki and readme files
|
|
||||||
- GitHub Actions workflows for automated tasks
|
* **AGENTS.md**: Guide for AI assistants to understand the project structure
|
||||||
- AI workflow documentation for AI-assisted development
|
* **.agents/**: Detailed workflow documentation for common development tasks
|
||||||
|
* **Starter Prompt**: Comprehensive prompt for AI tools to help customize the template (available in the [wiki](.wiki/Starter-Prompt.md))
|
||||||
|
|
||||||
|
**Important**: For the best AI assistance, add the AGENTS.md file and .agents/ directory to your AI IDE chat context. In most AI IDEs, you can pin these files to ensure they're considered in each message.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### From GitHub
|
|
||||||
|
|
||||||
1. Download the latest release from the [GitHub repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/releases)
|
|
||||||
2. Upload the plugin files to the `/wp-content/plugins/wp-plugin-starter-template` directory, or install the plugin through the WordPress plugins screen directly
|
|
||||||
3. Activate the plugin through the 'Plugins' screen in WordPress
|
|
||||||
|
|
||||||
### Using as a Template for Your Plugin
|
|
||||||
|
|
||||||
1. Clone or download this repository
|
1. Clone or download this repository
|
||||||
2. Rename the plugin directory and files to match your plugin name
|
2. Read the [Starter Prompt](.wiki/Starter-Prompt.md) file for detailed instructions
|
||||||
3. Update namespaces, function prefixes, and text domains
|
3. Add the AGENTS.md file and .agents/ directory to your AI IDE chat context
|
||||||
4. Update plugin headers in the main PHP file
|
4. Use the prompt in the Starter Prompt file to guide the AI in customizing the template
|
||||||
5. Customize the functionality to meet your specific needs
|
5. Rename files and update namespaces to match your plugin
|
||||||
6. Update documentation to reflect your plugin's features
|
6. Customize the functionality for your specific needs
|
||||||
|
7. Update documentation to reflect your plugin's features
|
||||||
|
8. Build and test your plugin
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Basic Structure
|
### Getting Started
|
||||||
|
|
||||||
The template follows a modular structure:
|
To get started with this template, follow these steps:
|
||||||
|
|
||||||
- `wp-plugin-starter-template.php`: Main plugin file with plugin headers
|
1. In your terminal, navigate to the folder you keep you Git repositories (eg: `~/Git/`), then clone this repository to your local machine:
|
||||||
- `includes/`: Core plugin functionality
|
```bash
|
||||||
- `plugin.php`: Main plugin class that initializes everything
|
git clone https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding.git
|
||||||
- `core.php`: Core functionality class
|
```
|
||||||
- `updater.php`: Update mechanism for multiple sources
|
|
||||||
- `admin/`: Admin-specific functionality
|
|
||||||
- `lib/`: Admin classes
|
|
||||||
- `css/`: Admin stylesheets
|
|
||||||
- `js/`: Admin JavaScript files
|
|
||||||
- `languages/`: Translation files
|
|
||||||
- `.github/workflows/`: GitHub Actions workflows
|
|
||||||
- `.ai-workflows/`: Documentation for AI assistants
|
|
||||||
- `.wiki/`: Wiki documentation templates
|
|
||||||
|
|
||||||
### Customizing for Your Plugin
|
2. Open the [Starter Prompt](.wiki/Starter-Prompt.md) file and follow the instructions to customize the template for your plugin.
|
||||||
|
|
||||||
1. **Rename Files and Update Namespaces**:
|
3. Add the AGENTS.md file and .agents/ directory to your AI IDE chat context.
|
||||||
- Rename `wp-plugin-starter-template.php` to your plugin name
|
|
||||||
- Update the namespace from `WPALLSTARS\PluginStarterTemplate` to your own
|
|
||||||
- Update text domain from `wp-plugin-starter-template` to your own
|
|
||||||
|
|
||||||
2. **Update Plugin Headers**:
|
4. Use an AI assistant like GitHub Copilot, Claude, or ChatGPT to help you customize the template by providing the prompt from the Starter Prompt file.
|
||||||
- Edit the plugin headers in the main PHP file
|
|
||||||
- Update GitHub/Gitea repository URLs
|
|
||||||
|
|
||||||
3. **Customize Functionality**:
|
### Development Environment
|
||||||
- Modify the core functionality in `includes/core.php`
|
|
||||||
- Add your own classes as needed
|
|
||||||
- Customize admin interfaces in the `admin/` directory
|
|
||||||
|
|
||||||
4. **Update Documentation**:
|
This template includes configuration for WordPress Environment (wp-env) to make local development easier:
|
||||||
- Update README.md and readme.txt with your plugin information
|
|
||||||
- Customize wiki documentation in the `.wiki/` directory
|
|
||||||
|
|
||||||
## Documentation
|
1. Install Node.js dependencies:
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
Comprehensive documentation is available in the [Wiki](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki).
|
2. Start the WordPress environment:
|
||||||
|
```bash
|
||||||
|
npm run start
|
||||||
|
```
|
||||||
|
|
||||||
### For Users
|
3. For multisite testing:
|
||||||
|
```bash
|
||||||
|
npm run multisite
|
||||||
|
```
|
||||||
|
|
||||||
- [Installation Guide](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Installation-Guide)
|
4. Access your local WordPress site at <http://localhost:8888> (admin credentials: admin/password)
|
||||||
- [Usage Instructions](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Usage-Instructions)
|
|
||||||
- [Frequently Asked Questions](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Frequently-Asked-Questions)
|
|
||||||
- [Troubleshooting](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Troubleshooting)
|
|
||||||
|
|
||||||
### For Developers
|
### Testing
|
||||||
|
|
||||||
- [Architecture Overview](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Architecture-Overview)
|
The template includes both PHP unit tests and end-to-end tests:
|
||||||
- [Extending the Plugin](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Extending-the-Plugin)
|
|
||||||
- [Coding Standards](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Coding-Standards)
|
|
||||||
- [Release Process](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Release-Process)
|
|
||||||
|
|
||||||
### For AI Assistants
|
#### PHP Unit Tests
|
||||||
|
|
||||||
The `.ai-assistant.md` file and `.ai-workflows/` directory contain detailed guidance for AI assistants working with this template. These resources help ensure consistent, high-quality code and documentation when using AI tools for development.
|
1. Install Composer dependencies:
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run PHP unit tests:
|
||||||
|
```bash
|
||||||
|
npm run test:php
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Check PHP coding standards:
|
||||||
|
```bash
|
||||||
|
npm run lint:php
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Fix PHP coding standards issues:
|
||||||
|
```bash
|
||||||
|
npm run fix:php
|
||||||
|
```
|
||||||
|
|
||||||
|
#### End-to-End Tests
|
||||||
|
|
||||||
|
1. Start the WordPress environment:
|
||||||
|
```bash
|
||||||
|
npm run start
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run Cypress tests in interactive mode:
|
||||||
|
```bash
|
||||||
|
npm run test:e2e
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Run Cypress tests in headless mode:
|
||||||
|
```bash
|
||||||
|
npm run test:e2e:headless
|
||||||
|
```
|
||||||
|
|
||||||
|
### Building for Production
|
||||||
|
|
||||||
|
Use the included build script to create a deployable version of your plugin:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
Or directly:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build.sh {VERSION}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a ZIP file that you can install in WordPress.
|
||||||
|
|
||||||
|
### Using with Git Updater
|
||||||
|
|
||||||
|
If you've installed this plugin from GitHub or Gitea, you'll need Git Updater to receive updates:
|
||||||
|
|
||||||
|
1. Install the Git Updater plugin from [git-updater.com/git-updater/](https://git-updater.com/git-updater/)
|
||||||
|
2. Go to Settings > Git Updater > Remote Management
|
||||||
|
3. Click the "Refresh Cache" button to ensure Git Updater recognizes the latest version
|
||||||
|
4. Updates will now appear in your WordPress dashboard when available
|
||||||
|
|
||||||
|
### Choosing Your Update Source
|
||||||
|
|
||||||
|
This template includes functionality that allows users to choose where they want to receive updates from:
|
||||||
|
|
||||||
|
1. In the Plugins list, find your plugin
|
||||||
|
2. Click the "Update Source" link next to the plugin
|
||||||
|
3. Select your preferred update source:
|
||||||
|
* **WordPress.org**: Updates from the official WordPress.org repository
|
||||||
|
* **GitHub**: Updates directly from the GitHub repo
|
||||||
|
* **Gitea**: Updates directly from the Gitea repo
|
||||||
|
4. Click "Save" to apply your preference
|
||||||
|
|
||||||
|
## Frequently Asked Questions
|
||||||
|
|
||||||
|
### How do I customize this template for my plugin?
|
||||||
|
|
||||||
|
See the [Starter Prompt](.wiki/Starter-Prompt.md) file for detailed instructions on customizing this template for your specific plugin needs. Make sure to add the AGENTS.md file and .agents/ directory to your AI IDE chat context for the best results.
|
||||||
|
|
||||||
|
### What files do I need to update with my plugin information?
|
||||||
|
|
||||||
|
The main files you need to update include:
|
||||||
|
|
||||||
|
1. Main plugin file (rename and update header)
|
||||||
|
2. README.md
|
||||||
|
3. readme.txt
|
||||||
|
4. CHANGELOG.md
|
||||||
|
5. composer.json
|
||||||
|
6. package.json
|
||||||
|
7. languages/pot file
|
||||||
|
8. .github/workflows/
|
||||||
|
9. .wiki/
|
||||||
|
10. AGENTS.md
|
||||||
|
11. includes/plugin.php
|
||||||
|
12. includes/core.php
|
||||||
|
13. admin/lib/admin.php
|
||||||
|
|
||||||
|
### How do I build and test my plugin?
|
||||||
|
|
||||||
|
Use the included build.sh script to create a deployable version of your plugin:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build.sh {VERSION}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a ZIP file that you can install in WordPress.
|
||||||
|
|
||||||
|
### How do I add custom functionality to my plugin?
|
||||||
|
|
||||||
|
Customize the includes/core.php file to implement your core functionality and the admin/lib/admin.php file for admin-specific functionality.
|
||||||
|
|
||||||
|
### Is this template compatible with WordPress multisite?
|
||||||
|
|
||||||
|
Yes, this template is fully compatible with WordPress multisite installations. You can test multisite compatibility by running:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run multisite
|
||||||
|
```
|
||||||
|
|
||||||
|
## Support & Feedback
|
||||||
|
|
||||||
|
If you need help with this template, there are several ways to get support:
|
||||||
|
|
||||||
|
* [GitHub Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
* [Gitea Issues](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Contributions are welcome! Please feel free to submit a pull request or open an issue on the [GitHub repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding).
|
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||||
|
|
||||||
### Development Process
|
1. Fork the repository on [GitHub](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/) or [Gitea](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/)
|
||||||
|
2. Create your feature branch: `git checkout -b feature/amazing-feature`
|
||||||
1. Fork the repository
|
3. Commit your changes: `git commit -m 'Add some amazing feature'`
|
||||||
2. Create a feature branch: `git checkout -b feature/your-feature-name`
|
4. Push to the branch: `git push origin feature/amazing-feature`
|
||||||
3. Make your changes and commit them: `git commit -m 'Add some feature'`
|
|
||||||
4. Push to the branch: `git push origin feature/your-feature-name`
|
|
||||||
5. Submit a pull request
|
5. Submit a pull request
|
||||||
|
|
||||||
## Credits
|
For more detailed information, see the [Contributing Guide](.wiki/Contributing.md).
|
||||||
|
|
||||||
This template is maintained by [WPALLSTARS](https://www.wpallstars.com) and is based on the experience and best practices developed while creating the [Fix 'Plugin file does not exist' Notices](https://github.com/wpallstars/wp-fix-plugin-does-not-exist-notices) plugin.
|
### Code Quality Tools
|
||||||
|
|
||||||
|
This project uses several automated code quality tools to ensure high standards. These tools are free for public repositories and should be integrated into any new repositories based on this template:
|
||||||
|
|
||||||
|
1. **CodeRabbit**: AI-powered code review tool
|
||||||
|
* [Website](https://www.coderabbit.ai/)
|
||||||
|
* Provides automated feedback on pull requests
|
||||||
|
|
||||||
|
2. **CodeFactor**: Continuous code quality monitoring
|
||||||
|
* [Website](https://www.codefactor.io/)
|
||||||
|
* Provides a grade for your codebase
|
||||||
|
|
||||||
|
3. **Codacy**: Code quality and static analysis
|
||||||
|
* [Website](https://www.codacy.com/)
|
||||||
|
* Identifies issues related to code style, security, and performance
|
||||||
|
* Requires a `CODACY_PROJECT_TOKEN` secret in your GitHub repository settings
|
||||||
|
* To set up Codacy:
|
||||||
|
1. Go to [Codacy](https://www.codacy.com/) and sign in with your GitHub account
|
||||||
|
2. Add your repository to Codacy
|
||||||
|
3. Go to your project settings > Integrations > Project API
|
||||||
|
4. Generate a project API token
|
||||||
|
5. Add the token as a secret named `CODACY_PROJECT_TOKEN` in your GitHub repository settings
|
||||||
|
6. Note: Codacy tokens are project-specific, so they need to be added at the repository level. However, you can use GitHub Actions to securely pass these tokens between repositories if needed.
|
||||||
|
|
||||||
|
4. **SonarCloud**: Code quality and security analysis
|
||||||
|
* [Website](https://sonarcloud.io/)
|
||||||
|
* Provides detailed analysis of code quality and security
|
||||||
|
* Requires a `SONAR_TOKEN` secret in your GitHub repository settings
|
||||||
|
* To set up SonarCloud:
|
||||||
|
1. Go to [SonarCloud](https://sonarcloud.io/) and sign in with your GitHub account
|
||||||
|
2. Create a new organization or use an existing one
|
||||||
|
3. Add your repository to SonarCloud
|
||||||
|
4. Generate a token in SonarCloud (Account > Security > Tokens)
|
||||||
|
5. Add the token as a secret named `SONAR_TOKEN` in your GitHub repository or organization settings (see "GitHub Secrets Management" section below)
|
||||||
|
|
||||||
|
5. **PHP_CodeSniffer (PHPCS)**: PHP code style checker
|
||||||
|
* Enforces WordPress Coding Standards
|
||||||
|
* Automatically runs in GitHub Actions workflow
|
||||||
|
* Run locally with `composer phpcs`
|
||||||
|
|
||||||
|
6. **PHP Code Beautifier and Fixer (PHPCBF)**: Automatically fixes coding standard violations
|
||||||
|
* Run locally with `composer phpcbf`
|
||||||
|
|
||||||
|
7. **PHPStan**: PHP static analysis tool
|
||||||
|
* Detects bugs and errors without running the code
|
||||||
|
* Run locally with `composer phpstan`
|
||||||
|
|
||||||
|
8. **PHP Mess Detector (PHPMD)**: Analyzes code for potential problems
|
||||||
|
* Identifies complex code, unused parameters, etc.
|
||||||
|
* Run locally with `composer phpmd`
|
||||||
|
|
||||||
|
For detailed setup instructions, see the [Code Quality Setup Guide](docs/code-quality-setup.md).
|
||||||
|
|
||||||
|
### Using AI Assistants with Code Quality Tools
|
||||||
|
|
||||||
|
When you receive feedback from these code quality tools, you can use AI assistants to help address the issues:
|
||||||
|
|
||||||
|
1. Copy the output from the code quality tool
|
||||||
|
2. Paste it into your AI assistant chat
|
||||||
|
3. Ask the AI to help you understand and resolve the issues
|
||||||
|
4. Apply the suggested fixes
|
||||||
|
5. Commit the changes and verify that the issues are resolved
|
||||||
|
|
||||||
|
For more information on coding standards and how to pass code quality checks, see the [Coding Standards Guide](.wiki/Coding-Standards.md).
|
||||||
|
|
||||||
|
### GitHub Secrets Management
|
||||||
|
|
||||||
|
GitHub offers three levels of secrets management, each with different scopes and use cases:
|
||||||
|
|
||||||
|
1. **Organization Secrets** (recommended for teams and organizations):
|
||||||
|
* Available at: GitHub Organization > Settings > Secrets and variables > Actions
|
||||||
|
* Scope: Can be shared across multiple repositories within the organization
|
||||||
|
* Benefits: Centralized management, reduced duplication, easier rotation
|
||||||
|
* Recommended for: `SONAR_TOKEN` and other tokens that apply to multiple repositories
|
||||||
|
* Note: You can restrict which repositories can access organization secrets
|
||||||
|
* Note: Codacy tokens (`CODACY_PROJECT_TOKEN`) are project-specific and should be set at the repository level
|
||||||
|
|
||||||
|
2. **Repository Secrets**:
|
||||||
|
* Available at: Repository > Settings > Secrets and variables > Actions
|
||||||
|
* Scope: Limited to a single repository
|
||||||
|
* Benefits: Repository-specific, higher isolation
|
||||||
|
* Recommended for: `CODACY_PROJECT_TOKEN` and other repository-specific credentials or tokens that shouldn't be shared
|
||||||
|
|
||||||
|
3. **Environment Secrets**:
|
||||||
|
* Available at: Repository > Settings > Environments > (select environment) > Environment secrets
|
||||||
|
* Scope: Limited to specific deployment environments (e.g., production, staging)
|
||||||
|
* Benefits: Environment-specific, can have approval requirements
|
||||||
|
* Recommended for: Deployment credentials that vary between environments
|
||||||
|
|
||||||
|
For code quality tools like SonarCloud, organization secrets are recommended if you have multiple repositories that use these tools. This approach reduces management overhead and ensures consistent configuration across projects. For Codacy, since tokens are project-specific, they should be set at the repository level.
|
||||||
|
|
||||||
|
### Local Environment Setup for Code Quality Tools
|
||||||
|
|
||||||
|
To run code quality tools locally before committing to GitHub:
|
||||||
|
|
||||||
|
1. **Install dependencies**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Run PHP CodeSniffer**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpcs
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Fix coding standards automatically**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpcbf
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Run PHPStan static analysis**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpstan
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Run PHP Mess Detector**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer phpmd
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Run all linters at once**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer lint
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Set up environment variables for SonarCloud and Codacy**:
|
||||||
|
|
||||||
|
* **For macOS/Linux**:
|
||||||
|
```bash
|
||||||
|
export SONAR_TOKEN=your_sonar_token
|
||||||
|
export CODACY_PROJECT_TOKEN=your_codacy_token
|
||||||
|
```
|
||||||
|
|
||||||
|
* **For Windows (Command Prompt)**:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
set SONAR_TOKEN=your_sonar_token
|
||||||
|
set CODACY_PROJECT_TOKEN=your_codacy_token
|
||||||
|
```
|
||||||
|
|
||||||
|
* **For Windows (PowerShell)**:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
$env:SONAR_TOKEN="your_sonar_token"
|
||||||
|
$env:CODACY_PROJECT_TOKEN="your_codacy_token"
|
||||||
|
```
|
||||||
|
|
||||||
|
8. **Create a .env file** (alternative approach):
|
||||||
|
|
||||||
|
```env
|
||||||
|
# .env (already included in .gitignore to prevent committing secrets)
|
||||||
|
SONAR_TOKEN=your_sonar_token
|
||||||
|
CODACY_PROJECT_TOKEN=your_codacy_token
|
||||||
|
```
|
||||||
|
|
||||||
|
Then load these variables:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using a tool like dotenv
|
||||||
|
source .env
|
||||||
|
```
|
||||||
|
|
||||||
|
9. **Run SonarCloud locally**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install SonarScanner
|
||||||
|
npm install -g sonarqube-scanner
|
||||||
|
|
||||||
|
# Run analysis
|
||||||
|
sonar-scanner \
|
||||||
|
-Dsonar.projectKey=your_project_key \
|
||||||
|
-Dsonar.organization=your_organization \
|
||||||
|
-Dsonar.sources=. \
|
||||||
|
-Dsonar.host.url=https://sonarcloud.io \
|
||||||
|
-Dsonar.login=$SONAR_TOKEN
|
||||||
|
```
|
||||||
|
|
||||||
|
10. **Run Codacy locally**:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install Codacy CLI
|
||||||
|
npm install -g codacy-coverage
|
||||||
|
|
||||||
|
# Run analysis
|
||||||
|
codacy-analysis-cli analyze --directory . --project-token $CODACY_PROJECT_TOKEN
|
||||||
|
```
|
||||||
|
|
||||||
|
For more detailed instructions, see the [Code Quality Setup Guide](docs/code-quality-setup.md).
|
||||||
|
|
||||||
|
By running these tools locally, you can identify and fix issues before pushing your code to GitHub, ensuring smoother CI/CD workflows.
|
||||||
|
|
||||||
|
## Developers
|
||||||
|
|
||||||
|
### AI-Powered Development
|
||||||
|
|
||||||
|
This repository is configured to work with various AI-powered development tools. You can use any of the following AI IDEs to contribute to this project:
|
||||||
|
|
||||||
|
* [Augment Code](https://www.augmentcode.com/) - AI-powered coding assistant
|
||||||
|
* [Bolt](https://www.bolt.new/) - AI-powered code editor
|
||||||
|
* [Cline](https://cline.bot/) - AI terminal assistant
|
||||||
|
* [Cody](https://sourcegraph.com/cody) - Sourcegraph's AI coding assistant
|
||||||
|
* [Continue](https://continue.dev/) - Open-source AI coding assistant
|
||||||
|
* [Cursor](https://cursor.com/) - AI-first code editor
|
||||||
|
* [Loveable](https://lovable.dev/) - AI development environment
|
||||||
|
* [Roo Code](https://roocode.com/) - AI pair programmer
|
||||||
|
* [v0](https://v0.dev/) - AI-powered design and development tool
|
||||||
|
* [Windsurf](https://www.windsurf.com/) - AI coding assistant
|
||||||
|
|
||||||
|
The repository includes configuration files for all these tools to ensure a consistent development experience.
|
||||||
|
|
||||||
|
### Git Updater Integration
|
||||||
|
|
||||||
|
This template is designed to work seamlessly with the Git Updater plugin for updates from GitHub and Gitea. To ensure proper integration:
|
||||||
|
|
||||||
|
1. **Required Headers**: The plugin includes specific headers in the main plugin file that Git Updater uses to determine update sources and branches:
|
||||||
|
```php
|
||||||
|
* GitHub Plugin URI: wpallstars/wp-plugin-starter-template-for-ai-coding
|
||||||
|
* GitHub Branch: main
|
||||||
|
* Primary Branch: main
|
||||||
|
* Release Branch: main
|
||||||
|
* Release Asset: true
|
||||||
|
* Gitea Plugin URI: https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding
|
||||||
|
* Gitea Branch: main
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Tagging Releases**: When creating a new release, always tag it with the 'v' prefix (e.g., `v0.1.2`) to ensure GitHub Actions can create the proper release assets.
|
||||||
|
|
||||||
|
3. **GitHub Actions**: The repository includes a GitHub Actions workflow that automatically builds the plugin and creates a release with the .zip file when a new tag is pushed.
|
||||||
|
|
||||||
|
4. **Update Source Selection**: The template includes a feature that allows users to choose their preferred update source (WordPress.org, GitHub, or Gitea).
|
||||||
|
|
||||||
|
For more information on Git Updater integration, see the [Git Updater Required Headers documentation](https://git-updater.com/knowledge-base/required-headers/).
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### 0.1.13
|
||||||
|
|
||||||
|
* Improved: Code quality with proper type declarations
|
||||||
|
* Fixed: Inconsistent variable naming (camelCase to snake_case)
|
||||||
|
* Improved: Path handling in admin class
|
||||||
|
* Added: Textdomain loading functionality
|
||||||
|
* Removed: Unused phpcs:ignore comment
|
||||||
|
* Implemented: Proper return type declarations
|
||||||
|
|
||||||
|
### 0.1.12
|
||||||
|
|
||||||
|
* Fixed: WordPress mocking in unit tests
|
||||||
|
* Added: Proper mocking for WordPress functions in tests
|
||||||
|
* Improved: Code quality tool configurations
|
||||||
|
* Added: Detailed code quality checks workflow documentation
|
||||||
|
* Updated: Documentation for better workflow efficiency
|
||||||
|
|
||||||
|
### 0.1.11
|
||||||
|
|
||||||
|
* Improved: Code quality with comprehensive fixes
|
||||||
|
* Fixed: Indentation issues in PHP files
|
||||||
|
* Updated: CSS formatting with modern notation
|
||||||
|
* Fixed: JavaScript issues with proper global variables
|
||||||
|
* Improved: Security by using filter_input() instead of direct superglobal access
|
||||||
|
* Standardized: Naming conventions across the codebase
|
||||||
|
* Fixed: Documentation and comments for better clarity
|
||||||
|
|
||||||
|
### 0.1.10
|
||||||
|
|
||||||
|
* Fixed: Formatting issues in markdown files for better code quality
|
||||||
|
* Fixed: Improved URL formatting with angle brackets
|
||||||
|
* Fixed: Standardized list formatting across documentation files
|
||||||
|
|
||||||
|
### 0.1.9
|
||||||
|
|
||||||
|
* Changed: Alphabetized AI IDE list.
|
||||||
|
|
||||||
|
### 0.1.8
|
||||||
|
|
||||||
|
* Added: More informative badges (Build Status, Requirements, WP.org placeholders, Release, Issues, Contributors, Wiki).
|
||||||
|
|
||||||
|
### 0.1.7
|
||||||
|
|
||||||
|
* Fixed: GitHub Actions tests workflow with proper file paths and dependencies
|
||||||
|
|
||||||
|
### 0.1.6
|
||||||
|
|
||||||
|
* Fixed: GitHub Actions workflows permissions for releases and wiki sync
|
||||||
|
|
||||||
|
### 0.1.5
|
||||||
|
|
||||||
|
* Fixed: Release workflow to use correct plugin directory name
|
||||||
|
* Added: Testing setup with wp-env and Cypress
|
||||||
|
* Added: Multisite compatibility
|
||||||
|
* Added: npm scripts for development and testing
|
||||||
|
|
||||||
|
### 0.1.3
|
||||||
|
|
||||||
|
* Added: Improved AI IDE context recommendations in documentation
|
||||||
|
* Enhanced: Starter Prompt with guidance on pinning AGENTS.md and .agents/
|
||||||
|
* Moved: Starter Prompt to the wiki for better organization
|
||||||
|
* Updated: README.md and readme.txt with AI IDE context recommendations
|
||||||
|
* Improved: Documentation for AI-assisted development
|
||||||
|
|
||||||
|
### 0.1.2
|
||||||
|
|
||||||
|
* Added: STARTER-PROMPT.md with comprehensive guide for customizing the template
|
||||||
|
* Updated: Documentation files with improved instructions
|
||||||
|
* Added: Additional AI workflow files for better development guidance
|
||||||
|
|
||||||
|
### 0.1.1
|
||||||
|
|
||||||
|
* Updated: LICENSE file with correct GPL-2.0 text
|
||||||
|
|
||||||
|
### 0.1.0
|
||||||
|
|
||||||
|
* Initial release with basic template structure
|
||||||
|
* Added: Core plugin architecture with OOP approach
|
||||||
|
* Added: Admin interface components and styling
|
||||||
|
* Added: Update mechanism with multiple source options
|
||||||
|
* Added: Documentation templates for users and developers
|
||||||
|
* Added: AI workflow documentation for AI-assisted development
|
||||||
|
* Added: GitHub Actions workflows for automated tasks
|
||||||
|
* Added: Wiki documentation templates
|
||||||
|
|
||||||
|
[View full changelog](CHANGELOG.md)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This project is licensed under the GPL-2.0+ License - see the [LICENSE](LICENSE) file for details.
|
This project is licensed under the GPL-2.0+ License - see the [LICENSE](LICENSE) file for details.
|
||||||
|
|
||||||
## Changelog
|
## Credits
|
||||||
|
|
||||||
### 0.1.0
|
This template is based on the experience gained from developing the ["Fix 'Plugin file does not exist' Notices"](https://github.com/wpallstars/wp-fix-plugin-does-not-exist-notices) plugin by WPALLSTARS.
|
||||||
- Initial release with basic template structure
|
|
||||||
- Added core plugin architecture
|
|
||||||
- Added admin interface components
|
|
||||||
- Added documentation templates
|
|
||||||
- Added AI workflow documentation
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
padding: 20px;
|
padding: 20px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 1px 3px rgb(0 0 0 / 10%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.wpst-admin-header {
|
.wpst-admin-header {
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
padding: 20px;
|
padding: 20px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 1px 3px rgb(0 0 0 / 10%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.wpst-card-header {
|
.wpst-card-header {
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Responsive Styles */
|
/* Responsive Styles */
|
||||||
@media screen and (max-width: 782px) {
|
@media screen and (width <= 782px) {
|
||||||
.wpst-form-table th {
|
.wpst-form-table th {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
display: block;
|
display: block;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
background-color: rgba(0, 0, 0, 0.4);
|
background-color: rgb(0 0 0 / 40%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.wpst-modal-content {
|
.wpst-modal-content {
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
margin: 10% auto;
|
margin: 10% auto;
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
box-shadow: 0 4px 8px rgb(0 0 0 / 10%);
|
||||||
width: 500px;
|
width: 500px;
|
||||||
max-width: 90%;
|
max-width: 90%;
|
||||||
}
|
}
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
top: 10px;
|
top: 10px;
|
||||||
right: 15px;
|
right: 15px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
font-weight: bold;
|
font-weight: 700;
|
||||||
color: #666;
|
color: #666;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
@@ -108,7 +108,7 @@
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
border: 2px solid rgba(0, 0, 0, 0.1);
|
border: 2px solid rgb(0 0 0 / 10%);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
border-top-color: #0073aa;
|
border-top-color: #0073aa;
|
||||||
animation: wpst-spin 1s ease-in-out infinite;
|
animation: wpst-spin 1s ease-in-out infinite;
|
||||||
|
|||||||
+29
-19
@@ -15,10 +15,10 @@
|
|||||||
* Initialize
|
* Initialize
|
||||||
*/
|
*/
|
||||||
init: function () {
|
init: function () {
|
||||||
// Initialize components
|
// Initialize components.
|
||||||
this.initComponents();
|
this.initComponents();
|
||||||
|
|
||||||
// Bind events
|
// Bind events.
|
||||||
this.bindEvents();
|
this.bindEvents();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -26,17 +26,17 @@
|
|||||||
* Initialize components
|
* Initialize components
|
||||||
*/
|
*/
|
||||||
initComponents: function () {
|
initComponents: function () {
|
||||||
// Initialize any components here
|
// Initialize any components here.
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bind events
|
* Bind events
|
||||||
*/
|
*/
|
||||||
bindEvents: function () {
|
bindEvents: function () {
|
||||||
// Example: Toggle sections
|
// Example: Toggle sections.
|
||||||
$( '.wpst-toggle-section' ).on( 'click', this.toggleSection );
|
$( '.wpst-toggle-section' ).on( 'click', this.toggleSection );
|
||||||
|
|
||||||
// Example: Form submission
|
// Example: Form submission.
|
||||||
$( '#wpst-settings-form' ).on( 'submit', this.handleFormSubmit );
|
$( '#wpst-settings-form' ).on( 'submit', this.handleFormSubmit );
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -67,11 +67,12 @@
|
|||||||
const $submitButton = $form.find( 'input[type="submit"]' );
|
const $submitButton = $form.find( 'input[type="submit"]' );
|
||||||
const formData = $form.serialize();
|
const formData = $form.serialize();
|
||||||
|
|
||||||
// Disable submit button and show loading state
|
// Disable submit button and show loading state.
|
||||||
$submitButton.prop( 'disabled', true ).addClass( 'loading' );
|
$submitButton.prop( 'disabled', true ).addClass( 'loading' );
|
||||||
|
|
||||||
// Send AJAX request
|
// Send AJAX request.
|
||||||
$.ajax({
|
$.ajax(
|
||||||
|
{
|
||||||
url: wpstData.ajaxUrl,
|
url: wpstData.ajaxUrl,
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: {
|
||||||
@@ -90,10 +91,11 @@
|
|||||||
WPSTAdmin.showNotice( 'error', 'An error occurred. Please try again.' );
|
WPSTAdmin.showNotice( 'error', 'An error occurred. Please try again.' );
|
||||||
},
|
},
|
||||||
complete: function () {
|
complete: function () {
|
||||||
// Re-enable submit button and remove loading state
|
// Re-enable submit button and remove loading state.
|
||||||
$submitButton.prop( 'disabled', false ).removeClass( 'loading' );
|
$submitButton.prop( 'disabled', false ).removeClass( 'loading' );
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -105,21 +107,29 @@
|
|||||||
showNotice: function (type, message) {
|
showNotice: function (type, message) {
|
||||||
const $notice = $( '<div class="wpst-notice ' + type + '"><p>' + message + '</p></div>' );
|
const $notice = $( '<div class="wpst-notice ' + type + '"><p>' + message + '</p></div>' );
|
||||||
|
|
||||||
// Add notice to the page
|
// Add notice to the page.
|
||||||
$( '.wpst-notices' ).html( $notice );
|
$( '.wpst-notices' ).html( $notice );
|
||||||
|
|
||||||
// Automatically remove notice after 5 seconds
|
// Automatically remove notice after 5 seconds.
|
||||||
setTimeout(function() {
|
setTimeout(
|
||||||
$notice.fadeOut(300, function() {
|
function () {
|
||||||
|
$notice.fadeOut(
|
||||||
|
300,
|
||||||
|
function () {
|
||||||
$( this ).remove();
|
$( this ).remove();
|
||||||
});
|
}
|
||||||
}, 5000);
|
);
|
||||||
|
},
|
||||||
|
5000
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initialize when document is ready
|
// Initialize when document is ready.
|
||||||
$(document).ready(function() {
|
$( document ).ready(
|
||||||
|
function () {
|
||||||
WPSTAdmin.init();
|
WPSTAdmin.init();
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
})( jQuery );
|
})( jQuery );
|
||||||
@@ -25,10 +25,10 @@
|
|||||||
* Initialize
|
* Initialize
|
||||||
*/
|
*/
|
||||||
init: function () {
|
init: function () {
|
||||||
// Cache DOM elements
|
// Cache DOM elements.
|
||||||
this.$modal = $( '#wpst-update-source-modal' );
|
this.$modal = $( '#wpst-update-source-modal' );
|
||||||
|
|
||||||
// Bind events
|
// Bind events.
|
||||||
this.bindEvents();
|
this.bindEvents();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -36,21 +36,25 @@
|
|||||||
* Bind events
|
* Bind events
|
||||||
*/
|
*/
|
||||||
bindEvents: function () {
|
bindEvents: function () {
|
||||||
// Open modal when clicking on the update source link
|
// Open modal when clicking on the update source link.
|
||||||
$( document ).on( 'click', '.wpst-update-source-selector', this.openModal.bind( this ) );
|
$( document ).on( 'click', '.wpst-update-source-selector', this.openModal.bind( this ) );
|
||||||
|
|
||||||
// Close modal when clicking on the close button or outside the modal
|
// Close modal when clicking on the close button or outside the modal.
|
||||||
this.$modal.on( 'click', '.wpst-modal-close', this.closeModal.bind( this ) );
|
this.$modal.on( 'click', '.wpst-modal-close', this.closeModal.bind( this ) );
|
||||||
$(document).on('click', '.wpst-modal', function(e) {
|
$( document ).on(
|
||||||
|
'click',
|
||||||
|
'.wpst-modal',
|
||||||
|
function (e) {
|
||||||
if ($( e.target ).hasClass( 'wpst-modal' )) {
|
if ($( e.target ).hasClass( 'wpst-modal' )) {
|
||||||
WPSTUpdateSourceSelector.closeModal();
|
WPSTUpdateSourceSelector.closeModal();
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
// Select source option
|
// Select source option.
|
||||||
this.$modal.on( 'click', '.wpst-source-option', this.selectSource.bind( this ) );
|
this.$modal.on( 'click', '.wpst-source-option', this.selectSource.bind( this ) );
|
||||||
|
|
||||||
// Save source selection
|
// Save source selection.
|
||||||
this.$modal.on( 'click', '#wpst-save-source', this.saveSource.bind( this ) );
|
this.$modal.on( 'click', '#wpst-save-source', this.saveSource.bind( this ) );
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -79,14 +83,14 @@
|
|||||||
selectSource: function (e) {
|
selectSource: function (e) {
|
||||||
const $option = $( e.currentTarget );
|
const $option = $( e.currentTarget );
|
||||||
|
|
||||||
// Update selected state
|
// Update selected state.
|
||||||
this.$modal.find( '.wpst-source-option' ).removeClass( 'selected' );
|
this.$modal.find( '.wpst-source-option' ).removeClass( 'selected' );
|
||||||
$option.addClass( 'selected' );
|
$option.addClass( 'selected' );
|
||||||
|
|
||||||
// Update radio button
|
// Update radio button.
|
||||||
$option.find( 'input[type="radio"]' ).prop( 'checked', true );
|
$option.find( 'input[type="radio"]' ).prop( 'checked', true );
|
||||||
|
|
||||||
// Store selected source
|
// Store selected source.
|
||||||
this.selectedSource = $option.find( 'input[type="radio"]' ).val();
|
this.selectedSource = $option.find( 'input[type="radio"]' ).val();
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -94,33 +98,37 @@
|
|||||||
* Save the selected source
|
* Save the selected source
|
||||||
*/
|
*/
|
||||||
saveSource: function () {
|
saveSource: function () {
|
||||||
// Validate selection
|
// Validate selection.
|
||||||
if ( ! this.selectedSource) {
|
if ( ! this.selectedSource) {
|
||||||
this.showMessage( 'error', 'Please select an update source.' );
|
this.showMessage( 'error', 'Please select an update source.' );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show loading state
|
// Show loading state.
|
||||||
const $saveButton = $( '#wpst-save-source' );
|
const $saveButton = $( '#wpst-save-source' );
|
||||||
$saveButton.prop( 'disabled', true ).html( '<span class="wpst-loading"></span> Saving...' );
|
$saveButton.prop( 'disabled', true ).html( '<span class="wpst-loading"></span> Saving...' );
|
||||||
|
|
||||||
// Send AJAX request
|
// Send AJAX request.
|
||||||
$.ajax({
|
$.ajax(
|
||||||
url: wpstModalData.ajaxUrl,
|
{
|
||||||
|
url: wpstModalData.ajaxUrl, // WordPress AJAX URL.
|
||||||
type: 'POST',
|
type: 'POST',
|
||||||
data: {
|
data: {
|
||||||
action: 'wpst_set_update_source',
|
action: 'wpst_set_update_source', // AJAX action hook.
|
||||||
nonce: wpstModalData.nonce,
|
nonce: wpstModalData.nonce, // Security nonce.
|
||||||
source: this.selectedSource
|
source: this.selectedSource
|
||||||
},
|
},
|
||||||
success: function (response) {
|
success: function (response) {
|
||||||
if (response.success) {
|
if (response.success) {
|
||||||
WPSTUpdateSourceSelector.showMessage( 'success', response.data.message );
|
WPSTUpdateSourceSelector.showMessage( 'success', response.data.message );
|
||||||
|
|
||||||
// Close modal after a short delay
|
// Close modal after a short delay.
|
||||||
setTimeout(function() {
|
setTimeout(
|
||||||
|
function () {
|
||||||
WPSTUpdateSourceSelector.closeModal();
|
WPSTUpdateSourceSelector.closeModal();
|
||||||
}, 1500);
|
},
|
||||||
|
1500
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
WPSTUpdateSourceSelector.showMessage( 'error', response.data.message );
|
WPSTUpdateSourceSelector.showMessage( 'error', response.data.message );
|
||||||
}
|
}
|
||||||
@@ -129,10 +137,11 @@
|
|||||||
WPSTUpdateSourceSelector.showMessage( 'error', 'An error occurred. Please try again.' );
|
WPSTUpdateSourceSelector.showMessage( 'error', 'An error occurred. Please try again.' );
|
||||||
},
|
},
|
||||||
complete: function () {
|
complete: function () {
|
||||||
// Reset button state
|
// Reset button state.
|
||||||
$saveButton.prop( 'disabled', false ).text( wpstModalData.i18n.confirm );
|
$saveButton.prop( 'disabled', false ).text( wpstModalData.i18n.confirm );
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
|
);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -144,21 +153,26 @@
|
|||||||
showMessage: function (type, message) {
|
showMessage: function (type, message) {
|
||||||
const $message = this.$modal.find( '.wpst-modal-message' );
|
const $message = this.$modal.find( '.wpst-modal-message' );
|
||||||
|
|
||||||
// Set message content and type
|
// Set message content and type.
|
||||||
$message.html( message ).removeClass( 'success error' ).addClass( type ).show();
|
$message.html( message ).removeClass( 'success error' ).addClass( type ).show();
|
||||||
|
|
||||||
// Hide message after a delay for success messages
|
// Hide message after a delay for success messages.
|
||||||
if (type === 'success') {
|
if (type === 'success') {
|
||||||
setTimeout(function() {
|
setTimeout(
|
||||||
|
function () {
|
||||||
$message.fadeOut( 300 );
|
$message.fadeOut( 300 );
|
||||||
}, 3000);
|
},
|
||||||
|
3000
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// Initialize when document is ready
|
// Initialize when document is ready.
|
||||||
$(document).ready(function() {
|
$( document ).ready(
|
||||||
|
function () {
|
||||||
WPSTUpdateSourceSelector.init();
|
WPSTUpdateSourceSelector.init();
|
||||||
});
|
}
|
||||||
|
);
|
||||||
|
|
||||||
})( jQuery );
|
})( jQuery );
|
||||||
@@ -1 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* Admin area specific functions.
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate\Admin\Lib
|
||||||
|
* @file
|
||||||
|
*/
|
||||||
@@ -1 +1,14 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* Modal related functions for the admin area.
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate\Admin\Lib
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* File: modal.php
|
||||||
|
* Description: Modal related functions for the admin area.
|
||||||
|
* Version: 1.0
|
||||||
|
* Author: Your Name
|
||||||
|
* Author URI: https://yourwebsite.com
|
||||||
|
*/
|
||||||
+11
-19
@@ -2,11 +2,11 @@
|
|||||||
/**
|
/**
|
||||||
* Modal Template
|
* Modal Template
|
||||||
*
|
*
|
||||||
* @package WPALLSTARS\PluginStarterTemplate
|
* @package WPALLSTARS\PluginStarterTemplate\Admin\Templates
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// If this file is called directly, abort.
|
// Ensure this file is loaded within WordPress.
|
||||||
if (!defined('WPINC')) {
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
die;
|
die;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
@@ -26,40 +26,32 @@ if (!defined('WPINC')) {
|
|||||||
|
|
||||||
<div class="wpst-source-options">
|
<div class="wpst-source-options">
|
||||||
<?php
|
<?php
|
||||||
// Get current update source
|
// Get current update source.
|
||||||
$current_source = get_option( 'wpst_update_source', 'wordpress.org' );
|
$current_source = get_option( 'wpst_update_source', 'wordpress.org' );
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<label class="wpst-source-option <?php echo $current_source === 'wordpress.org' ? 'selected' : ''; ?>">
|
<label class="wpst-source-option <?php echo 'wordpress.org' === $current_source ? 'selected' : ''; ?>">
|
||||||
<input type="radio" name="update_source" value="wordpress.org" <?php checked( $current_source, 'wordpress.org' ); ?>>
|
<input type="radio" name="update_source" value="wordpress.org" <?php checked( $current_source, 'wordpress.org' ); ?>>
|
||||||
<span class="wpst-source-option-label"><?php esc_html_e( 'WordPress.org', 'wp-plugin-starter-template' ); ?></span>
|
<span class="wpst-source-option-label"><?php esc_html_e( 'WordPress.org', 'wp-plugin-starter-template' ); ?></span>
|
||||||
<div class="wpst-source-option-description">
|
<div class="wpst-source-option-description"><?php esc_html_e( 'Receive updates from the official WordPress.org repository. Recommended for most users.', 'wp-plugin-starter-template' ); ?></div>
|
||||||
<?php esc_html_e('Receive updates from the official WordPress.org repository. Recommended for most users.', 'wp-plugin-starter-template'); ?>
|
|
||||||
</div>
|
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="wpst-source-option <?php echo $current_source === 'github' ? 'selected' : ''; ?>">
|
<label class="wpst-source-option <?php echo 'github' === $current_source ? 'selected' : ''; ?>">
|
||||||
<input type="radio" name="update_source" value="github" <?php checked( $current_source, 'github' ); ?>>
|
<input type="radio" name="update_source" value="github" <?php checked( $current_source, 'github' ); ?>>
|
||||||
<span class="wpst-source-option-label"><?php esc_html_e( 'GitHub', 'wp-plugin-starter-template' ); ?></span>
|
<span class="wpst-source-option-label"><?php esc_html_e( 'GitHub', 'wp-plugin-starter-template' ); ?></span>
|
||||||
<div class="wpst-source-option-description">
|
<div class="wpst-source-option-description"><?php esc_html_e( 'Receive updates from the GitHub repository. May include pre-release versions.', 'wp-plugin-starter-template' ); ?></div>
|
||||||
<?php esc_html_e('Receive updates from the GitHub repository. May include pre-release versions.', 'wp-plugin-starter-template'); ?>
|
|
||||||
</div>
|
|
||||||
</label>
|
</label>
|
||||||
|
|
||||||
<label class="wpst-source-option <?php echo $current_source === 'gitea' ? 'selected' : ''; ?>">
|
<label class="wpst-source-option <?php echo 'gitea' === $current_source ? 'selected' : ''; ?>">
|
||||||
<input type="radio" name="update_source" value="gitea" <?php checked( $current_source, 'gitea' ); ?>>
|
<input type="radio" name="update_source" value="gitea" <?php checked( $current_source, 'gitea' ); ?>>
|
||||||
<span class="wpst-source-option-label"><?php esc_html_e( 'Gitea', 'wp-plugin-starter-template' ); ?></span>
|
<span class="wpst-source-option-label"><?php esc_html_e( 'Gitea', 'wp-plugin-starter-template' ); ?></span>
|
||||||
<div class="wpst-source-option-description">
|
<div class="wpst-source-option-description"><?php esc_html_e( 'Receive updates from the Gitea repository. May include pre-release versions.', 'wp-plugin-starter-template' ); ?></div>
|
||||||
<?php esc_html_e('Receive updates from the Gitea repository. May include pre-release versions.', 'wp-plugin-starter-template'); ?>
|
|
||||||
</div>
|
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="wpst-modal-footer">
|
<div class="wpst-modal-footer">
|
||||||
<button type="button" id="wpst-save-source" class="button button-primary">
|
<button type="button" id="wpst-save-source" class="button button-primary"><?php esc_html_e( 'Save', 'wp-plugin-starter-template' ); ?></button>
|
||||||
<?php esc_html_e('Save', 'wp-plugin-starter-template'); ?>
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/**
|
||||||
|
* Admin styles for the plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
.wpst-admin-container {
|
||||||
|
padding: 20px;
|
||||||
|
background: #fff;
|
||||||
|
border: 1px solid #ccd0d4;
|
||||||
|
box-shadow: 0 1px 1px rgb(0 0 0 / 4%);
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wpst-admin-header {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wpst-admin-header h1 {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* Admin scripts for the plugin
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function($) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
// Plugin admin functionality will go here
|
||||||
|
});
|
||||||
|
|
||||||
|
})(jQuery);
|
||||||
@@ -20,6 +20,19 @@ echo "Creating build directory..."
|
|||||||
rm -rf "$BUILD_DIR"
|
rm -rf "$BUILD_DIR"
|
||||||
mkdir -p "$BUILD_DIR"
|
mkdir -p "$BUILD_DIR"
|
||||||
|
|
||||||
|
# Run code quality checks
|
||||||
|
echo "Running code quality checks..."
|
||||||
|
if command -v composer &> /dev/null; then
|
||||||
|
echo "Running PHPCS..."
|
||||||
|
composer run phpcs || { echo "⚠️ PHPCS found issues. Consider running 'composer run phpcbf' to fix them."; }
|
||||||
|
|
||||||
|
# Uncomment the following line to automatically fix coding standards issues
|
||||||
|
# echo "Running PHPCBF..."
|
||||||
|
# composer run phpcbf
|
||||||
|
else
|
||||||
|
echo "⚠️ Composer not found, skipping code quality checks"
|
||||||
|
fi
|
||||||
|
|
||||||
# Install composer dependencies
|
# Install composer dependencies
|
||||||
echo "Installing composer dependencies..."
|
echo "Installing composer dependencies..."
|
||||||
composer install --no-dev --optimize-autoloader
|
composer install --no-dev --optimize-autoloader
|
||||||
|
|||||||
+35
-12
@@ -1,36 +1,59 @@
|
|||||||
{
|
{
|
||||||
"name": "wpallstars/wp-plugin-starter-template",
|
"name": "wpallstars/wp-plugin-starter-template-for-ai-coding",
|
||||||
"description": "A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.",
|
"description": "A starter template for WordPress plugins with AI development workflows.",
|
||||||
"type": "wordpress-plugin",
|
"type": "wordpress-plugin",
|
||||||
|
"version": "0.1.15",
|
||||||
"license": "GPL-2.0-or-later",
|
"license": "GPL-2.0-or-later",
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
"name": "WPALLSTARS",
|
"name": "WP All Stars",
|
||||||
"email": "info@wpallstars.com"
|
"email": "support@wpallstars.com"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.0"
|
"php": ">=7.4"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^7.5",
|
"phpunit/phpunit": "^9.5.0",
|
||||||
"squizlabs/php_codesniffer": "^3.5",
|
"10up/wp_mock": "^1.0",
|
||||||
"wp-coding-standards/wpcs": "^2.3"
|
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
|
||||||
|
"wp-coding-standards/wpcs": "^3.0",
|
||||||
|
"phpcompatibility/phpcompatibility-wp": "^2.1",
|
||||||
|
"phpstan/phpstan": "^1.10.0",
|
||||||
|
"szepeviktor/phpstan-wordpress": "^1.3",
|
||||||
|
"phpmd/phpmd": "^2.13.0",
|
||||||
|
"symfony/dependency-injection": "^5.4",
|
||||||
|
"symfony/config": "^5.4",
|
||||||
|
"symfony/filesystem": "^5.4",
|
||||||
|
"symfony/deprecation-contracts": "^2.5",
|
||||||
|
"doctrine/instantiator": "^1.5.0",
|
||||||
|
"psr/log": "^1.1"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"WPALLSTARS\\PluginStarterTemplate\\": "includes/"
|
"WPALLSTARS\\PluginStarterTemplate\\": "includes/"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"scripts": {
|
"autoload-dev": {
|
||||||
"phpcs": "phpcs --standard=WordPress",
|
"classmap": [
|
||||||
"phpcbf": "phpcbf --standard=WordPress",
|
"includes/Admin/class-admin.php"
|
||||||
"test": "phpunit"
|
]
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"allow-plugins": {
|
"allow-plugins": {
|
||||||
"dealerdirect/phpcodesniffer-composer-installer": true
|
"dealerdirect/phpcodesniffer-composer-installer": true
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"phpcs": "vendor/bin/phpcs --standard=phpcs.xml",
|
||||||
|
"phpcs:simple": "vendor/bin/phpcs --standard=phpcs-simple.xml",
|
||||||
|
"phpcbf": "vendor/bin/phpcbf --standard=phpcs.xml",
|
||||||
|
"phpcbf:simple": "vendor/bin/phpcbf --standard=phpcs-simple.xml",
|
||||||
|
"phpstan": "vendor/bin/phpstan analyse --level=5 .",
|
||||||
|
"phpmd": "vendor/bin/phpmd . text cleancode,codesize,controversial,design,naming,unusedcode --exclude vendor,node_modules,tests,bin,build,dist",
|
||||||
|
"test": "vendor/bin/phpunit",
|
||||||
|
"lint": ["@phpcs", "@phpstan", "@phpmd"],
|
||||||
|
"fix": ["@phpcbf"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Generated
+3937
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,107 @@
|
|||||||
|
# Code Quality Tools Setup
|
||||||
|
|
||||||
|
This document explains how to set up and use the code quality tools for this project.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
* PHP 7.4 or higher
|
||||||
|
* Composer
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
1. Clone the repository:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding.git
|
||||||
|
cd wp-plugin-starter-template-for-ai-coding
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Install dependencies:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Tools
|
||||||
|
|
||||||
|
### PHP CodeSniffer (PHPCS)
|
||||||
|
|
||||||
|
PHPCS checks your code against the WordPress Coding Standards.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run PHPCS
|
||||||
|
composer phpcs
|
||||||
|
|
||||||
|
# Run PHPCS with a simplified ruleset
|
||||||
|
composer phpcs:simple
|
||||||
|
```
|
||||||
|
|
||||||
|
### PHP Code Beautifier and Fixer (PHPCBF)
|
||||||
|
|
||||||
|
PHPCBF automatically fixes coding standard violations.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run PHPCBF to fix coding standard violations
|
||||||
|
composer phpcbf
|
||||||
|
|
||||||
|
# Run PHPCBF with a simplified ruleset
|
||||||
|
composer phpcbf:simple
|
||||||
|
```
|
||||||
|
|
||||||
|
### PHPStan
|
||||||
|
|
||||||
|
PHPStan performs static analysis to find bugs in your code.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run PHPStan
|
||||||
|
composer phpstan
|
||||||
|
```
|
||||||
|
|
||||||
|
### PHP Mess Detector (PHPMD)
|
||||||
|
|
||||||
|
PHPMD detects potential problems in your code.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run PHPMD
|
||||||
|
composer phpmd
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running All Linters
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all linters (PHPCS, PHPStan, PHPMD)
|
||||||
|
composer lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running All Fixers
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Run all fixers (PHPCBF)
|
||||||
|
composer fix
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
For SonarCloud and Codacy integration, you need to set up the following environment variables:
|
||||||
|
|
||||||
|
### SonarCloud
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export SONAR_TOKEN=your_sonar_token
|
||||||
|
```
|
||||||
|
|
||||||
|
### Codacy
|
||||||
|
|
||||||
|
```bash
|
||||||
|
export CODACY_PROJECT_TOKEN=your_codacy_token
|
||||||
|
```
|
||||||
|
|
||||||
|
## CI/CD Integration
|
||||||
|
|
||||||
|
The project includes GitHub Actions workflows for running these tools automatically on each push and pull request. See the `.github/workflows/code-quality.yml` file for details.
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
* PHPCS rules can be customized in `phpcs.xml`
|
||||||
|
* PHPStan configuration is in `phpstan.neon`
|
||||||
|
* SonarCloud configuration is in `sonar-project.properties`
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Admin area functionality for the plugin.
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate\Admin
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace WPALLSTARS\PluginStarterTemplate\Admin;
|
||||||
|
|
||||||
|
use WPALLSTARS\PluginStarterTemplate\Core;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Admin class responsible for admin-specific hooks and functionality.
|
||||||
|
*/
|
||||||
|
class Admin {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core plugin class instance.
|
||||||
|
*
|
||||||
|
* @var Core
|
||||||
|
*/
|
||||||
|
private Core $core;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @param Core $core Core instance.
|
||||||
|
*/
|
||||||
|
public function __construct( Core $core ) {
|
||||||
|
$this->core = $core;
|
||||||
|
$this->initialize_hooks();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes WordPress hooks.
|
||||||
|
*/
|
||||||
|
private function initialize_hooks(): void {
|
||||||
|
\add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_assets' ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enqueues admin-specific scripts and styles.
|
||||||
|
*
|
||||||
|
* This method is hooked into 'admin_enqueue_scripts'. It checks if the current
|
||||||
|
* screen is relevant to the plugin before enqueueing assets.
|
||||||
|
|
||||||
|
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function enqueue_admin_assets(): void {
|
||||||
|
|
||||||
|
// @phpcs:disable WordPress.Security.NonceVerification.Recommended
|
||||||
|
// @phpcs:disable WordPress.Security.NonceVerification.Missing
|
||||||
|
// For production, use filter_input.
|
||||||
|
$page = '';
|
||||||
|
if ( defined( 'PHPUNIT_RUNNING' ) && PHPUNIT_RUNNING ) {
|
||||||
|
// For testing, use $_GET directly.
|
||||||
|
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- We're sanitizing with wp_unslash and validating later
|
||||||
|
$page = isset( $_GET['page'] ) ? \wp_unslash( $_GET['page'] ) : '';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use filter_input for production environment.
|
||||||
|
if ( empty( $page ) ) {
|
||||||
|
$page = filter_input( INPUT_GET, 'page', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( ! $page || 'wp_plugin_starter_template_settings' !== $page ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// @phpcs:enable
|
||||||
|
|
||||||
|
// Get the plugin version.
|
||||||
|
$plugin_version = $this->core->get_plugin_version();
|
||||||
|
|
||||||
|
// Enqueue styles.
|
||||||
|
\wp_enqueue_style(
|
||||||
|
'wpst-admin-styles',
|
||||||
|
plugin_dir_url( dirname( __DIR__ ) ) . 'admin/css/admin-styles.css',
|
||||||
|
array(), // Dependencies.
|
||||||
|
$plugin_version // Version.
|
||||||
|
);
|
||||||
|
|
||||||
|
// Enqueue admin scripts.
|
||||||
|
\wp_enqueue_script(
|
||||||
|
'wpst-admin-script',
|
||||||
|
plugin_dir_url( dirname( __DIR__ ) ) . 'admin/js/admin-scripts.js',
|
||||||
|
array( 'jquery' ),
|
||||||
|
$plugin_version, // Version.
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
// Prepare data for localization.
|
||||||
|
$data = array(
|
||||||
|
'ajax_url' => \admin_url( 'admin-ajax.php' ),
|
||||||
|
'nonce' => \wp_create_nonce( 'wpst_admin_nonce' ),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Localize the script with the data.
|
||||||
|
\wp_localize_script(
|
||||||
|
'wpst-admin-script',
|
||||||
|
'wpst_admin_data',
|
||||||
|
$data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Core functionality for the plugin
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace WPALLSTARS\PluginStarterTemplate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core class
|
||||||
|
*/
|
||||||
|
class Core {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin version
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private string $version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string $version Plugin version.
|
||||||
|
*/
|
||||||
|
public function __construct( string $version = '' ) {
|
||||||
|
// Initialize hooks.
|
||||||
|
$this->version = $version;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example method to filter content
|
||||||
|
*
|
||||||
|
* @param string $content The content to filter.
|
||||||
|
* @return string The filtered content.
|
||||||
|
*/
|
||||||
|
public function filter_content( string $content ): string {
|
||||||
|
return $content;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the plugin version
|
||||||
|
*
|
||||||
|
* @return string The plugin version.
|
||||||
|
*/
|
||||||
|
public function get_plugin_version(): string {
|
||||||
|
return $this->version;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Main plugin class
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace WPALLSTARS\PluginStarterTemplate;
|
||||||
|
|
||||||
|
use WPALLSTARS\PluginStarterTemplate\Admin\Admin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin class
|
||||||
|
*/
|
||||||
|
class Plugin {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Core instance
|
||||||
|
*
|
||||||
|
* @var Core
|
||||||
|
*/
|
||||||
|
private Core $core;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Admin instance
|
||||||
|
*
|
||||||
|
* @var Admin
|
||||||
|
*/
|
||||||
|
private Admin $admin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin file path
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private string $pluginFile;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugin version
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private string $version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @param string $pluginFile Main plugin file path.
|
||||||
|
* @param string $version Plugin version.
|
||||||
|
*/
|
||||||
|
public function __construct( string $pluginFile, string $version ) {
|
||||||
|
$this->pluginFile = $pluginFile;
|
||||||
|
$this->version = $version;
|
||||||
|
$this->core = new Core( $version );
|
||||||
|
$this->admin = new Admin( $this->core );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize the plugin
|
||||||
|
*/
|
||||||
|
public function init(): void {
|
||||||
|
// Register hooks and filters.
|
||||||
|
add_action('plugins_loaded', array($this, 'load_textdomain'));
|
||||||
|
|
||||||
|
// Initialize any other plugin functionality.
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load plugin textdomain.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function load_textdomain(): void {
|
||||||
|
load_plugin_textdomain(
|
||||||
|
'wp-plugin-starter-template',
|
||||||
|
false,
|
||||||
|
dirname(plugin_basename($this->pluginFile)) . '/languages/'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +0,0 @@
|
|||||||
<?php
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<?php
|
|
||||||
@@ -1 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
/**
|
||||||
|
* File: updater.php
|
||||||
|
* Description: Placeholder for potential updater logic.
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate
|
||||||
|
*/
|
||||||
@@ -2,14 +2,14 @@
|
|||||||
# This file is distributed under the GPL-2.0+.
|
# This file is distributed under the GPL-2.0+.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: WordPress Plugin Starter Template 0.1.0\n"
|
"Project-Id-Version: WordPress Plugin Starter Template 0.1.1\n"
|
||||||
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-plugin-starter-template\n"
|
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-plugin-starter-template\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"POT-Creation-Date: 2025-04-17T00:00:00+00:00\n"
|
"POT-Creation-Date: 2025-04-18T00:00:00+00:00\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"X-Generator: WP-CLI 2.9.0\n"
|
"X-Generator: WP-CLI 2.9.0\n"
|
||||||
"X-Domain: wp-plugin-starter-template\n"
|
"X-Domain: wp-plugin-starter-template\n"
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "wp-plugin-starter-template-for-ai-coding",
|
||||||
|
"version": "0.1.15",
|
||||||
|
"description": "A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "wp-env start",
|
||||||
|
"stop": "wp-env stop",
|
||||||
|
"wp-env": "wp-env",
|
||||||
|
"multisite": "wp-env start --config=.wp-env.multisite.json",
|
||||||
|
"test:e2e": "cypress open --config-file tests/e2e/cypress.json",
|
||||||
|
"test:e2e:headless": "cypress run --config-file tests/e2e/cypress.json",
|
||||||
|
"build": "./build.sh",
|
||||||
|
"lint:php": "composer run-script phpcs",
|
||||||
|
"lint:php:simple": "composer run-script phpcs:simple",
|
||||||
|
"lint:phpstan": "composer run-script phpstan",
|
||||||
|
"lint:phpmd": "composer run-script phpmd",
|
||||||
|
"fix:php": "composer run-script phpcbf",
|
||||||
|
"fix:php:simple": "composer run-script phpcbf:simple",
|
||||||
|
"test:php": "composer run-script test",
|
||||||
|
"lint": "composer run-script lint",
|
||||||
|
"fix": "composer run-script fix",
|
||||||
|
"quality": "npm run lint && npm run test:php"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"wordpress",
|
||||||
|
"plugin",
|
||||||
|
"template",
|
||||||
|
"ai",
|
||||||
|
"coding"
|
||||||
|
],
|
||||||
|
"author": "WPALLSTARS",
|
||||||
|
"license": "GPL-2.0-or-later",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding#readme",
|
||||||
|
"devDependencies": {
|
||||||
|
"@wordpress/env": "^5.0.0",
|
||||||
|
"cypress": "^9.7.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<ruleset name="WordPress Plugin Starter Template Simple">
|
||||||
|
<description>A simplified ruleset for WordPress Plugin Starter Template.</description>
|
||||||
|
|
||||||
|
<!-- Check all PHP files in directory tree by default. -->
|
||||||
|
<file>.</file>
|
||||||
|
|
||||||
|
<!-- Exclude paths -->
|
||||||
|
<exclude-pattern>*/vendor/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/node_modules/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/bin/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/.github/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/tests/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/build/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/dist/*</exclude-pattern>
|
||||||
|
|
||||||
|
<!-- Command line arguments -->
|
||||||
|
<arg value="sp"/>
|
||||||
|
<arg name="extensions" value="php"/>
|
||||||
|
<arg name="basepath" value="."/>
|
||||||
|
<arg name="parallel" value="8"/>
|
||||||
|
|
||||||
|
<!-- Configs -->
|
||||||
|
<config name="minimum_supported_wp_version" value="5.0"/>
|
||||||
|
<config name="testVersion" value="7.0-"/>
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<rule ref="WordPress">
|
||||||
|
<!-- Exclude rules that are too strict for this project -->
|
||||||
|
<exclude name="WordPress.Files.FileName.InvalidClassFileName"/>
|
||||||
|
<exclude name="WordPress.Files.FileName.NotHyphenatedLowercase"/>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<!-- Additional rules for better code quality -->
|
||||||
|
<rule ref="Generic.Formatting.MultipleStatementAlignment">
|
||||||
|
<properties>
|
||||||
|
<property name="maxPadding" value="1"/>
|
||||||
|
<property name="error" value="false"/>
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<!-- Use spaces for indentation -->
|
||||||
|
<rule ref="Generic.WhiteSpace.ScopeIndent">
|
||||||
|
<properties>
|
||||||
|
<property name="indent" value="4"/>
|
||||||
|
<property name="tabIndent" value="false"/>
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
<rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
|
||||||
|
|
||||||
|
<!-- Enforce proper line endings -->
|
||||||
|
<rule ref="Generic.Files.LineEndings">
|
||||||
|
<properties>
|
||||||
|
<property name="eolChar" value="\n"/>
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
</ruleset>
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<ruleset name="WordPress Coding Standards">
|
||||||
|
<description>WordPress dev PHP_CodeSniffer ruleset.</description>
|
||||||
|
|
||||||
|
<!-- Check all PHP files in directory tree by default. -->
|
||||||
|
<file>.</file>
|
||||||
|
|
||||||
|
<exclude-pattern>*/vendor/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/node_modules/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/bin/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/.github/*</exclude-pattern>
|
||||||
|
<exclude-pattern>*/tests/*</exclude-pattern>
|
||||||
|
<exclude-pattern>libs/</exclude-pattern>
|
||||||
|
|
||||||
|
<arg name="extensions" value="php" />
|
||||||
|
<arg name="basepath" value="." />
|
||||||
|
<arg name="parallel" value="8" />
|
||||||
|
|
||||||
|
<!-- Configs -->
|
||||||
|
<config name="minimum_supported_wp_version" value="5.2" />
|
||||||
|
|
||||||
|
<!-- Rules -->
|
||||||
|
<rule ref="WordPress">
|
||||||
|
<exclude name="WordPress.NamingConventions.ValidVariableName" />
|
||||||
|
<exclude name="WordPress.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition" />
|
||||||
|
|
||||||
|
<!-- Disable Strict comparison in array check. Not applicable in the majority of cases. -->
|
||||||
|
<exclude name="WordPress.PHP.StrictInArray" />
|
||||||
|
|
||||||
|
<exclude name="WordPress.WP.I18n" />
|
||||||
|
|
||||||
|
<exclude name="WordPress.Files.FileName.InvalidClassFileName" />
|
||||||
|
<exclude name="WordPress.DB.DirectDatabaseQuery.NoCaching" />
|
||||||
|
|
||||||
|
<!-- Universal sniffs are commented out until the dependencies are properly installed -->
|
||||||
|
<!-- <exclude name="Universal.ControlStructures.DisallowAlternativeSyntax.FoundIfWithInlineHTML" /> -->
|
||||||
|
<!-- <exclude name="Universal.ControlStructures.DisallowAlternativeSyntax.FoundForeachWithInlineHTML" /> -->
|
||||||
|
<!-- <exclude name="Universal.ControlStructures.DisallowAlternativeSyntax.FoundIf" /> -->
|
||||||
|
<!-- <exclude name="Universal.ControlStructures.IfElseDeclaration.NoNewLine" /> -->
|
||||||
|
<!-- <exclude name="Universal.Classes.RequireFinalClass.NonFinalClassFound" /> -->
|
||||||
|
<!-- <exclude name="Universal.Namespaces.EnforceCurlyBraceSyntax.Forbidden" /> -->
|
||||||
|
|
||||||
|
<exclude name="Generic.Commenting.Todo" />
|
||||||
|
<exclude name="Generic.CodeAnalysis.AssignmentInCondition.FoundInWhileCondition" />
|
||||||
|
<exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedCatch" />
|
||||||
|
<exclude name="Generic.WhiteSpace.DisallowSpaceIndent" />
|
||||||
|
<exclude name="WordPress.WP.CapitalPDangit.Misspelled" />
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="Generic.WhiteSpace.ScopeIndent">
|
||||||
|
<properties>
|
||||||
|
<property name="indent" value="4"/>
|
||||||
|
<property name="tabIndent" value="false"/>
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="Generic.WhiteSpace.DisallowTabIndent" />
|
||||||
|
|
||||||
|
<rule ref="Generic.Formatting.MultipleStatementAlignment">
|
||||||
|
<properties>
|
||||||
|
<property name="maxPadding" value="1" />
|
||||||
|
<property name="error" value="false" />
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
</ruleset>
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
parameters:
|
||||||
|
level: 5
|
||||||
|
paths:
|
||||||
|
- includes
|
||||||
|
- admin
|
||||||
|
- wp-plugin-starter-template.php
|
||||||
|
excludePaths:
|
||||||
|
paths:
|
||||||
|
- vendor
|
||||||
|
- node_modules
|
||||||
|
- tests
|
||||||
|
- bin
|
||||||
|
- build
|
||||||
|
- dist
|
||||||
|
ignoreErrors:
|
||||||
|
- '#Function apply_filters invoked with [0-9]+ parameters, 2 required.#'
|
||||||
|
- '#Function [a-zA-Z0-9_]+ not found.#'
|
||||||
|
- '#Call to static method [a-zA-Z0-9_:\\(\\)]+ on an unknown class [a-zA-Z0-9_]+.#'
|
||||||
|
- '#Function do_action invoked with [0-9]+ parameters, 1 required.#'
|
||||||
|
- '#Function add_action invoked with [0-9]+ parameters, 2 required.#'
|
||||||
|
- '#Function add_filter invoked with [0-9]+ parameters, 2 required.#'
|
||||||
|
reportUnmatchedIgnoredErrors: false
|
||||||
|
|
||||||
|
includes:
|
||||||
|
- vendor/szepeviktor/phpstan-wordpress/extension.neon
|
||||||
+313
-77
@@ -1,74 +1,226 @@
|
|||||||
=== WordPress Plugin Starter Template ===
|
=== WordPress Plugin Starter Template for AI Coding ===
|
||||||
Contributors: wpallstars, your_wp_username
|
Contributors: wpallstars
|
||||||
Donate link: https://www.wpallstars.com
|
Donate link: https://www.wpallstars.com/
|
||||||
Tags: starter, template, boilerplate, plugin development, ai coding
|
Tags: starter, template, boilerplate, plugin development, ai coding
|
||||||
Requires at least: 5.0
|
Requires at least: 5.0
|
||||||
Tested up to: 6.4
|
Tested up to: 6.5
|
||||||
Requires PHP: 7.0
|
Requires PHP: 7.4
|
||||||
Stable tag: 0.1.0
|
Stable tag: 0.1.15
|
||||||
License: GPL-2.0+
|
License: GPL-2.0-or-later
|
||||||
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
License URI: https://www.gnu.org/licenses/gpl-2.0.html
|
||||||
|
|
||||||
A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.
|
A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.
|
||||||
|
|
||||||
== Description ==
|
== Description ==
|
||||||
|
|
||||||
The WordPress Plugin Starter Template provides a solid foundation for developing WordPress plugins with AI assistance. It includes a well-structured codebase, documentation templates, and best practices to help you create high-quality WordPress plugins efficiently.
|
The WordPress Plugin Starter Template provides a solid foundation for developing WordPress plugins. It incorporates best practices, modern coding standards, and a comprehensive structure that makes it easy to get started with plugin development.
|
||||||
|
|
||||||
|
This template is based on the experience gained from developing the "Fix 'Plugin file does not exist' Notices" plugin and other successful WordPress plugins.
|
||||||
|
|
||||||
= Key Features =
|
= Key Features =
|
||||||
|
|
||||||
* **Well-structured codebase** following WordPress coding standards
|
* **Object-Oriented Architecture**: Well-structured, maintainable code using OOP principles
|
||||||
* **Modular architecture** for easy maintenance and extension
|
* **Namespace Support**: Modern PHP namespacing for better organization and avoiding conflicts
|
||||||
* **Comprehensive documentation** templates for both users and developers
|
* **Comprehensive Documentation**: Detailed documentation for both users and developers
|
||||||
* **AI-friendly workflows** with detailed guidance for AI assistants
|
* **Testing Framework**: PHPUnit setup for unit testing and Cypress for e2e testing
|
||||||
* **Git integration** with GitHub and Gitea support
|
* **Internationalization Ready**: Full support for translation and localization
|
||||||
* **Update mechanism** with multiple source options (WordPress.org, GitHub, Gitea)
|
* **Update Source Selection**: Choose between WordPress.org, GitHub, or Gitea for plugin updates
|
||||||
* **Internationalization** ready with proper text domain setup
|
* **AI Workflow Documentation**: Detailed guides for AI-assisted development
|
||||||
* **Admin interface** components for building settings pages
|
* **Wiki Documentation**: Ready-to-use wiki structure for comprehensive documentation
|
||||||
|
* **Multisite Compatible**: Fully tested and compatible with WordPress multisite installations
|
||||||
|
|
||||||
= For Developers =
|
= How to Use This Template =
|
||||||
|
|
||||||
This template is designed to be a starting point for your WordPress plugin development. It provides:
|
1. Clone or download this repository
|
||||||
|
2. **Important**: Begin by reading the Starter Prompt file in the wiki for detailed instructions
|
||||||
|
3. Add the AGENTS.md file and .agents/ directory to your AI IDE chat context (pin them if possible)
|
||||||
|
4. Use the prompt in the Starter Prompt file to guide the AI in customizing the template for your plugin
|
||||||
|
5. Rename files and update namespaces to match your plugin
|
||||||
|
6. Customize the functionality for your specific needs
|
||||||
|
7. Update documentation to reflect your plugin's features
|
||||||
|
8. Build and test your plugin
|
||||||
|
|
||||||
* A clean, well-organized file structure
|
For detailed instructions, see the [Starter Prompt](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Starter-Prompt) file in the wiki.
|
||||||
* OOP approach with namespaced classes
|
|
||||||
* Separation of concerns (admin, core functionality)
|
|
||||||
* Documentation templates for wiki and readme files
|
|
||||||
* GitHub Actions workflows for automated tasks
|
|
||||||
* AI workflow documentation for AI-assisted development
|
|
||||||
|
|
||||||
= Credits =
|
= AI-Assisted Development =
|
||||||
|
|
||||||
This template is based on the experience and best practices developed while creating the [Fix 'Plugin file does not exist' Notices](https://github.com/wpallstars/wp-fix-plugin-does-not-exist-notices) plugin.
|
This template includes comprehensive documentation for AI-assisted development:
|
||||||
|
|
||||||
|
* **AGENTS.md**: Guide for AI assistants to understand the project structure
|
||||||
|
* **.agents/**: Detailed workflow documentation for common development tasks
|
||||||
|
* **Starter Prompt**: Comprehensive prompt for AI tools to help customize the template (available in the wiki)
|
||||||
|
|
||||||
|
**Important**: For the best AI assistance, add the AGENTS.md file and .agents/ directory to your AI IDE chat context. In most AI IDEs, you can pin these files to ensure they're considered in each message.
|
||||||
|
|
||||||
|
= Development Environment =
|
||||||
|
|
||||||
|
This template includes configuration for WordPress Environment (wp-env) to make local development easier:
|
||||||
|
|
||||||
|
1. Install Node.js dependencies:
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Start the WordPress environment:
|
||||||
|
```bash
|
||||||
|
npm run start
|
||||||
|
```
|
||||||
|
|
||||||
|
3. For multisite testing:
|
||||||
|
```bash
|
||||||
|
npm run multisite
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Access your local WordPress site at http://localhost:8888 (admin credentials: admin/password)
|
||||||
|
|
||||||
|
= Testing =
|
||||||
|
|
||||||
|
The template includes both PHP unit tests and end-to-end tests:
|
||||||
|
|
||||||
|
**PHP Unit Tests**
|
||||||
|
|
||||||
|
1. Install Composer dependencies:
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run PHP unit tests:
|
||||||
|
```bash
|
||||||
|
npm run test:php
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Check PHP coding standards:
|
||||||
|
```bash
|
||||||
|
npm run lint:php
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Fix PHP coding standards issues:
|
||||||
|
```bash
|
||||||
|
npm run fix:php
|
||||||
|
```
|
||||||
|
|
||||||
|
**End-to-End Tests**
|
||||||
|
|
||||||
|
1. Start the WordPress environment:
|
||||||
|
```bash
|
||||||
|
npm run start
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run Cypress tests in interactive mode:
|
||||||
|
```bash
|
||||||
|
npm run test:e2e
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Run Cypress tests in headless mode:
|
||||||
|
```bash
|
||||||
|
npm run test:e2e:headless
|
||||||
|
```
|
||||||
|
|
||||||
|
= Support & Feedback =
|
||||||
|
|
||||||
|
If you need help with this template, there are several ways to get support:
|
||||||
|
|
||||||
|
* [GitHub Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
* [Gitea Issues](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
|
||||||
|
= Contributing =
|
||||||
|
|
||||||
|
Contributions are welcome! Please feel free to submit a Pull Request.
|
||||||
|
|
||||||
|
1. Fork the repository on [GitHub](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/) or [Gitea](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/)
|
||||||
|
2. Create your feature branch: `git checkout -b feature/amazing-feature`
|
||||||
|
3. Commit your changes: `git commit -m 'Add some amazing feature'`
|
||||||
|
4. Push to the branch: `git push origin feature/amazing-feature`
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
For more detailed information, see the [Contributing Guide](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Contributing) in the wiki.
|
||||||
|
|
||||||
|
= Code Quality Tools =
|
||||||
|
|
||||||
|
This project uses several automated code quality tools to ensure high standards. These tools are free for public repositories and should be integrated into any new repositories based on this template:
|
||||||
|
|
||||||
|
1. **[CodeRabbit](https://www.coderabbit.ai/)**: AI-powered code review tool that provides automated feedback on pull requests
|
||||||
|
2. **[CodeFactor](https://www.codefactor.io/)**: Continuous code quality monitoring that provides a grade for your codebase
|
||||||
|
3. **[Codacy](https://www.codacy.com/)**: Code quality and static analysis that identifies issues related to code style, security, and performance
|
||||||
|
4. **[SonarCloud](https://sonarcloud.io/)**: Code quality and security analysis that provides detailed analysis of code quality and security
|
||||||
|
|
||||||
|
= Using AI Assistants with Code Quality Tools =
|
||||||
|
|
||||||
|
When you receive feedback from these code quality tools, you can use AI assistants to help address the issues:
|
||||||
|
|
||||||
|
1. Copy the output from the code quality tool
|
||||||
|
2. Paste it into your AI assistant chat
|
||||||
|
3. Ask the AI to help you understand and resolve the issues
|
||||||
|
4. Apply the suggested fixes
|
||||||
|
5. Commit the changes and verify that the issues are resolved
|
||||||
|
|
||||||
|
For more information on coding standards and how to pass code quality checks, see the [Coding Standards Guide](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Coding-Standards) in the wiki.
|
||||||
|
|
||||||
== Installation ==
|
== Installation ==
|
||||||
|
|
||||||
1. Download the plugin zip file
|
1. Clone or download this repository
|
||||||
2. Log in to your WordPress admin dashboard
|
2. Read the Starter Prompt file in the wiki for detailed instructions
|
||||||
3. Go to Plugins > Add New
|
3. Add the AGENTS.md file and .agents/ directory to your AI IDE chat context
|
||||||
4. Click the "Upload Plugin" button at the top of the page
|
4. Use the prompt in the Starter Prompt file to guide the AI in customizing the template
|
||||||
5. Select the zip file and click "Install Now"
|
5. Rename files and update namespaces to match your plugin
|
||||||
6. Activate the plugin through the 'Plugins' menu in WordPress
|
6. Customize the functionality for your specific needs
|
||||||
|
7. Update documentation to reflect your plugin's features
|
||||||
|
8. Build and test your plugin
|
||||||
|
|
||||||
|
For detailed instructions, see the [Starter Prompt](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Starter-Prompt) file in the wiki.
|
||||||
|
|
||||||
== Frequently Asked Questions ==
|
== Frequently Asked Questions ==
|
||||||
|
|
||||||
= How do I use this template? =
|
= How do I customize this template for my plugin? =
|
||||||
|
|
||||||
This template is meant to be a starting point for your own plugin development. You should:
|
See the [Starter Prompt](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/wiki/Starter-Prompt) file in the wiki for detailed instructions on customizing this template for your specific plugin needs. Make sure to add the AGENTS.md file and .agents/ directory to your AI IDE chat context for the best results.
|
||||||
|
|
||||||
1. Copy the template files to your new plugin directory
|
= What files do I need to update with my plugin information? =
|
||||||
2. Rename files and update namespaces to match your plugin name
|
|
||||||
3. Update plugin headers in the main PHP file
|
|
||||||
4. Customize the functionality to meet your specific needs
|
|
||||||
5. Update documentation to reflect your plugin's features
|
|
||||||
|
|
||||||
= Is this template suitable for all types of plugins? =
|
The main files you need to update include:
|
||||||
|
1. Main plugin file (rename and update header)
|
||||||
|
2. README.md
|
||||||
|
3. readme.txt
|
||||||
|
4. CHANGELOG.md
|
||||||
|
5. composer.json
|
||||||
|
6. package.json
|
||||||
|
7. languages/pot file
|
||||||
|
8. .github/workflows/
|
||||||
|
9. .wiki/
|
||||||
|
10. AGENTS.md
|
||||||
|
11. includes/plugin.php
|
||||||
|
12. includes/core.php
|
||||||
|
13. admin/lib/admin.php
|
||||||
|
|
||||||
Yes, this template provides a solid foundation for most WordPress plugins. It's designed to be flexible and can be adapted for various types of plugins, from simple utilities to complex applications.
|
= How do I build and test my plugin? =
|
||||||
|
|
||||||
= How do I contribute to this template? =
|
Use the included build.sh script to create a deployable version of your plugin:
|
||||||
|
|
||||||
Contributions are welcome! Please feel free to submit a pull request or open an issue on the [GitHub repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding).
|
```bash
|
||||||
|
./build.sh {VERSION}
|
||||||
|
```
|
||||||
|
|
||||||
|
This will create a ZIP file that you can install in WordPress.
|
||||||
|
|
||||||
|
= How do I add custom functionality to my plugin? =
|
||||||
|
|
||||||
|
Customize the includes/core.php file to implement your core functionality and the admin/lib/admin.php file for admin-specific functionality.
|
||||||
|
|
||||||
|
= How do I update the namespace for my plugin? =
|
||||||
|
|
||||||
|
You'll need to update all namespace references from WPALLSTARS\PluginStarterTemplate to your own namespace throughout the codebase.
|
||||||
|
|
||||||
|
= How do I update the text domain for my plugin? =
|
||||||
|
|
||||||
|
You'll need to update all text domain references from 'wp-plugin-starter-template' to your own text domain throughout the codebase.
|
||||||
|
|
||||||
|
= Is this template compatible with WordPress multisite? =
|
||||||
|
|
||||||
|
Yes, this template is fully compatible with WordPress multisite installations. You can test multisite compatibility by running:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run multisite
|
||||||
|
```
|
||||||
|
|
||||||
== Screenshots ==
|
== Screenshots ==
|
||||||
|
|
||||||
@@ -76,43 +228,127 @@ Contributions are welcome! Please feel free to submit a pull request or open an
|
|||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
|
||||||
|
= 0.1.15 =
|
||||||
|
* Release: Maintenance release
|
||||||
|
|
||||||
|
= 0.1.14 =
|
||||||
|
* Changed: Renamed .ai-assistant.md to AGENTS.md for better discoverability
|
||||||
|
* Changed: Renamed .ai-workflows directory to .agents
|
||||||
|
* Updated: All references to these files in documentation and codebase
|
||||||
|
|
||||||
|
= 0.1.13 =
|
||||||
|
* Improved: Code quality with proper type declarations
|
||||||
|
* Fixed: Inconsistent variable naming (camelCase to snake_case)
|
||||||
|
* Improved: Path handling in admin class
|
||||||
|
* Added: Textdomain loading functionality
|
||||||
|
* Removed: Unused phpcs:ignore comment
|
||||||
|
* Implemented: Proper return type declarations
|
||||||
|
|
||||||
|
= 0.1.12 =
|
||||||
|
* Fixed: WordPress mocking in unit tests
|
||||||
|
* Added: Proper mocking for WordPress functions in tests
|
||||||
|
* Improved: Code quality tool configurations
|
||||||
|
* Added: Detailed code quality checks workflow documentation
|
||||||
|
* Updated: Documentation for better workflow efficiency
|
||||||
|
|
||||||
|
= 0.1.11 =
|
||||||
|
* Improved: Code quality with comprehensive fixes
|
||||||
|
* Fixed: Indentation issues in PHP files
|
||||||
|
* Updated: CSS formatting with modern notation
|
||||||
|
* Fixed: JavaScript issues with proper global variables
|
||||||
|
* Improved: Security by using filter_input() instead of direct superglobal access
|
||||||
|
* Standardized: Naming conventions across the codebase
|
||||||
|
* Fixed: Documentation and comments for better clarity
|
||||||
|
|
||||||
|
= 0.1.10 =
|
||||||
|
* Fixed: Formatting issues in markdown files for better code quality
|
||||||
|
* Fixed: Improved URL formatting with angle brackets
|
||||||
|
* Fixed: Standardized list formatting across documentation files
|
||||||
|
|
||||||
|
= 0.1.9 =
|
||||||
|
* Changed: Alphabetized AI IDE list in README.md
|
||||||
|
|
||||||
|
= 0.1.8 =
|
||||||
|
* Added: More informative badges to README.md (Build Status, Requirements, WP.org placeholders, Release, Issues, Contributors, Wiki).
|
||||||
|
|
||||||
|
= 0.1.7 =
|
||||||
|
* Fixed: GitHub Actions tests workflow with proper file paths and dependencies
|
||||||
|
* Improved: Workflow names for better clarity in GitHub Actions UI
|
||||||
|
|
||||||
|
= 0.1.6 =
|
||||||
|
* Fixed: GitHub Actions workflows permissions for releases and wiki sync
|
||||||
|
|
||||||
|
= 0.1.5 =
|
||||||
|
* Fixed: Release workflow to use correct plugin directory name
|
||||||
|
* Added: Testing setup with wp-env and Cypress
|
||||||
|
* Added: Multisite compatibility
|
||||||
|
* Added: npm scripts for development and testing
|
||||||
|
|
||||||
|
= 0.1.3 =
|
||||||
|
* Added: Improved AI IDE context recommendations in documentation
|
||||||
|
* Enhanced: Starter Prompt with guidance on pinning AGENTS.md and .agents/
|
||||||
|
* Moved: Starter Prompt to the wiki for better organization
|
||||||
|
* Updated: README.md and readme.txt with AI IDE context recommendations
|
||||||
|
* Improved: Documentation for AI-assisted development
|
||||||
|
|
||||||
|
= 0.1.2 =
|
||||||
|
* Added: STARTER-PROMPT.md with comprehensive guide for customizing the template
|
||||||
|
* Updated: Documentation files with improved instructions
|
||||||
|
* Added: Additional AI workflow files for better development guidance
|
||||||
|
|
||||||
|
= 0.1.1 =
|
||||||
|
* Updated: LICENSE file with correct GPL-2.0 text
|
||||||
|
|
||||||
= 0.1.0 =
|
= 0.1.0 =
|
||||||
* Initial release with basic template structure
|
* Initial release with basic template structure
|
||||||
* Added core plugin architecture
|
* Added: Core plugin architecture with OOP approach
|
||||||
* Added admin interface components
|
* Added: Admin interface components and styling
|
||||||
* Added documentation templates
|
* Added: Update mechanism with multiple source options
|
||||||
* Added AI workflow documentation
|
* Added: Documentation templates for users and developers
|
||||||
|
* Added: AI workflow documentation for AI-assisted development
|
||||||
|
* Added: GitHub Actions workflows for automated tasks
|
||||||
|
* Added: Wiki documentation templates
|
||||||
|
|
||||||
== Upgrade Notice ==
|
== Upgrade Notice ==
|
||||||
|
|
||||||
|
= 0.1.15 =
|
||||||
|
Maintenance release.
|
||||||
|
|
||||||
|
= 0.1.14 =
|
||||||
|
Renamed AI assistant documentation files to AGENTS.md and .agents/ directory.
|
||||||
|
|
||||||
|
= 0.1.13 =
|
||||||
|
Improved code quality with proper type declarations, consistent variable naming, and better path handling.
|
||||||
|
|
||||||
|
= 0.1.12 =
|
||||||
|
Fixed WordPress mocking in unit tests, improved code quality tool configurations, and added detailed workflow documentation.
|
||||||
|
|
||||||
|
= 0.1.11 =
|
||||||
|
Improved code quality with comprehensive fixes, better security, and standardized naming conventions across the codebase.
|
||||||
|
|
||||||
|
= 0.1.10 =
|
||||||
|
Improved code quality with better formatting in documentation files, standardized list formatting, and proper URL formatting.
|
||||||
|
|
||||||
|
= 0.1.9 =
|
||||||
|
Alphabetized the list of recommended AI IDEs in README.md for better readability.
|
||||||
|
|
||||||
|
= 0.1.8 =
|
||||||
|
Added several informative badges to README.md for better project visibility (Build Status, Requirements, WP.org placeholders, Release, Issues, Contributors, Wiki link).
|
||||||
|
|
||||||
|
= 0.1.7 =
|
||||||
|
Fixed GitHub Actions tests workflow and improved workflow names for better clarity.
|
||||||
|
|
||||||
|
= 0.1.6 =
|
||||||
|
Fixed GitHub Actions workflows permissions for releases and wiki sync.
|
||||||
|
|
||||||
|
= 0.1.5 =
|
||||||
|
Fixed release workflow and added testing setup with wp-env and Cypress, multisite compatibility, and npm scripts for development and testing.
|
||||||
|
|
||||||
|
= 0.1.3 =
|
||||||
|
Added improved AI IDE context recommendations and moved Starter Prompt to the wiki with guidance on pinning AGENTS.md and .agents/ files.
|
||||||
|
|
||||||
|
= 0.1.1 =
|
||||||
|
Updated LICENSE file with correct GPL-2.0 text.
|
||||||
|
|
||||||
= 0.1.0 =
|
= 0.1.0 =
|
||||||
Initial release of the WordPress Plugin Starter Template.
|
Initial release with basic template structure and core functionality.
|
||||||
|
|
||||||
== Development ==
|
|
||||||
|
|
||||||
The development of this plugin follows these principles:
|
|
||||||
|
|
||||||
1. **Clean Code**: Following WordPress coding standards and best practices
|
|
||||||
2. **Modularity**: Keeping components separate and focused
|
|
||||||
3. **Documentation**: Comprehensive documentation for both users and developers
|
|
||||||
4. **Testing**: Thorough testing across different WordPress versions
|
|
||||||
5. **Accessibility**: Ensuring the plugin is accessible to all users
|
|
||||||
6. **Internationalization**: Making the plugin translatable
|
|
||||||
|
|
||||||
= Development Resources =
|
|
||||||
|
|
||||||
* [GitHub Repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding)
|
|
||||||
* [WordPress Plugin Development Handbook](https://developer.wordpress.org/plugins/)
|
|
||||||
* [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/)
|
|
||||||
|
|
||||||
= Contributing =
|
|
||||||
|
|
||||||
We welcome contributions to improve this template. Please feel free to:
|
|
||||||
|
|
||||||
* Report bugs or issues
|
|
||||||
* Suggest new features or improvements
|
|
||||||
* Submit pull requests with bug fixes or enhancements
|
|
||||||
|
|
||||||
== Credits ==
|
|
||||||
|
|
||||||
This template is maintained by [WPALLSTARS](https://www.wpallstars.com) and is based on the experience and best practices developed while creating the [Fix 'Plugin file does not exist' Notices](https://github.com/wpallstars/wp-fix-plugin-does-not-exist-notices) plugin.
|
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Required metadata
|
||||||
|
sonar.projectKey=wpallstars_wp-plugin-starter-template-for-ai-coding
|
||||||
|
sonar.organization=wpallstars
|
||||||
|
sonar.projectName=wp-plugin-starter-template-for-ai-coding
|
||||||
|
sonar.projectVersion=0.1.13
|
||||||
|
|
||||||
|
# Path to source directories
|
||||||
|
sonar.sources=.
|
||||||
|
|
||||||
|
# Path to test directories (comment if no test)
|
||||||
|
sonar.tests=tests
|
||||||
|
|
||||||
|
# Source encoding
|
||||||
|
sonar.sourceEncoding=UTF-8
|
||||||
|
|
||||||
|
# Exclusions for copy-paste detection
|
||||||
|
sonar.cpd.exclusions=tests/**
|
||||||
|
|
||||||
|
# Exclude directories and files
|
||||||
|
sonar.exclusions=vendor/**,node_modules/**,tests/**,bin/**,build/**,dist/**,.github/**,.git/**
|
||||||
|
|
||||||
|
# PHP specific configuration
|
||||||
|
sonar.php.coverage.reportPaths=coverage.xml
|
||||||
|
sonar.php.tests.reportPath=test-report.xml
|
||||||
|
|
||||||
|
# Additional parameters
|
||||||
|
sonar.verbose=true
|
||||||
|
|
||||||
|
# Disable automatic analysis
|
||||||
|
sonar.projectKey.analysis.mode=manual
|
||||||
+4
-2
@@ -8,6 +8,8 @@
|
|||||||
// First, we need to load the composer autoloader so we can use WP Mock.
|
// First, we need to load the composer autoloader so we can use WP Mock.
|
||||||
require_once dirname(__DIR__) . '/vendor/autoload.php';
|
require_once dirname(__DIR__) . '/vendor/autoload.php';
|
||||||
|
|
||||||
|
// No need to import WP_Mock classes here
|
||||||
|
|
||||||
// Now call the bootstrap method of WP Mock.
|
// Now call the bootstrap method of WP Mock.
|
||||||
WP_Mock::bootstrap();
|
WP_Mock::bootstrap();
|
||||||
|
|
||||||
@@ -22,6 +24,6 @@ define('WPST_VERSION', '0.1.0');
|
|||||||
* Now we include any plugin files that we need to be able to run the tests.
|
* Now we include any plugin files that we need to be able to run the tests.
|
||||||
* This should be files that define the functions and classes you're going to test.
|
* This should be files that define the functions and classes you're going to test.
|
||||||
*/
|
*/
|
||||||
require_once WPST_PLUGIN_DIR . 'includes/core.php';
|
require_once WPST_PLUGIN_DIR . 'includes/class-core.php';
|
||||||
require_once WPST_PLUGIN_DIR . 'includes/plugin.php';
|
require_once WPST_PLUGIN_DIR . 'includes/class-plugin.php';
|
||||||
require_once WPST_PLUGIN_DIR . 'admin/lib/admin.php';
|
require_once WPST_PLUGIN_DIR . 'admin/lib/admin.php';
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"baseUrl": "http://localhost:8889",
|
||||||
|
"integrationFolder": "tests/e2e/cypress/integration",
|
||||||
|
"pluginsFile": "tests/e2e/cypress/plugins/index.js",
|
||||||
|
"supportFile": "tests/e2e/cypress/support/index.js",
|
||||||
|
"videosFolder": "tests/e2e/cypress/videos",
|
||||||
|
"screenshotsFolder": "tests/e2e/cypress/screenshots",
|
||||||
|
"fixturesFolder": "tests/e2e/cypress/fixtures"
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* Basic e2e test for the plugin.
|
||||||
|
*/
|
||||||
|
describe('Plugin Basic Tests', () => {
|
||||||
|
before(() => {
|
||||||
|
cy.login();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should activate the plugin', () => {
|
||||||
|
cy.visit('/wp-admin/plugins.php');
|
||||||
|
cy.contains('WP Plugin Starter Template').should('exist');
|
||||||
|
|
||||||
|
// Check if plugin is not active, then activate it
|
||||||
|
cy.get('tr[data-slug="wp-plugin-starter-template-for-ai-coding"]')
|
||||||
|
.then(($tr) => {
|
||||||
|
if ($tr.hasClass('inactive')) {
|
||||||
|
cy.wrap($tr).find('.activate a').click();
|
||||||
|
cy.contains('Plugin activated.').should('exist');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should have the plugin settings page', () => {
|
||||||
|
cy.visit('/wp-admin/options-general.php?page=wp-plugin-starter-template');
|
||||||
|
cy.contains('WP Plugin Starter Template Settings').should('exist');
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/**
|
||||||
|
* Cypress plugins file.
|
||||||
|
*
|
||||||
|
* @param {Object} on - Cypress events
|
||||||
|
* @param {Object} config - Cypress config
|
||||||
|
* @return {Object} - Modified config
|
||||||
|
*/
|
||||||
|
module.exports = (on, config) => {
|
||||||
|
return config;
|
||||||
|
};
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
/**
|
||||||
|
* Custom Cypress commands.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Login command
|
||||||
|
Cypress.Commands.add('login', (username = 'admin', password = 'password') => {
|
||||||
|
cy.visit('/wp-login.php');
|
||||||
|
cy.get('#user_login').type(username);
|
||||||
|
cy.get('#user_pass').type(password);
|
||||||
|
cy.get('#wp-submit').click();
|
||||||
|
cy.get('body.wp-admin').should('exist');
|
||||||
|
});
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
/**
|
||||||
|
* Import commands.js
|
||||||
|
*/
|
||||||
|
import './commands';
|
||||||
+71
-37
@@ -11,7 +11,7 @@ use WPALLSTARS\PluginStarterTemplate\Core;
|
|||||||
/**
|
/**
|
||||||
* Admin test case.
|
* Admin test case.
|
||||||
*/
|
*/
|
||||||
class AdminTest extends WP_Mock\Tools\TestCase {
|
class AdminTest extends \WP_Mock\Tools\TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test instance
|
* Test instance
|
||||||
@@ -28,24 +28,24 @@ class AdminTest extends WP_Mock\Tools\TestCase {
|
|||||||
private $core;
|
private $core;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up test environment
|
* Set up the test environment.
|
||||||
*/
|
*/
|
||||||
public function setUp(): void {
|
public function setUp(): void
|
||||||
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
// Set up mocks
|
// Set up mocks
|
||||||
WP_Mock::setUp();
|
WP_Mock::setUp();
|
||||||
|
|
||||||
// Mock Core class
|
// Mock the Core class dependency using Mockery.
|
||||||
$this->core = $this->createMock(Core::class);
|
$this->core = \Mockery::mock( '\WPALLSTARS\PluginStarterTemplate\Core' );
|
||||||
|
// Add expectation for get_plugin_version BEFORE Admin is instantiated.
|
||||||
|
$this->core->shouldReceive( 'get_plugin_version' )->andReturn( '1.0.0' );
|
||||||
|
|
||||||
// Set up WordPress function mocks
|
// Expect the action hook to be added BEFORE Admin is instantiated.
|
||||||
WP_Mock::userFunction('add_action', [
|
\WP_Mock::expectActionAdded( 'admin_enqueue_scripts', array( \Mockery::any(), 'enqueue_admin_assets' ) );
|
||||||
'times' => 1,
|
|
||||||
'args' => ['admin_enqueue_scripts', \WP_Mock\Functions::type('array')],
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Create instance of Admin class
|
// Instantiate the Admin class (this triggers the constructor and add_hooks).
|
||||||
$this->admin = new Admin( $this->core );
|
$this->admin = new Admin( $this->core );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,47 +66,81 @@ class AdminTest extends WP_Mock\Tools\TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test enqueue_admin_assets
|
* Test the enqueue_admin_assets method.
|
||||||
*/
|
*/
|
||||||
public function test_enqueue_admin_assets() {
|
public function test_enqueue_admin_assets(): void
|
||||||
// Set up WordPress function mocks
|
{
|
||||||
|
// Define the PHPUNIT_RUNNING constant
|
||||||
|
if ( ! defined( 'PHPUNIT_RUNNING' ) ) {
|
||||||
|
define( 'PHPUNIT_RUNNING', true );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set up the superglobal for the test
|
||||||
|
$_GET['page'] = 'wp_plugin_starter_template_settings';
|
||||||
|
|
||||||
|
// Mock wp_unslash function
|
||||||
|
WP_Mock::userFunction('wp_unslash', [
|
||||||
|
'args' => ['wp_plugin_starter_template_settings'],
|
||||||
|
'return' => 'wp_plugin_starter_template_settings',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Mock WordPress functions used in the method
|
||||||
|
WP_Mock::userFunction('plugin_dir_url', [
|
||||||
|
'return' => 'http://example.com/wp-content/plugins/wp-plugin-starter-template/includes/Admin/',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Mock wp_enqueue_style
|
||||||
WP_Mock::userFunction('wp_enqueue_style', [
|
WP_Mock::userFunction('wp_enqueue_style', [
|
||||||
'times' => 1,
|
'times' => 1,
|
||||||
'args' => ['wpst-admin-styles', \WP_Mock\Functions::type('string'), [], \WP_Mock\Functions::type('string')],
|
'args' => [
|
||||||
|
'wpst-admin-styles',
|
||||||
|
'http://example.com/wp-content/plugins/wp-plugin-starter-template/includes/Admin/../../admin/css/admin-styles.css',
|
||||||
|
[],
|
||||||
|
'1.0.0',
|
||||||
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Mock wp_enqueue_script
|
||||||
WP_Mock::userFunction('wp_enqueue_script', [
|
WP_Mock::userFunction('wp_enqueue_script', [
|
||||||
'times' => 1,
|
'times' => 1,
|
||||||
'args' => ['wpst-admin-scripts', \WP_Mock\Functions::type('string'), ['jquery'], \WP_Mock\Functions::type('string'), true],
|
'args' => [
|
||||||
|
'wpst-admin-script',
|
||||||
|
'http://example.com/wp-content/plugins/wp-plugin-starter-template/includes/Admin/../../admin/js/admin-scripts.js',
|
||||||
|
['jquery'],
|
||||||
|
'1.0.0',
|
||||||
|
true,
|
||||||
|
],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
// Mock admin_url
|
||||||
|
WP_Mock::userFunction('admin_url', [
|
||||||
|
'args' => ['admin-ajax.php'],
|
||||||
|
'return' => 'http://example.com/wp-admin/admin-ajax.php',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Mock wp_create_nonce
|
||||||
|
WP_Mock::userFunction('wp_create_nonce', [
|
||||||
|
'args' => ['wpst_admin_nonce'],
|
||||||
|
'return' => 'test_nonce_123',
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Mock wp_localize_script
|
||||||
WP_Mock::userFunction('wp_localize_script', [
|
WP_Mock::userFunction('wp_localize_script', [
|
||||||
'times' => 1,
|
'times' => 1,
|
||||||
'args' => ['wpst-admin-scripts', 'wpstData', \WP_Mock\Functions::type('array')],
|
'args' => [
|
||||||
]);
|
'wpst-admin-script',
|
||||||
|
'wpst_admin_data',
|
||||||
WP_Mock::userFunction('esc_html__', [
|
[
|
||||||
'times' => 2,
|
'ajax_url' => 'http://example.com/wp-admin/admin-ajax.php',
|
||||||
'args' => [\WP_Mock\Functions::type('string'), 'wp-plugin-starter-template'],
|
'nonce' => 'test_nonce_123',
|
||||||
'return' => 'Translated string',
|
],
|
||||||
]);
|
],
|
||||||
|
|
||||||
WP_Mock::userFunction('admin_url', [
|
|
||||||
'times' => 1,
|
|
||||||
'args' => ['admin-ajax.php'],
|
|
||||||
'return' => 'http://example.org/wp-admin/admin-ajax.php',
|
|
||||||
]);
|
|
||||||
|
|
||||||
WP_Mock::userFunction('wp_create_nonce', [
|
|
||||||
'times' => 1,
|
|
||||||
'args' => ['wpst-admin-nonce'],
|
|
||||||
'return' => '1234567890',
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
// Call the method
|
// Call the method
|
||||||
$this->admin->enqueue_admin_assets('plugins.php');
|
$this->admin->enqueue_admin_assets();
|
||||||
|
|
||||||
// If we get here, the test passed
|
// If we get here without exceptions, the test passes
|
||||||
$this->assertTrue(true);
|
$this->assertTrue(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+7
-5
@@ -10,7 +10,7 @@ use WPALLSTARS\PluginStarterTemplate\Core;
|
|||||||
/**
|
/**
|
||||||
* Core test case.
|
* Core test case.
|
||||||
*/
|
*/
|
||||||
class CoreTest extends WP_Mock\Tools\TestCase {
|
class CoreTest extends \WP_Mock\Tools\TestCase {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test instance
|
* Test instance
|
||||||
@@ -20,9 +20,10 @@ class CoreTest extends WP_Mock\Tools\TestCase {
|
|||||||
private $core;
|
private $core;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up test environment
|
* Set up the test environment.
|
||||||
*/
|
*/
|
||||||
public function setUp(): void {
|
public function setUp(): void
|
||||||
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
// Set up mocks
|
// Set up mocks
|
||||||
@@ -33,9 +34,10 @@ class CoreTest extends WP_Mock\Tools\TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tear down test environment
|
* Tear down the test environment.
|
||||||
*/
|
*/
|
||||||
public function tearDown(): void {
|
public function tearDown(): void
|
||||||
|
{
|
||||||
WP_Mock::tearDown();
|
WP_Mock::tearDown();
|
||||||
parent::tearDown();
|
parent::tearDown();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,86 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
All notable changes to this project should be documented both here and in the main Readme files.
|
||||||
|
|
||||||
|
#### [0.1.9] - 2025-04-18
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Alphabetized AI IDE list in README.md
|
||||||
|
|
||||||
|
#### [0.1.8] - 2025-04-19
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- More informative badges to README.md (Build Status, Requirements, WP.org placeholders, Release, Issues, Contributors, Wiki).
|
||||||
|
|
||||||
|
#### [0.1.7] - 2025-04-19
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- GitHub Actions tests workflow with proper file paths and dependencies
|
||||||
|
|
||||||
|
#### Improved
|
||||||
|
|
||||||
|
- Workflow names for better clarity in GitHub Actions UI
|
||||||
|
|
||||||
|
#### [0.1.6] - 2025-04-19
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- GitHub Actions workflows permissions for releases and wiki sync
|
||||||
|
|
||||||
|
#### [0.1.5] - 2025-04-19
|
||||||
|
|
||||||
|
#### Fixed
|
||||||
|
|
||||||
|
- Release workflow to use correct plugin directory name
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Testing setup with wp-env and Cypress
|
||||||
|
- Multisite compatibility
|
||||||
|
- npm scripts for development and testing
|
||||||
|
|
||||||
|
#### [0.1.3] - 2025-04-19
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Improved AI IDE context recommendations in documentation
|
||||||
|
- Enhanced Starter Prompt with guidance on pinning AGENTS.md and .agents/
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Updated README.md and readme.txt with AI IDE context recommendations
|
||||||
|
- Improved documentation for AI-assisted development
|
||||||
|
- Moved Starter Prompt to the wiki for better organization
|
||||||
|
|
||||||
|
#### [0.1.2] - 2025-04-18
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- STARTER-PROMPT.md with comprehensive guide for customizing the template
|
||||||
|
- Additional AI workflow files for better development guidance
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Updated documentation files with improved instructions
|
||||||
|
|
||||||
|
#### [0.1.1] - 2025-04-18
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Updated LICENSE file with correct GPL-2.0 text
|
||||||
|
|
||||||
|
#### [0.1.0] - 2025-04-17
|
||||||
|
|
||||||
|
#### Added
|
||||||
|
|
||||||
|
- Initial release with basic template structure
|
||||||
|
- Core plugin architecture with OOP approach
|
||||||
|
- Admin interface components and styling
|
||||||
|
- Update mechanism with multiple source options
|
||||||
|
- Documentation templates for users and developers
|
||||||
|
- AI workflow documentation for AI-assisted development
|
||||||
|
- GitHub Actions workflows for automated tasks
|
||||||
|
- Wiki documentation templates
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
# Coding Standards
|
||||||
|
|
||||||
|
This document outlines the coding standards used in this plugin. Following these standards ensures consistency, readability, and maintainability of the codebase.
|
||||||
|
|
||||||
|
## PHP Coding Standards
|
||||||
|
|
||||||
|
This plugin follows the [WordPress Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/php/) with some additional guidelines.
|
||||||
|
|
||||||
|
### File Structure
|
||||||
|
|
||||||
|
* Each PHP file should begin with the PHP opening tag `<?php` (no closing tag)
|
||||||
|
* Files should use the Unix line endings (LF)
|
||||||
|
* Files should be encoded in UTF-8 without BOM
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
* **Classes**: Use `PascalCase` for class names
|
||||||
|
```php
|
||||||
|
class MyClassName {}
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Methods and Functions**: Use `snake_case` for method and function names
|
||||||
|
```php
|
||||||
|
function my_function_name() {}
|
||||||
|
public function my_method_name() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Variables**: Use `snake_case` for variable names
|
||||||
|
```php
|
||||||
|
$my_variable_name = 'value';
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Constants**: Use `UPPERCASE_WITH_UNDERSCORES` for constants
|
||||||
|
```php
|
||||||
|
define('MY_CONSTANT', 'value');
|
||||||
|
const MY_CLASS_CONSTANT = 'value';
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Namespaces**: Use `PascalCase` for namespace segments
|
||||||
|
```php
|
||||||
|
namespace WPALLSTARS\PluginStarterTemplate;
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Hooks**: Prefix hooks with the plugin's prefix
|
||||||
|
```php
|
||||||
|
do_action('wpst_hook_name');
|
||||||
|
apply_filters('wpst_filter_name', $value);
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indentation and Formatting
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation (not tabs)
|
||||||
|
* Opening braces for classes and functions should be on the same line
|
||||||
|
* Control structures should have one space between the statement and the opening parenthesis
|
||||||
|
* Each line should be no longer than 100 characters
|
||||||
|
|
||||||
|
```php
|
||||||
|
if ($condition) {
|
||||||
|
// Code here
|
||||||
|
} elseif ($another_condition) {
|
||||||
|
// More code
|
||||||
|
} else {
|
||||||
|
// Default code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* All classes, methods, and functions should be documented using PHPDoc
|
||||||
|
* Include a description, parameters, return values, and exceptions
|
||||||
|
|
||||||
|
```php
|
||||||
|
/**
|
||||||
|
* Short description of the function.
|
||||||
|
*
|
||||||
|
* Longer description if needed.
|
||||||
|
*
|
||||||
|
* @param string $param1 Description of the parameter.
|
||||||
|
* @param int $param2 Description of the parameter.
|
||||||
|
* @return bool Description of the return value.
|
||||||
|
* @throws Exception When something goes wrong.
|
||||||
|
*/
|
||||||
|
function my_function($param1, $param2) {
|
||||||
|
// Function code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Object-Oriented Programming
|
||||||
|
|
||||||
|
* Each class should have a single responsibility
|
||||||
|
* Use visibility declarations for all properties and methods (public, protected, private)
|
||||||
|
* Use type hints for parameters and return types when possible
|
||||||
|
|
||||||
|
```php
|
||||||
|
class MyClass {
|
||||||
|
/**
|
||||||
|
* Property description.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $property;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method description.
|
||||||
|
*
|
||||||
|
* @param string $param Description of the parameter.
|
||||||
|
* @return bool Description of the return value.
|
||||||
|
*/
|
||||||
|
public function my_method(string $param): bool {
|
||||||
|
// Method code
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## JavaScript Coding Standards
|
||||||
|
|
||||||
|
This plugin follows the [WordPress JavaScript Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/javascript/).
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
* **Variables and Functions**: Use `camelCase` for variable and function names
|
||||||
|
```javascript
|
||||||
|
var myVariableName = 'value';
|
||||||
|
function myFunctionName() {}
|
||||||
|
```
|
||||||
|
|
||||||
|
* **Constants**: Use `UPPERCASE_WITH_UNDERSCORES` for constants
|
||||||
|
```javascript
|
||||||
|
var MY_CONSTANT = 'value';
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indentation and Formatting
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation (not tabs)
|
||||||
|
* Opening braces should be on the same line as the statement
|
||||||
|
* Each line should be no longer than 100 characters
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
if (condition) {
|
||||||
|
// Code here
|
||||||
|
} else if (anotherCondition) {
|
||||||
|
// More code
|
||||||
|
} else {
|
||||||
|
// Default code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Documentation
|
||||||
|
|
||||||
|
* Use JSDoc for documenting functions and objects
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
/**
|
||||||
|
* Short description of the function.
|
||||||
|
*
|
||||||
|
* @param {string} param1 - Description of the parameter.
|
||||||
|
* @param {number} param2 - Description of the parameter.
|
||||||
|
* @returns {boolean} Description of the return value.
|
||||||
|
*/
|
||||||
|
function myFunction(param1, param2) {
|
||||||
|
// Function code
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## CSS Coding Standards
|
||||||
|
|
||||||
|
This plugin follows the [WordPress CSS Coding Standards](https://developer.wordpress.org/coding-standards/wordpress-coding-standards/css/).
|
||||||
|
|
||||||
|
### Naming Conventions
|
||||||
|
|
||||||
|
* Use lowercase for selectors
|
||||||
|
* Use hyphens to separate words in class and ID names
|
||||||
|
* Prefix classes and IDs with the plugin's prefix
|
||||||
|
|
||||||
|
```css
|
||||||
|
.wpst-container {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wpst-header {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Indentation and Formatting
|
||||||
|
|
||||||
|
* Use 4 spaces for indentation (not tabs)
|
||||||
|
* Each property should be on its own line
|
||||||
|
* Include a space after the colon in property declarations
|
||||||
|
* End each declaration with a semicolon
|
||||||
|
* Use single quotes for attribute selectors and property values
|
||||||
|
|
||||||
|
```css
|
||||||
|
.wpst-container {
|
||||||
|
margin: 0;
|
||||||
|
padding: 10px;
|
||||||
|
font-family: 'Helvetica', sans-serif;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Automated Code Checking
|
||||||
|
|
||||||
|
This plugin uses automated tools to enforce coding standards:
|
||||||
|
|
||||||
|
### Local Development Tools
|
||||||
|
|
||||||
|
1. **PHP_CodeSniffer (PHPCS)**: Checks PHP code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
composer run phpcs
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **PHP Code Beautifier and Fixer (PHPCBF)**: Automatically fixes some coding standard violations
|
||||||
|
```bash
|
||||||
|
composer run phpcbf
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **ESLint**: Checks JavaScript code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
npm run lint:js
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Stylelint**: Checks CSS code against the WordPress Coding Standards
|
||||||
|
```bash
|
||||||
|
npm run lint:css
|
||||||
|
```
|
||||||
|
|
||||||
|
### Continuous Integration Tools
|
||||||
|
|
||||||
|
This project integrates with several code quality tools that automatically analyze your code when you create a pull request. These tools are free for public repositories and should be integrated into any new repositories based on this template.
|
||||||
|
|
||||||
|
1. **CodeRabbit**: AI-powered code review tool
|
||||||
|
* Provides automated feedback on pull requests
|
||||||
|
* Identifies potential issues and suggests improvements
|
||||||
|
* [Website](https://www.coderabbit.ai/)
|
||||||
|
|
||||||
|
2. **CodeFactor**: Continuous code quality monitoring
|
||||||
|
* Provides a grade for your codebase
|
||||||
|
* Identifies issues related to code style, complexity, and potential bugs
|
||||||
|
* Tracks code quality over time
|
||||||
|
* [Website](https://www.codefactor.io/)
|
||||||
|
|
||||||
|
3. **Codacy**: Code quality and static analysis
|
||||||
|
* Provides a grade for your codebase
|
||||||
|
* Identifies issues related to code style, security, and performance
|
||||||
|
* Tracks code quality over time
|
||||||
|
* [Website](https://www.codacy.com/)
|
||||||
|
|
||||||
|
4. **SonarCloud**: Code quality and security analysis
|
||||||
|
* Provides detailed analysis of code quality
|
||||||
|
* Identifies security vulnerabilities and technical debt
|
||||||
|
* Tracks code quality over time
|
||||||
|
* [Website](https://sonarcloud.io/)
|
||||||
|
|
||||||
|
### How to Pass Code Quality Checks
|
||||||
|
|
||||||
|
To ensure your code passes the quality checks from these tools, follow these guidelines:
|
||||||
|
|
||||||
|
1. **Run Local Checks First**
|
||||||
|
* Before pushing your code, run PHPCS and PHPCBF locally
|
||||||
|
* Fix any issues identified by these tools
|
||||||
|
|
||||||
|
2. **Address Common Issues**
|
||||||
|
* **Indentation**: Use 4 spaces for indentation (not tabs)
|
||||||
|
* **Line Length**: Keep lines under 100 characters
|
||||||
|
* **Naming Conventions**: Follow WordPress naming conventions
|
||||||
|
* **Documentation**: Add PHPDoc comments to classes, methods, and functions
|
||||||
|
* **Error Handling**: Implement proper error handling
|
||||||
|
* **Security**: Validate and sanitize input, escape output
|
||||||
|
* **Markdown**: Use asterisks (*) for bullet points, not hyphens (-)
|
||||||
|
|
||||||
|
3. **Using AI Assistants with Code Quality Tools**
|
||||||
|
* When you receive feedback from code quality tools, you can use AI assistants to help address the issues
|
||||||
|
* Copy the output from the code quality tool and paste it into your AI assistant chat
|
||||||
|
* Ask the AI to help you understand and resolve the issues
|
||||||
|
* Example prompt:
|
||||||
|
|
||||||
|
```text
|
||||||
|
I received the following feedback from [Tool Name]. Please help me understand and resolve these issues:
|
||||||
|
|
||||||
|
[Paste the tool output here]
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Iterative Improvement**
|
||||||
|
* Address issues one at a time, starting with the most critical
|
||||||
|
* Commit and push your changes to see if they resolve the issues
|
||||||
|
* Continue this process until all issues are resolved
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
Following these coding standards ensures that the plugin's code is consistent, readable, and maintainable. All contributors should adhere to these standards when submitting code to the project.
|
||||||
@@ -0,0 +1,180 @@
|
|||||||
|
# Contributing
|
||||||
|
|
||||||
|
Thank you for considering contributing to this project! This document provides guidelines and instructions for contributing.
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
|
||||||
|
By participating in this project, you agree to abide by our code of conduct:
|
||||||
|
|
||||||
|
- Be respectful and inclusive
|
||||||
|
- Be patient and welcoming
|
||||||
|
- Be considerate
|
||||||
|
- Be collaborative
|
||||||
|
- Be open-minded
|
||||||
|
|
||||||
|
## How to Contribute
|
||||||
|
|
||||||
|
### Reporting Bugs
|
||||||
|
|
||||||
|
If you find a bug, please report it by creating an issue on GitHub:
|
||||||
|
|
||||||
|
1. Go to the [Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) page
|
||||||
|
2. Click "New Issue"
|
||||||
|
3. Select "Bug Report"
|
||||||
|
4. Fill out the template with as much detail as possible
|
||||||
|
5. Submit the issue
|
||||||
|
|
||||||
|
Please include:
|
||||||
|
|
||||||
|
- A clear, descriptive title
|
||||||
|
- Steps to reproduce the bug
|
||||||
|
- Expected behavior
|
||||||
|
- Actual behavior
|
||||||
|
- Screenshots (if applicable)
|
||||||
|
- Your environment (WordPress version, PHP version, browser, etc.)
|
||||||
|
|
||||||
|
### Suggesting Enhancements
|
||||||
|
|
||||||
|
If you have an idea for an enhancement:
|
||||||
|
|
||||||
|
1. Go to the [Issues](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) page
|
||||||
|
2. Click "New Issue"
|
||||||
|
3. Select "Feature Request"
|
||||||
|
4. Fill out the template with as much detail as possible
|
||||||
|
5. Submit the issue
|
||||||
|
|
||||||
|
Please include:
|
||||||
|
|
||||||
|
- A clear, descriptive title
|
||||||
|
- A detailed description of the enhancement
|
||||||
|
- Why this enhancement would be useful
|
||||||
|
- Any relevant examples or mockups
|
||||||
|
|
||||||
|
### Pull Requests
|
||||||
|
|
||||||
|
If you want to contribute code:
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create a new branch for your feature or bugfix
|
||||||
|
3. Make your changes
|
||||||
|
4. Run tests to ensure your changes don't break anything
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
#### Pull Request Process
|
||||||
|
|
||||||
|
1. Fork the repository on [GitHub](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/) or [Gitea](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/)
|
||||||
|
2. Clone your fork: `git clone https://github.com/YOUR-USERNAME/wp-plugin-starter-template-for-ai-coding.git`
|
||||||
|
3. Create your feature branch: `git checkout -b feature/amazing-feature`
|
||||||
|
4. Make your changes
|
||||||
|
5. Commit your changes: `git commit -m 'Add some amazing feature'`
|
||||||
|
6. Push to the branch: `git push origin feature/amazing-feature`
|
||||||
|
7. Submit a pull request
|
||||||
|
|
||||||
|
#### Pull Request Guidelines
|
||||||
|
|
||||||
|
- Follow the coding standards (see [Coding Standards](Coding-Standards))
|
||||||
|
- Write tests for your changes
|
||||||
|
- Update documentation as needed
|
||||||
|
- Keep pull requests focused on a single change
|
||||||
|
- Write a clear, descriptive title and description
|
||||||
|
- Reference any related issues
|
||||||
|
- Ensure your code passes the automated code quality checks (see below)
|
||||||
|
|
||||||
|
#### Code Quality Tools
|
||||||
|
|
||||||
|
This project uses several automated code quality tools to ensure high standards. These tools are free for public repositories and will automatically analyze your code when you create a pull request:
|
||||||
|
|
||||||
|
1. **CodeRabbit**: AI-powered code review tool
|
||||||
|
- [Website](https://www.coderabbit.ai/)
|
||||||
|
- Provides automated feedback on pull requests
|
||||||
|
|
||||||
|
2. **CodeFactor**: Continuous code quality monitoring
|
||||||
|
- [Website](https://www.codefactor.io/)
|
||||||
|
- Provides a grade for your codebase
|
||||||
|
|
||||||
|
3. **Codacy**: Code quality and static analysis
|
||||||
|
- [Website](https://www.codacy.com/)
|
||||||
|
- Identifies issues related to code style, security, and performance
|
||||||
|
|
||||||
|
4. **SonarCloud**: Code quality and security analysis
|
||||||
|
- [Website](https://sonarcloud.io/)
|
||||||
|
- Provides detailed analysis of code quality and security
|
||||||
|
|
||||||
|
#### Using AI Assistants with Code Quality Tools
|
||||||
|
|
||||||
|
When you receive feedback from these code quality tools, you can use AI assistants to help address the issues:
|
||||||
|
|
||||||
|
1. Copy the output from the code quality tool
|
||||||
|
2. Paste it into your AI assistant chat
|
||||||
|
3. Ask the AI to help you understand and resolve the issues
|
||||||
|
4. Apply the suggested fixes
|
||||||
|
5. Commit the changes and verify that the issues are resolved
|
||||||
|
|
||||||
|
Example prompt for AI assistants:
|
||||||
|
|
||||||
|
```text
|
||||||
|
I received the following feedback from [Tool Name]. Please help me understand and resolve these issues:
|
||||||
|
|
||||||
|
[Paste the tool output here]
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Environment
|
||||||
|
|
||||||
|
To set up your development environment:
|
||||||
|
|
||||||
|
1. Clone the repository: `git clone https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding.git`
|
||||||
|
2. Install dependencies: `composer install && npm install`
|
||||||
|
3. Start the development environment: `npm run start`
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
Before submitting a pull request, make sure to run the tests:
|
||||||
|
|
||||||
|
* PHP Unit Tests: `npm run test:php`
|
||||||
|
* End-to-End Tests: `npm run test:e2e`
|
||||||
|
* Coding Standards: `npm run lint:php`
|
||||||
|
|
||||||
|
#### Code Quality Checks
|
||||||
|
|
||||||
|
To ensure your code meets the quality standards, run these commands before submitting a pull request:
|
||||||
|
|
||||||
|
* Check coding standards: `composer run phpcs`
|
||||||
|
* Fix coding standards automatically: `composer run phpcbf`
|
||||||
|
* Check JavaScript coding standards: `npm run lint:js`
|
||||||
|
* Check CSS coding standards: `npm run lint:css`
|
||||||
|
|
||||||
|
These checks will help identify and fix issues before they are caught by the automated code quality tools in the pull request process.
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
If you're adding a new feature or changing existing functionality, please update the documentation:
|
||||||
|
|
||||||
|
* Update the README.md file if necessary
|
||||||
|
* Update the readme.txt file if necessary
|
||||||
|
* Update or create wiki pages as needed
|
||||||
|
* Update code comments
|
||||||
|
|
||||||
|
## Community
|
||||||
|
|
||||||
|
Join our community to discuss the project:
|
||||||
|
|
||||||
|
* [GitHub Discussions](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/discussions)
|
||||||
|
* [Gitea Issues](https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues)
|
||||||
|
|
||||||
|
## Recognition
|
||||||
|
|
||||||
|
Contributors will be recognized in the following ways:
|
||||||
|
|
||||||
|
* Added to the contributors list in readme.txt
|
||||||
|
* Mentioned in release notes for significant contributions
|
||||||
|
* Thanked in the Changelog for specific contributions
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
By contributing to this project, you agree that your contributions will be licensed under the project's [GPL-2.0+ License](https://www.gnu.org/licenses/gpl-2.0.html).
|
||||||
|
|
||||||
|
## Questions?
|
||||||
|
|
||||||
|
If you have any questions about contributing, please open an issue or contact the maintainers.
|
||||||
|
|
||||||
|
Thank you for your contributions!
|
||||||
@@ -0,0 +1,119 @@
|
|||||||
|
# Frequently Asked Questions
|
||||||
|
|
||||||
|
This page answers common questions about the WordPress Plugin Starter Template.
|
||||||
|
|
||||||
|
## General Questions
|
||||||
|
|
||||||
|
### What is the WordPress Plugin Starter Template?
|
||||||
|
|
||||||
|
The WordPress Plugin Starter Template is a comprehensive starting point for developing WordPress plugins. It provides a well-structured codebase, documentation templates, and best practices to help you create high-quality WordPress plugins efficiently.
|
||||||
|
|
||||||
|
### Who is this template for?
|
||||||
|
|
||||||
|
This template is designed for:
|
||||||
|
|
||||||
|
- WordPress plugin developers looking for a solid foundation
|
||||||
|
- Developers who want to leverage AI assistance in their development workflow
|
||||||
|
- Anyone who wants to create a WordPress plugin following best practices
|
||||||
|
|
||||||
|
### Is this template suitable for all types of plugins?
|
||||||
|
|
||||||
|
Yes, this template provides a solid foundation for most WordPress plugins. It's designed to be flexible and can be adapted for various types of plugins, from simple utilities to complex applications.
|
||||||
|
|
||||||
|
## Usage Questions
|
||||||
|
|
||||||
|
### How do I use this template?
|
||||||
|
|
||||||
|
This template is meant to be a starting point for your own plugin development. You should:
|
||||||
|
|
||||||
|
1. Copy the template files to your new plugin directory
|
||||||
|
2. Rename files and update namespaces to match your plugin name
|
||||||
|
3. Update plugin headers in the main PHP file
|
||||||
|
4. Customize the functionality to meet your specific needs
|
||||||
|
5. Update documentation to reflect your plugin's features
|
||||||
|
|
||||||
|
For detailed instructions, see the [Usage Instructions](Usage-Instructions) page.
|
||||||
|
|
||||||
|
### Do I need to keep the original credits?
|
||||||
|
|
||||||
|
While not strictly required, we appreciate if you keep a reference to the original template in your plugin's documentation. This helps others discover the template and contributes to the open-source community.
|
||||||
|
|
||||||
|
### Can I use this template for commercial plugins?
|
||||||
|
|
||||||
|
Yes, you can use this template for both free and commercial plugins. The template is licensed under GPL-2.0+, which allows for commercial use.
|
||||||
|
|
||||||
|
## Technical Questions
|
||||||
|
|
||||||
|
### What PHP version is required?
|
||||||
|
|
||||||
|
The template requires PHP 7.0 or higher, which is the minimum recommended version for WordPress plugins today.
|
||||||
|
|
||||||
|
### Does this template support Gutenberg blocks?
|
||||||
|
|
||||||
|
The template doesn't include Gutenberg blocks by default, but it provides a structure that makes it easy to add them. You can extend the template to include block registration and block-specific assets.
|
||||||
|
|
||||||
|
### How do I add custom post types or taxonomies?
|
||||||
|
|
||||||
|
To add custom post types or taxonomies:
|
||||||
|
|
||||||
|
1. Create a new class in `includes/` for your post type or taxonomy
|
||||||
|
2. Register the post type or taxonomy in the class constructor
|
||||||
|
3. Initialize the class in `includes/plugin.php`
|
||||||
|
|
||||||
|
### How do I handle plugin updates?
|
||||||
|
|
||||||
|
The template includes an update mechanism that supports multiple sources:
|
||||||
|
|
||||||
|
- WordPress.org
|
||||||
|
- GitHub
|
||||||
|
- Gitea
|
||||||
|
|
||||||
|
To configure the update mechanism:
|
||||||
|
|
||||||
|
1. Update the plugin headers in the main PHP file
|
||||||
|
2. Customize the `updater.php` file if needed
|
||||||
|
3. Ensure your repository follows the required structure for updates
|
||||||
|
|
||||||
|
## AI-Assisted Development Questions
|
||||||
|
|
||||||
|
### How does this template support AI-assisted development?
|
||||||
|
|
||||||
|
The template includes:
|
||||||
|
|
||||||
|
1. Detailed documentation in the `AGENTS.md` file
|
||||||
|
2. Workflow guidelines in the `.agents/` directory
|
||||||
|
3. Clear code structure and comments that help AI understand the codebase
|
||||||
|
4. Best practices for AI-friendly code organization
|
||||||
|
|
||||||
|
### What AI tools work best with this template?
|
||||||
|
|
||||||
|
This template is designed to work well with various AI coding assistants, including:
|
||||||
|
|
||||||
|
- GitHub Copilot
|
||||||
|
- Claude
|
||||||
|
- ChatGPT
|
||||||
|
- Other AI coding assistants
|
||||||
|
|
||||||
|
### How do I use the AI workflow documentation?
|
||||||
|
|
||||||
|
The AI workflow documentation in the `.agents/` directory provides guidelines for AI assistants working with this template. These files help ensure consistent, high-quality code and documentation when using AI tools for development.
|
||||||
|
|
||||||
|
## Contributing Questions
|
||||||
|
|
||||||
|
### How can I contribute to this template?
|
||||||
|
|
||||||
|
Contributions are welcome! Please feel free to:
|
||||||
|
|
||||||
|
1. Report bugs or issues
|
||||||
|
2. Suggest new features or improvements
|
||||||
|
3. Submit pull requests with bug fixes or enhancements
|
||||||
|
|
||||||
|
For more information, see the [Contributing](Contributing) page.
|
||||||
|
|
||||||
|
### Where can I report issues?
|
||||||
|
|
||||||
|
You can report issues on the [GitHub repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues).
|
||||||
|
|
||||||
|
### Is there a roadmap for future development?
|
||||||
|
|
||||||
|
Yes, we maintain a roadmap of planned features and improvements. You can find it in the [GitHub repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/projects).
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# WordPress Plugin Starter Template
|
||||||
|
|
||||||
|
Welcome to the documentation wiki for the WordPress Plugin Starter Template.
|
||||||
|
|
||||||
|
This template provides a solid foundation for developing WordPress plugins with best practices for AI-assisted development.
|
||||||
|
|
||||||
|
## Quick Links
|
||||||
|
|
||||||
|
- [Starter Prompt](Starter-Prompt)
|
||||||
|
- [Installation Guide](Installation-Guide)
|
||||||
|
- [Usage Instructions](Usage-Instructions)
|
||||||
|
- [Frequently Asked Questions](Frequently-Asked-Questions)
|
||||||
|
- [Contributing](Contributing)
|
||||||
|
- [Changelog](Changelog)
|
||||||
|
|
||||||
|
## About This Template
|
||||||
|
|
||||||
|
The WordPress Plugin Starter Template is designed to help developers quickly create new WordPress plugins with a solid foundation of best practices. It incorporates modern coding standards, comprehensive documentation, and AI-assisted development workflows.
|
||||||
|
|
||||||
|
This template is based on the experience gained from developing the "Fix 'Plugin file does not exist' Notices" plugin and other successful WordPress plugins.
|
||||||
|
|
||||||
|
## Key Features
|
||||||
|
|
||||||
|
- **Object-Oriented Architecture**: Well-structured, maintainable code using OOP principles
|
||||||
|
- **Namespace Support**: Modern PHP namespacing for better organization and avoiding conflicts
|
||||||
|
- **Comprehensive Documentation**: Detailed documentation for both users and developers
|
||||||
|
- **Testing Framework**: PHPUnit setup for unit testing
|
||||||
|
- **Internationalization Ready**: Full support for translation and localization
|
||||||
|
- **Update Source Selection**: Choose between WordPress.org, GitHub, or Gitea for plugin updates
|
||||||
|
- **AI Workflow Documentation**: Detailed guides for AI-assisted development
|
||||||
|
- **Wiki Documentation**: Ready-to-use wiki structure for comprehensive documentation
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
To get started with this template, check out the [Starter Prompt](Starter-Prompt) for a comprehensive guide on customizing the template for your specific plugin needs.
|
||||||
|
|
||||||
|
**Important**: For the best AI assistance, add the AGENTS.md file and .agents/ directory to your AI IDE chat context. In most AI IDEs, you can pin these files to ensure they're considered in each message.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
If you encounter any issues or have questions about the template, please check the [Frequently Asked Questions](Frequently-Asked-Questions) section. If you still need help, you can [open an issue](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/issues) on GitHub.
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# Installation Guide
|
||||||
|
|
||||||
|
This guide provides instructions for installing and setting up the WordPress Plugin Starter Template.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
Before installing the plugin, ensure you have:
|
||||||
|
|
||||||
|
- WordPress 5.0 or higher
|
||||||
|
- PHP 7.0 or higher
|
||||||
|
- A WordPress site with administrator access
|
||||||
|
|
||||||
|
## Installation Methods
|
||||||
|
|
||||||
|
### Method 1: From WordPress.org (For Released Plugins)
|
||||||
|
|
||||||
|
1. Log in to your WordPress admin dashboard.
|
||||||
|
2. Navigate to **Plugins > Add New**.
|
||||||
|
3. Search for "WordPress Plugin Starter Template".
|
||||||
|
4. Click **Install Now** next to the plugin.
|
||||||
|
5. After installation, click **Activate**.
|
||||||
|
|
||||||
|
### Method 2: Manual Installation
|
||||||
|
|
||||||
|
1. Download the latest release from the [GitHub repository](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding/releases).
|
||||||
|
2. Log in to your WordPress admin dashboard.
|
||||||
|
3. Navigate to **Plugins > Add New**.
|
||||||
|
4. Click the **Upload Plugin** button at the top of the page.
|
||||||
|
5. Click **Choose File** and select the downloaded ZIP file.
|
||||||
|
6. Click **Install Now**.
|
||||||
|
7. After installation, click **Activate**.
|
||||||
|
|
||||||
|
### Method 3: Using as a Template for Your Plugin
|
||||||
|
|
||||||
|
1. Clone or download the repository:
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding.git your-plugin-name
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Navigate to your plugin directory:
|
||||||
|
```bash
|
||||||
|
cd your-plugin-name
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Rename files and update namespaces:
|
||||||
|
- Rename `wp-plugin-starter-template.php` to your plugin name (e.g., `your-plugin-name.php`)
|
||||||
|
- Update the namespace from `WPALLSTARS\PluginStarterTemplate` to your own
|
||||||
|
- Update text domain from `wp-plugin-starter-template` to your own
|
||||||
|
|
||||||
|
4. Update plugin headers in the main PHP file.
|
||||||
|
|
||||||
|
5. Install dependencies:
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
6. Upload the plugin to your WordPress site or use the local development script:
|
||||||
|
```bash
|
||||||
|
./scripts/deploy-local.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## Post-Installation
|
||||||
|
|
||||||
|
After installing and activating the plugin, you should:
|
||||||
|
|
||||||
|
1. Review the plugin settings (if applicable).
|
||||||
|
2. Customize the plugin for your specific needs.
|
||||||
|
3. Update documentation to reflect your plugin's features.
|
||||||
|
|
||||||
|
## Troubleshooting Installation Issues
|
||||||
|
|
||||||
|
If you encounter any issues during installation, please check the following:
|
||||||
|
|
||||||
|
1. **Plugin Conflicts**: Deactivate other plugins to check for conflicts.
|
||||||
|
2. **Server Requirements**: Ensure your server meets the minimum requirements.
|
||||||
|
3. **File Permissions**: Check that your WordPress installation has the correct file permissions.
|
||||||
|
4. **Memory Limit**: Increase PHP memory limit if you encounter memory-related errors.
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
After installation, refer to the [Usage Instructions](Usage-Instructions) to learn how to use and customize the plugin.
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
# WordPress Plugin Starter Template - AI Assistant Prompt
|
||||||
|
|
||||||
|
This document provides a comprehensive prompt to help you get started with creating your own WordPress plugin using this starter template with the assistance of AI tools like GitHub Copilot, Claude, or ChatGPT.
|
||||||
|
|
||||||
|
## Important: Optimize AI Context
|
||||||
|
|
||||||
|
**Before starting, add the AGENTS.md file and .agents/ directory to your AI IDE chat context.** In most AI IDEs, you can pin these files to ensure they're considered in each message. This will help the AI understand the project structure and follow the established best practices.
|
||||||
|
|
||||||
|
## Initial Setup Prompt
|
||||||
|
|
||||||
|
Use the following prompt to guide the AI assistant in helping you set up your new plugin based on this template:
|
||||||
|
|
||||||
|
```
|
||||||
|
I'm creating a new WordPress plugin based on the wp-plugin-starter-template-for-ai-coding template. Please help me customize this template for my specific plugin needs.
|
||||||
|
|
||||||
|
Here are the details for my new plugin:
|
||||||
|
|
||||||
|
- Plugin Name: [YOUR PLUGIN NAME]
|
||||||
|
- Plugin Slug: [YOUR-PLUGIN-SLUG]
|
||||||
|
- Text Domain: [your-plugin-text-domain]
|
||||||
|
- Namespace: [VENDOR]\[PluginName]
|
||||||
|
- Description: [BRIEF DESCRIPTION OF YOUR PLUGIN]
|
||||||
|
- Version: 0.1.0 (starting version)
|
||||||
|
- Author: [YOUR NAME/ORGANIZATION]
|
||||||
|
- Author URI: [YOUR WEBSITE]
|
||||||
|
- License: GPL-2.0+ (or specify another compatible license)
|
||||||
|
- Requires WordPress: [MINIMUM WP VERSION, e.g., 5.0]
|
||||||
|
- Requires PHP: [MINIMUM PHP VERSION, e.g., 7.0]
|
||||||
|
- GitHub Repository: [YOUR GITHUB REPO URL]
|
||||||
|
- Gitea Repository (if applicable): [YOUR GITEA REPO URL]
|
||||||
|
|
||||||
|
I need help with the following tasks:
|
||||||
|
|
||||||
|
1. Updating all template placeholders with my plugin information
|
||||||
|
2. Customizing the plugin structure for my specific needs
|
||||||
|
3. Setting up the initial functionality for my plugin
|
||||||
|
|
||||||
|
I've added the AGENTS.md and .agents/ directory to the chat context to ensure you have all the necessary information about the project structure and best practices.
|
||||||
|
|
||||||
|
Please guide me through this process step by step, starting with identifying all files that need to be updated with my plugin information.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Files That Need Updating
|
||||||
|
|
||||||
|
The AI will help you identify and update the following files with your plugin information:
|
||||||
|
|
||||||
|
1. **Main Plugin File**: Rename `wp-plugin-starter-template.php` to `your-plugin-slug.php` and update all plugin header information
|
||||||
|
2. **README.md**: Update with your plugin details, features, and installation instructions
|
||||||
|
3. **readme.txt**: Update WordPress.org plugin repository information
|
||||||
|
4. **CHANGELOG.md**: Initialize with your starting version
|
||||||
|
5. **composer.json**: Update package name and description
|
||||||
|
6. **languages/pot file**: Rename and update the POT file
|
||||||
|
7. **.github/workflows/**: Update GitHub Actions workflows with your repository information
|
||||||
|
8. **.wiki/**: Update wiki documentation with your plugin information
|
||||||
|
9. **AGENTS.md**: Update AI assistant guidance for your specific plugin
|
||||||
|
10. **includes/plugin.php**: Update namespace and class references
|
||||||
|
11. **includes/core.php**: Update namespace and customize core functionality
|
||||||
|
12. **admin/lib/admin.php**: Update namespace and customize admin functionality
|
||||||
|
|
||||||
|
## Customization Process
|
||||||
|
|
||||||
|
After providing the initial information, follow this process with your AI assistant:
|
||||||
|
|
||||||
|
### 1. File Renaming
|
||||||
|
|
||||||
|
Ask the AI to help you identify all files that need to be renamed:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please list all files that need to be renamed to match my plugin slug, and provide the commands to rename them.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Namespace Updates
|
||||||
|
|
||||||
|
Ask the AI to help you update all namespace references:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update all namespace references from WPALLSTARS\PluginStarterTemplate to [VENDOR]\[PluginName] throughout the codebase.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. Text Domain Updates
|
||||||
|
|
||||||
|
Ask the AI to help you update all text domain references:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update all text domain references from 'wp-plugin-starter-template' to '[your-plugin-text-domain]' throughout the codebase.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. Function Prefix Updates
|
||||||
|
|
||||||
|
Ask the AI to help you update any function prefixes:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update any function prefixes from 'wpst_' to '[your_prefix]_' throughout the codebase.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. Customizing Core Functionality
|
||||||
|
|
||||||
|
Ask the AI to help you customize the core functionality for your specific plugin needs:
|
||||||
|
|
||||||
|
```
|
||||||
|
Now I'd like to customize the core functionality for my plugin. Here's what my plugin should do:
|
||||||
|
|
||||||
|
[DESCRIBE YOUR PLUGIN'S CORE FUNCTIONALITY]
|
||||||
|
|
||||||
|
Please help me modify the includes/core.php file to implement this functionality.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. Customizing Admin Interface
|
||||||
|
|
||||||
|
Ask the AI to help you customize the admin interface for your specific plugin needs:
|
||||||
|
|
||||||
|
```
|
||||||
|
I'd like to customize the admin interface for my plugin. Here's what I need in the admin area:
|
||||||
|
|
||||||
|
[DESCRIBE YOUR PLUGIN'S ADMIN INTERFACE NEEDS]
|
||||||
|
|
||||||
|
Please help me modify the admin/lib/admin.php file and any other necessary files to implement this.
|
||||||
|
```
|
||||||
|
|
||||||
|
### 7. Testing Setup
|
||||||
|
|
||||||
|
Ask the AI to help you set up testing for your plugin:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me update the testing setup to match my plugin's namespace and functionality. I want to ensure I have proper test coverage for the core features.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Additional Customization Areas
|
||||||
|
|
||||||
|
Depending on your plugin's needs, you might want to ask the AI for help with:
|
||||||
|
|
||||||
|
1. **Custom Post Types**: Setting up custom post types and taxonomies
|
||||||
|
2. **Settings API**: Implementing WordPress Settings API for your plugin options
|
||||||
|
3. **Shortcodes**: Creating shortcodes for front-end functionality
|
||||||
|
4. **Widgets**: Developing WordPress widgets
|
||||||
|
5. **REST API**: Adding custom REST API endpoints
|
||||||
|
6. **Blocks**: Creating Gutenberg blocks
|
||||||
|
7. **Internationalization**: Ensuring proper i18n setup
|
||||||
|
8. **Database Tables**: Creating custom database tables if needed
|
||||||
|
9. **Cron Jobs**: Setting up WordPress cron jobs
|
||||||
|
10. **User Roles and Capabilities**: Managing custom user roles and capabilities
|
||||||
|
|
||||||
|
## Final Review
|
||||||
|
|
||||||
|
Once you've completed the customization, ask the AI to help you review everything:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please help me review all the changes we've made to ensure:
|
||||||
|
|
||||||
|
1. All template placeholders have been replaced with my plugin information
|
||||||
|
2. All namespaces, text domains, and function prefixes have been updated consistently
|
||||||
|
3. The plugin structure matches my specific needs
|
||||||
|
4. The initial functionality is properly implemented
|
||||||
|
5. All documentation (README.md, readme.txt, wiki) is updated and consistent
|
||||||
|
|
||||||
|
Are there any issues or inconsistencies that need to be addressed?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Building and Testing
|
||||||
|
|
||||||
|
Finally, ask the AI to guide you through building and testing your plugin:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please guide me through the process of building and testing my plugin:
|
||||||
|
|
||||||
|
1. How do I use the build script to create a deployable version?
|
||||||
|
2. What tests should I run to ensure everything is working correctly?
|
||||||
|
3. How do I set up a local testing environment?
|
||||||
|
4. What should I check before releasing the first version?
|
||||||
|
```
|
||||||
|
|
||||||
|
## Optimizing AI Assistance
|
||||||
|
|
||||||
|
To ensure the AI assistant has all the necessary context about your plugin's structure and best practices:
|
||||||
|
|
||||||
|
```
|
||||||
|
Please add the AGENTS.md and .agents/ directory to your AI IDE chat context. In most AI IDEs, you can pin these files to ensure they're considered in each message. This will help the AI understand the project structure and follow the established best practices.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Remember
|
||||||
|
|
||||||
|
- This template is designed to be a starting point. Feel free to add, remove, or modify components as needed for your specific plugin.
|
||||||
|
- The AI assistant can help you understand the existing code and make appropriate modifications, but you should review all changes to ensure they meet your requirements.
|
||||||
|
- Always test your plugin thoroughly before releasing it.
|
||||||
|
- Keep documentation updated as you develop your plugin.
|
||||||
|
- Pin the AGENTS.md and .agents/ files in your AI IDE chat to ensure the AI has the necessary context for each interaction.
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
This plugin is based on the [WordPress Plugin Starter Template for AI Coding](https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding) by WPALLSTARS.
|
||||||
@@ -0,0 +1,121 @@
|
|||||||
|
# Usage Instructions
|
||||||
|
|
||||||
|
This guide provides instructions for using and customizing the WordPress Plugin Starter Template for your own plugin development.
|
||||||
|
|
||||||
|
## Basic Usage
|
||||||
|
|
||||||
|
The WordPress Plugin Starter Template is designed to be a starting point for your WordPress plugin development. It provides a well-structured codebase that you can customize to create your own plugin.
|
||||||
|
|
||||||
|
### Template Structure
|
||||||
|
|
||||||
|
The template follows a modular structure:
|
||||||
|
|
||||||
|
- `wp-plugin-starter-template.php`: Main plugin file with plugin headers
|
||||||
|
- `includes/`: Core plugin functionality
|
||||||
|
- `plugin.php`: Main plugin class that initializes everything
|
||||||
|
- `core.php`: Core functionality class
|
||||||
|
- `updater.php`: Update mechanism for multiple sources
|
||||||
|
- `admin/`: Admin-specific functionality
|
||||||
|
- `lib/`: Admin classes
|
||||||
|
- `css/`: Admin stylesheets
|
||||||
|
- `js/`: Admin JavaScript files
|
||||||
|
- `languages/`: Translation files
|
||||||
|
- `.github/workflows/`: GitHub Actions workflows
|
||||||
|
- `.agents/`: Documentation for AI assistants
|
||||||
|
- `.wiki/`: Wiki documentation templates
|
||||||
|
|
||||||
|
### Customizing for Your Plugin
|
||||||
|
|
||||||
|
1. **Rename Files and Update Namespaces**:
|
||||||
|
- Rename `wp-plugin-starter-template.php` to your plugin name
|
||||||
|
- Update the namespace from `WPALLSTARS\PluginStarterTemplate` to your own
|
||||||
|
- Update text domain from `wp-plugin-starter-template` to your own
|
||||||
|
|
||||||
|
2. **Update Plugin Headers**:
|
||||||
|
- Edit the plugin headers in the main PHP file
|
||||||
|
- Update GitHub/Gitea repository URLs
|
||||||
|
|
||||||
|
3. **Customize Functionality**:
|
||||||
|
- Modify the core functionality in `includes/core.php`
|
||||||
|
- Add your own classes as needed
|
||||||
|
- Customize admin interfaces in the `admin/` directory
|
||||||
|
|
||||||
|
4. **Update Documentation**:
|
||||||
|
- Update README.md and readme.txt with your plugin information
|
||||||
|
- Customize wiki documentation in the `.wiki/` directory
|
||||||
|
|
||||||
|
## Advanced Usage
|
||||||
|
|
||||||
|
### Adding Admin Pages
|
||||||
|
|
||||||
|
The template includes a structure for adding admin pages to the WordPress dashboard. To add an admin page:
|
||||||
|
|
||||||
|
1. Uncomment the `add_admin_menu` method in `admin/lib/admin.php`
|
||||||
|
2. Customize the menu parameters to match your plugin
|
||||||
|
3. Create the corresponding render method for your admin page
|
||||||
|
4. Create template files in an `admin/templates/` directory
|
||||||
|
|
||||||
|
### Adding Settings
|
||||||
|
|
||||||
|
To add settings to your plugin:
|
||||||
|
|
||||||
|
1. Create a settings class in `includes/settings.php`
|
||||||
|
2. Register settings using the WordPress Settings API
|
||||||
|
3. Create form fields for your settings
|
||||||
|
4. Handle settings validation and sanitization
|
||||||
|
|
||||||
|
### Adding Custom Post Types or Taxonomies
|
||||||
|
|
||||||
|
To add custom post types or taxonomies:
|
||||||
|
|
||||||
|
1. Create a new class in `includes/` for your post type or taxonomy
|
||||||
|
2. Register the post type or taxonomy in the class constructor
|
||||||
|
3. Initialize the class in `includes/plugin.php`
|
||||||
|
|
||||||
|
### Internationalization
|
||||||
|
|
||||||
|
The template is ready for internationalization. To make your plugin translatable:
|
||||||
|
|
||||||
|
1. Use translation functions for all user-facing strings:
|
||||||
|
- `__()` for simple strings
|
||||||
|
- `_e()` for echoed strings
|
||||||
|
- `esc_html__()` for escaped strings
|
||||||
|
2. Update the text domain in all translation functions
|
||||||
|
3. Generate a POT file for translations
|
||||||
|
|
||||||
|
### Update Mechanism
|
||||||
|
|
||||||
|
The template includes an update mechanism that supports multiple sources:
|
||||||
|
|
||||||
|
- WordPress.org
|
||||||
|
- GitHub
|
||||||
|
- Gitea
|
||||||
|
|
||||||
|
To configure the update mechanism:
|
||||||
|
|
||||||
|
1. Update the plugin headers in the main PHP file
|
||||||
|
2. Customize the `updater.php` file if needed
|
||||||
|
3. Ensure your repository follows the required structure for updates
|
||||||
|
|
||||||
|
## Building and Releasing
|
||||||
|
|
||||||
|
The template includes scripts for building and releasing your plugin:
|
||||||
|
|
||||||
|
1. **Building the Plugin**:
|
||||||
|
```bash
|
||||||
|
./build.sh <version>
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Deploying to a Local WordPress Installation**:
|
||||||
|
```bash
|
||||||
|
./scripts/deploy-local.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Creating a Release**:
|
||||||
|
- Tag a new version in Git
|
||||||
|
- Push the tag to GitHub
|
||||||
|
- The GitHub Actions workflow will create a release
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
After customizing the template for your needs, refer to the [Architecture Overview](Architecture-Overview) to understand the plugin's structure in more detail.
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
## User Documentation
|
||||||
|
|
||||||
|
* [Home](Home)
|
||||||
|
* [Installation Guide](Installation-Guide)
|
||||||
|
* [Usage Instructions](Usage-Instructions)
|
||||||
|
* [Frequently Asked Questions](Frequently-Asked-Questions)
|
||||||
|
* [Troubleshooting](Troubleshooting)
|
||||||
|
|
||||||
|
## Developer Documentation
|
||||||
|
|
||||||
|
* [Architecture Overview](Architecture-Overview)
|
||||||
|
* [Customization Guide](Customization-Guide)
|
||||||
|
* [Extending the Plugin](Extending-the-Plugin)
|
||||||
|
* [Coding Standards](Coding-Standards)
|
||||||
|
* [Release Process](Release-Process)
|
||||||
|
|
||||||
|
## AI Documentation
|
||||||
|
|
||||||
|
* [AI Workflow Documentation](AI-Workflow-Documentation)
|
||||||
|
|
||||||
|
## Additional Resources
|
||||||
|
|
||||||
|
* [Changelog](Changelog)
|
||||||
|
* [Contributing](Contributing)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Plugin Name: WordPress Plugin Starter Template
|
||||||
|
* Plugin URI: https://www.wpallstars.com
|
||||||
|
* Description: A comprehensive starter template for WordPress plugins with best practices for AI-assisted development.
|
||||||
|
* Version: 0.1.15
|
||||||
|
* Author: Your Name & The WPALLSTARS Team
|
||||||
|
* Author URI: https://www.wpallstars.com
|
||||||
|
* License: GPL-2.0+
|
||||||
|
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
|
||||||
|
* Text Domain: wp-plugin-starter-template
|
||||||
|
* Domain Path: /languages
|
||||||
|
* GitHub Plugin URI: wpallstars/wp-plugin-starter-template-for-ai-coding
|
||||||
|
* GitHub Branch: main
|
||||||
|
* Primary Branch: main
|
||||||
|
* Release Branch: main
|
||||||
|
* Release Asset: true
|
||||||
|
* Requires at least: 5.0
|
||||||
|
* Requires PHP: 7.4
|
||||||
|
* Update URI: https://github.com/wpallstars/wp-plugin-starter-template-for-ai-coding
|
||||||
|
*
|
||||||
|
* Gitea Plugin URI: https://gitea.wpallstars.com/wpallstars/wp-plugin-starter-template-for-ai-coding
|
||||||
|
* Gitea Branch: main
|
||||||
|
* Gitea Languages: languages
|
||||||
|
*
|
||||||
|
* @package WPALLSTARS\PluginStarterTemplate
|
||||||
|
*/
|
||||||
|
|
||||||
|
// If this file is called directly, abort.
|
||||||
|
if ( ! defined( 'WPINC' ) ) {
|
||||||
|
die;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the main plugin class.
|
||||||
|
require_once plugin_dir_path( __FILE__ ) . 'includes/class-plugin.php';
|
||||||
|
|
||||||
|
// Initialize the plugin and store the instance in a global variable.
|
||||||
|
$wpst_plugin = new WPALLSTARS\PluginStarterTemplate\Plugin( __FILE__, '0.1.15' );
|
||||||
|
|
||||||
|
// Initialize the plugin.
|
||||||
|
$wpst_plugin->init();
|
||||||
Reference in new issue
Block a user