Repository navigation
Conversation
Branding moves off progressplanner.com to a static API built from the
ProgressPlanner/yolo-branding repo. The plugin now fetches one resolved
document per brand (/v1/brands/{id}.json) from a new
PROGRESS_PLANNER_BRANDING_SERVER_URL (default https://branding.yolo.online);
PROGRESS_PLANNER_REMOTE_SERVER_ROOT_URL keeps serving lessons, challenges and
onboarding.
- Logo and menu icon are URLs in the document: no more /wp/v2/media lookups.
- Badges come from the document's badge map; unbranded sites read the
defaults (0.json) for badges only and keep the built-in text defaults.
An unknown badge shows the placeholder (the old endpoint returned the
Nov 2024 badge).
- Branding cache drops from a week to a day.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
Test on Playground |
Contributor
🔍 WordPress Plugin Check Report
📊 Report
|
| 📍 Line | 🔖 Check | 💬 Message |
|---|---|---|
103 |
WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in | Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://docs.wpvip.com/databases/optimize-queries/using-post__not_in/ for more information. |
📁 classes/suggested-tasks/providers/class-content-review.php (4 warnings)
| 📍 Line | 🔖 Check | 💬 Message |
|---|---|---|
232 |
WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in | Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://docs.wpvip.com/databases/optimize-queries/using-post__not_in/ for more information. |
377 |
WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in | Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://docs.wpvip.com/databases/optimize-queries/using-post__not_in/ for more information. |
381 |
WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in | Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://docs.wpvip.com/databases/optimize-queries/using-post__not_in/ for more information. |
388 |
WordPressVIPMinimum.Performance.WPQueryParams.PostNotIn_post__not_in | Using exclusionary parameters, like post__not_in, in calls to get_posts() should be done with caution, see https://docs.wpvip.com/databases/optimize-queries/using-post__not_in/ for more information. |
📁 classes/activities/class-query.php (2 warnings)
| 📍 Line | 🔖 Check | 💬 Message |
|---|---|---|
71 |
PluginCheck.Security.DirectDB.UnescapedDBParameter | Unescaped parameter $table_name used in $wpdb->query()\n$table_name assigned unsafely at line 58. |
163 |
PluginCheck.Security.DirectDB.UnescapedDBParameter | Unescaped parameter $where_args used in $wpdb->get_results()\n$where_args assigned unsafely at line 153. |
📁 classes/suggested-tasks/data-collector/class-yoast-orphaned-content.php (1 warning)
| 📍 Line | 🔖 Check | 💬 Message |
|---|---|---|
111 |
PluginCheck.Security.DirectDB.UnescapedDBParameter | Unescaped parameter $query used in $wpdb->get_row()\n$query assigned unsafely at line 98. |
📁 classes/suggested-tasks/data-collector/class-terms-without-description.php (1 warning)
| 📍 Line | 🔖 Check | 💬 Message |
|---|---|---|
108 |
PluginCheck.Security.DirectDB.UnescapedDBParameter | Unescaped parameter $query used in $wpdb->get_results()\n$query assigned unsafely at line 106. |
📁 classes/suggested-tasks/data-collector/class-terms-without-posts.php (1 warning)
| 📍 Line | 🔖 Check | 💬 Message |
|---|---|---|
120 |
PluginCheck.Security.DirectDB.UnescapedDBParameter | Unescaped parameter $query used in $wpdb->get_results()\n$query assigned unsafely at line 118. |
🤖 Generated by WordPress Plugin Check Action • Learn more about Plugin Check
Contributor
✅ Code Coverage Report
🎉 Great job maintaining/improving code coverage! 📊 File-level Coverage Changes (3 files)📈 Coverage Improved
📉 Coverage Decreased
ℹ️ About this report
|
jdevalk
reviewed
Sep 28, 2026
| return \untrailingslashit( | ||
| \defined( 'PROGRESS_PLANNER_BRANDING_SERVER_URL' ) | ||
| ? \constant( 'PROGRESS_PLANNER_BRANDING_SERVER_URL' ) | ||
| : 'https://branding.yolo.online' |
Member
There was a problem hiding this comment.
This might become branding.your.online - let's verify before merging.
jdevalk
reviewed
Sep 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this does
Branding moves off progressplanner.com to a static API built from the new
ProgressPlanner/your-brandingrepo. It's served frombranding.your.onlineon Bunny. The Cloudflare demo atyolo-branding.pages.devis temporary.PROGRESS_PLANNER_BRANDING_SERVER_URL, defaulthttps://branding.your.online.PROGRESS_PLANNER_REMOTE_SERVER_ROOT_URLis unchanged and still serves lessons, challenges and onboarding.classes/ui/class-branding.phpfetches one resolved document per brand,/v1/brands/{id}.json. Every field and asset there already falls back to the defaults, and asset URLs carry a content hash. The logo and menu icon are URLs, so the/wp/v2/media/{id}lookups are gone.badgesmap, through the newget_badge_url()/get_badge_urls(). The four places that builtbadge-svgURLs now use it:class-enqueue.php,prpl-badge.js,upgrade-tasks.phpandsunset-certificate.php. The certificate still uses the default badges.0.jsonfor badges only. Text, logo and widgets keep the plugin's built-in defaults, so they look exactly as before.test-class-branding-cache.php).Behaviour changes
Deployment
branding.your.onlineis live on Bunny. On 2026-09-29 all 14 JSON files there matched a fresh build ofyour-brandingmain, and all 182 asset URLs returned 200.The progressplanner.com endpoints (
pp-branding,badge-svg) stay as they are for plugin versions already installed.Testing
Checked locally with
define( 'PROGRESS_PLANNER_BRANDING_SERVER_URL', 'https://yolo-branding.pages.dev' );:badge-svgURLs are left.?pp_branding_id=5159(yourhosting):?pp_branding_id=6318(InMotion): logo, "Boldi", and 55 of 55 badges.InvalidStateError: Transition was abortedon reload, which also happens ondevelop.phpcson the changed files, PHPStan, and eslint all pass.🤖 Generated with Claude Code