Skip to content

Merges feature/schema-aggregation to trunk#22973

Merged
pls78 merged 400 commits intotrunkfrom
feature/schema_aggregator
Feb 17, 2026
Merged

Merges feature/schema-aggregation to trunk#22973
pls78 merged 400 commits intotrunkfrom
feature/schema_aggregator

Conversation

@pls78
Copy link
Member

@pls78 pls78 commented Feb 13, 2026

Context

  • We want to prepare the 27.1 release by merging the feature branch feature/schema-aggregation to trunk.

Summary

This PR can be summarized in the following changelog entry:

  • Introduces the Schema aggregation feature.

Relevant technical choices:

Test instructions

Test instructions for the acceptance test before the PR gets merged

This PR can be acceptance tested by following these steps:

  • Test the schema aggregation feature both with indexables enabled and disabled

Relevant test scenarios

  • Changes should be tested with the browser console open
  • Changes should be tested on different posts/pages/taxonomies/custom post types/custom taxonomies
  • Changes should be tested on different editors (Default Block/Gutenberg/Classic/Elementor/other)
  • Changes should be tested on different browsers
  • Changes should be tested on multisite

Test instructions for QA when the code is in the RC

  • QA should use the same steps as above.

Impact check

This PR affects the following parts of the plugin, which may require extra testing:

Other environments

  • This PR also affects Shopify. I have added a changelog entry starting with [shopify-seo], added test instructions for Shopify and attached the Shopify label to this PR.
  • This PR also affects Yoast SEO for Google Docs. I have added a changelog entry starting with [yoast-doc-extension], added test instructions for Yoast SEO for Google Docs and attached the Google Docs Add-on label to this PR.

Documentation

  • I have written documentation for this change. For example, comments in the Relevant technical choices, comments in the code, documentation on Confluence / shared Google Drive / Yoast developer portal, or other.

Quality assurance

  • I have tested this code to the best of my abilities.
  • During testing, I had activated all plugins that Yoast SEO provides integrations for.
  • I have added unit tests to verify the code works as intended.
  • If any part of the code is behind a feature flag, my test instructions also cover cases where the feature flag is switched off.
  • I have written this PR in accordance with my team's definition of done.
  • I have checked that the base branch is correctly set.
  • I have run grunt build:images and commited the results, if my PR introduces new images or SVGs.

Innovation

  • No innovation project is applicable for this PR.
  • This PR falls under an innovation project. I have attached the innovation label.
  • I have added my hours to the WBSO document.

pls78 and others added 30 commits November 28, 2025 16:40
…he-get-xml-endpoint

864 add indexable fallback for the get xml endpoint
…646-differentiate-pagination-strategy-for-products

# Conflicts:
#	src/schema-aggregator/application/aggregate-site-schema-map-command-handler.php
#	src/schema-aggregator/application/schema_map/schema-map-builder.php
…ategy-for-products

Make the max amount per page based on the post type.
…s-seo into 884-include-yoast-woocommerce-product-schema-in-the-aggregated-schema
…oduct-schema-in-the-aggregated-schema

Allow for woo schema to be added to our graph.
…chema_aggregator

# Conflicts:
#	admin/tracking/class-tracking-settings-data.php
#	inc/options/class-wpseo-option-wpseo.php
Comprehensive test coverage for the Indexable_Count value object including:
- Constructor property initialization
- get_count() with various count values (zero, positive, negative, large)
- get_post_type() with different post type formats
- Integration tests verifying getters return constructor values

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Comprehensive test coverage for the Indexable_Count_Collection class including:
- Constructor initializes empty collection
- add_indexable_count() adds items correctly
- get_indexable_counts() returns correct array
- Collection maintains insertion order
- Tests for empty, single, and multiple items

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Comprehensive test coverage for the Page_Controls value object including:
- Constructor sets page, page_size, and post_type properties
- get_page() with various page numbers
- get_page_size() with different page size values
- get_post_type() with various post type formats
- Integration tests verifying all getters return constructor values

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Comprehensive test coverage for the Schema_Piece class including:
- Constructor with string and array types
- get_type() returns correct type (string or array)
- get_data() returns various data structures
- get_id() handles presence/absence of @id in data
- to_json_ld_graph() wraps data in @graph structure correctly
- Integration tests with various data and type combinations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Comprehensive test coverage for the Cache Manager including:
- Constructor initializes Config dependency
- get() method with cache enabled/disabled scenarios
- get() handles invalid parameters, cache misses, corrupted data
- get() returns cached data correctly with various page/per_page combinations
- set() validates parameters and caches data successfully
- set() uses Config to determine expiration times
- invalidate() deletes specific cache entries
- invalidate() with page only clears all per_page variations using wpdb
- invalidate() with no params calls invalidate_all()
- invalidate_all() removes all cache entries via database query
- Proper error handling when wpdb is unavailable

Tests use Brain Monkey for WordPress function mocking and Mockery for object dependencies.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Split the monolithic Manager_Test.php into multiple test files following the Llms_Txt pattern:
- Abstract_Manager_Test.php - Base class with shared setup (Config mock, instance)
- Constructor_Test.php - Tests constructor initialization
- Get_Test.php - Tests get() method with cache scenarios
- Set_Test.php - Tests set() method with validation and caching
- Invalidate_Test.php - Tests invalidate() with various parameters
- Invalidate_All_Test.php - Tests invalidate_all() method

This structure improves test organization and maintainability while maintaining full coverage (26 tests, 111 assertions).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@pls78 pls78 changed the title Merges feature/schema-aggregator to trunk Merges feature/schema-aggregation to trunk Feb 13, 2026
@github-actions
Copy link

A merge conflict has been detected for the proposed code changes in this PR. Please resolve the conflict by either rebasing the PR or merging in changes from the base branch.

@private-packagist
Copy link

The composer.lock diff comment has been updated to reflect new changes in this PR.

@private-packagist
Copy link

The composer.lock diff comment has been updated to reflect new changes in this PR.

@pls78 pls78 added changelog: enhancement Needs to be included in the 'Enhancements' category in the changelog and removed changelog: non-user-facing Needs to be included in the 'Non-userfacing' category in the changelog labels Feb 17, 2026
@pls78 pls78 merged commit b51d845 into trunk Feb 17, 2026
74 checks passed
@pls78 pls78 deleted the feature/schema_aggregator branch February 17, 2026 11:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog: enhancement Needs to be included in the 'Enhancements' category in the changelog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants