Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
8d0dcdb
feat!: Refactor plugin
nlemoine Mar 21, 2026
541730c
Add integration and unit tests for various components
nlemoine Mar 21, 2026
905c403
feat: Add integration for The SEO Framework with custom ACF location …
nlemoine Mar 22, 2026
3270175
feat: Enhance integration tests for Polylang and Yoast SEO by clearin…
nlemoine Mar 22, 2026
03d82f2
feat: Improve integration tests by ensuring taxonomy registration and…
nlemoine Mar 22, 2026
f0c2dad
feat: Update page slug display in dropdown and improve related descri…
nlemoine Mar 22, 2026
9b49196
feat: Improve permalink handling in dropdown and set default language…
nlemoine Mar 22, 2026
ce4eff6
feat: Ensure default language is set for Polylang to prevent TypeErro…
nlemoine Mar 22, 2026
417e6ec
feat: Enhance Polylang integration by setting default language for pa…
nlemoine Mar 22, 2026
f5ce60d
feat: Set up Polylang languages in tests to prevent TypeError during …
nlemoine Mar 22, 2026
3732674
feat: Refactor language setup in tests to use PLL()->model directly f…
nlemoine Mar 22, 2026
5777539
feat: Update README for clarity and enhance bootstrap process for Pol…
nlemoine Mar 22, 2026
bfd09cf
feat: Improve type safety and error handling across various components
nlemoine Mar 22, 2026
1bf1207
feat: Add body class filtering for custom post type pages
nlemoine Mar 23, 2026
6559b55
Refactor: Remove backslashes from function calls in AdvancedCustomFie…
nlemoine Mar 23, 2026
e7b2e2d
feat: Update function calls to use namespaced versions for improved c…
nlemoine Mar 23, 2026
92d2afa
Add Slevomat Coding Standard and update code for consistency
nlemoine Mar 23, 2026
0bbe0c0
refactor: Simplify coverage generation and improve code quality check…
nlemoine Mar 23, 2026
24898ef
feat: Enhance Yoast SEO integration with targeted fix for page detect…
nlemoine Mar 23, 2026
25db8f6
feat: Enhance coverage generation with additional test suites and mer…
nlemoine Mar 23, 2026
9b5a6f7
feat: Update integration tests to include WordPress version matrix an…
nlemoine Mar 23, 2026
3fb64dd
feat: Add WPML integration
losted Mar 30, 2026
e8394a7
feat: Add coverage for WPML in QA workflow
nlemoine May 8, 2026
2b64409
fix: Flush rewrite rules on any permalink-affecting page update
nlemoine May 8, 2026
437c747
feat: warn before slug changes for assigned CPT pages
nlemoine May 8, 2026
d172426
chore: reformat composer.json and add changelog support link
nlemoine May 8, 2026
3a216cf
feat: i18n with .pot file generation
nlemoine May 8, 2026
0e99812
ci: add release workflow with release-please
nlemoine May 8, 2026
2d94bb1
ci: pin third-party actions to commit SHAs in qa workflow
nlemoine May 8, 2026
773019c
feat: clean up plugin options on uninstall
nlemoine May 8, 2026
2ea1ebe
feat!: migrate pre-1.0 installs to opt-in use_slug
nlemoine May 8, 2026
b484568
docs: refresh README for the 1.0 release
nlemoine May 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Files and directories to omit from `git archive` output (release zips).
# Anything tracked but not needed at runtime in a distributed plugin.

/.claude export-ignore
/.github export-ignore
/.gitattributes export-ignore
/.gitignore export-ignore
/.release-please-manifest.json export-ignore
/assets export-ignore
/docs export-ignore
/package.json export-ignore
/pnpm-lock.yaml export-ignore
/release-please-config.json export-ignore
/tests export-ignore
/*.dist export-ignore
104 changes: 104 additions & 0 deletions .github/workflows/qa.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: QA

on:
push:
branches:
- main
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
php-versions:
runs-on: ubuntu-latest
outputs:
versions: ${{ steps.versions.outputs.version }}
steps:
- uses: actions/checkout@v6
- id: versions
uses: WyriHaximus/github-action-composer-php-versions-in-range@7c91c459140becf43d93d3975070f308ab791949 # v1.16.2
with:
upcomingReleases: true

unit-tests:
needs: php-versions
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php: ${{ fromJson(needs.php-versions.outputs.versions) }}
steps:
- uses: actions/checkout@v6
- uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0
with:
php-version: ${{ matrix.php }}
coverage: none
- uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0
- run: composer test:unit

integration-tests:
needs: php-versions
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.wp == 'trunk' }}
strategy:
fail-fast: false
matrix:
php: ${{ fromJson(needs.php-versions.outputs.versions) }}
wp: ['latest']
suite:
- test:core
- test:wordpress-seo
- test:polylang
- test:autodescription
include:
- php: '8.2'
wp: 'trunk'
suite: test:core
name: PHP ${{ matrix.php }} | WP ${{ matrix.wp }} | ${{ matrix.suite }}
steps:
- uses: actions/checkout@v6
- uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0
with:
php-version: ${{ matrix.php }}
coverage: none
- uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0
- run: composer ${{ matrix.suite }}
env:
WP_VERSION: ${{ matrix.wp }}

coverage:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0
with:
php-version: '8.2'
coverage: pcov
- uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0
- name: Coverage (core)
run: php -d pcov.enabled=1 vendor/bin/phpunit --testsuite=unit,integration --coverage-php=build/coverage-core.cov
- name: Coverage (polylang)
run: PLUGINS=polylang php -d pcov.enabled=1 vendor/bin/phpunit --testsuite=plugin-integration --coverage-php=build/coverage-polylang.cov
- name: Coverage (WPML)
run: PLUGINS=wpml php -d pcov.enabled=1 vendor/bin/phpunit --testsuite=plugin-integration --coverage-php=build/coverage-wpml.cov
- name: Coverage (wordpress-seo)
run: PLUGINS=wordpress-seo php -d pcov.enabled=1 vendor/bin/phpunit --testsuite=plugin-integration --coverage-php=build/coverage-wordpress-seo.cov
- name: Coverage (autodescription)
run: PLUGINS=autodescription php -d pcov.enabled=1 vendor/bin/phpunit --testsuite=plugin-integration --coverage-php=build/coverage-autodescription.cov
- name: Merge coverage
run: |
composer require --dev phpunit/phpcov --quiet
vendor/bin/phpcov merge build --clover build/coverage.xml
- uses: codecov/codecov-action@75cd11691c0faa626561e295848008c8a7dddffe # v5.5.4
with:
files: build/coverage.xml
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

static-analysis:
uses: inpsyde/reusable-workflows/.github/workflows/static-analysis-php.yml@6bbc8c9422de0f685b71cfb8f9cddd2b591e2c50 # main as of 2026-05-08

coding-standards:
uses: inpsyde/reusable-workflows/.github/workflows/coding-standards-php.yml@6bbc8c9422de0f685b71cfb8f9cddd2b591e2c50 # main as of 2026-05-08
69 changes: 69 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
name: Release

on:
push:
branches:
- main

permissions: {}

concurrency:
group: release-${{ github.ref }}
cancel-in-progress: false

jobs:
release-please:
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
contents: write
pull-requests: write
outputs:
release_created: ${{ steps.rp.outputs.release_created }}
tag_name: ${{ steps.rp.outputs.tag_name }}
version: ${{ steps.rp.outputs.version }}
steps:
- id: rp
uses: googleapis/release-please-action@45996ed1f6d02564a971a2fa1b5860e934307cf7 # v5.0.0

build:
needs: release-please
if: needs.release-please.outputs.release_created == 'true'
runs-on: ubuntu-latest
timeout-minutes: 15
permissions:
contents: write
steps:
- uses: actions/checkout@v6

- uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # 2.37.0
with:
php-version: '8.2'
coverage: none

- uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0
with:
composer-options: '--no-dev --optimize-autoloader --classmap-authoritative'

- name: Build release zip
env:
VERSION: ${{ needs.release-please.outputs.version }}
run: |
mkdir -p dist
# Tracked files only, with .gitattributes export-ignore filtering applied.
git archive --prefix=page-for-custom-post-type/ HEAD | tar -x -C dist
# vendor/ is gitignored, so git archive doesn't include it. Copy it in.
cp -r vendor dist/page-for-custom-post-type/vendor
# Inject the bundled-only autoload require.
sed -i "s|// @bundle-autoload|require_once __DIR__ . '/vendor/autoload.php';|" dist/page-for-custom-post-type/plugin.php
grep -q "require_once __DIR__ . '/vendor/autoload.php';" dist/page-for-custom-post-type/plugin.php \
|| { echo "::error::bundle autoload marker replacement failed"; exit 1; }
php -l dist/page-for-custom-post-type/plugin.php
(cd dist && zip -rq "../page-for-custom-post-type-${VERSION}.zip" page-for-custom-post-type)

- name: Upload zip to release
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ needs.release-please.outputs.tag_name }}
VERSION: ${{ needs.release-please.outputs.version }}
run: gh release upload "$TAG" "page-for-custom-post-type-${VERSION}.zip" --clobber
20 changes: 0 additions & 20 deletions .github/workflows/tests.yml

This file was deleted.

19 changes: 14 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
vendor
wordpress
wp-content
.phpunit.result.cache
composer.lock
# Composer
/vendor
/composer.lock

# Tests
/wp-content
/.phpunit.result.cache
/tmp

# Agent-generated docs (specs, plans, brainstorming notes)
/docs/superpowers

# Node
/node_modules
3 changes: 3 additions & 0 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
".": "0.5.0"
}
Loading
Loading