Updates unit tests to account for: - "Dynamically add CSS class to Paragraph block" (https://github.com/WordPress/gutenberg/pull/71207) - New block server-side block registrations. Updates the REST API posts controller's excerpt filter to account for "Post Excerpt Block: Fix length limits for both Editor and Front and fix ellipsis consistency" (https://github.com/WordPress/gutenberg/pull/74140/changes#r2783014013). Developed in https://github.com/WordPress/wordpress-develop/pull/10865. Props ellatrix, scruffian, desrosj. See #64595. --- I've included a log of the Gutenberg changes with the following command: git log --reverse --format="- %s" 7bf80ea84eb8b62eceb1bb3fe82e42163673ca79..59a08c5496008ca88f4b6b86f38838c3612d88c8 | sed 's|#\([0-9][0-9]*\)|https://github.com/WordPress/gutenberg/pull/\1|g; /github\.com\/WordPress\/gutenberg\/pull/!d' | pbcopy - Editor: Cleanup active post as needed (https://github.com/WordPress/gutenberg/pull/74118) - Build: fully resolve import paths in transpiled files (https://github.com/WordPress/gutenberg/pull/73822) - Extensible Site Editor: The Canvas should share the same ThemeProvider as all the surfaces (https://github.com/WordPress/gutenberg/pull/74125) - Add Badge component to UI package (https://github.com/WordPress/gutenberg/pull/73875) - Theme_JSON_Resolver: defensively cover against situations where the post is null (https://github.com/WordPress/gutenberg/pull/74124) - Site Editor: Add extensible site editor experiment (https://github.com/WordPress/gutenberg/pull/74123) - Components: Fix DateTimePicker timezone handling for non-string values (https://github.com/WordPress/gutenberg/pull/73887) - Global Fonts: Convert relative font URLs to absolute theme URLs in font-face styles (https://github.com/WordPress/gutenberg/pull/74115) - Global Fonts: Correctly convert relative font URLs to absolute theme URLs in font-face styles (https://github.com/WordPress/gutenberg/pull/74137) - Add Line Indent support (https://github.com/WordPress/gutenberg/pull/73114) - Update report-flaky-tests action to use CommonJS module format (https://github.com/WordPress/gutenberg/pull/74152) - Media Modal experiment: Always show thumbnail field (https://github.com/WordPress/gutenberg/pull/74147) - Refactor isBlockHidden selector to simplify block support check (https://github.com/WordPress/gutenberg/pull/74151) - Apply `post_type_archive_title` on post type archive title in Breadcrumbs (https://github.com/WordPress/gutenberg/pull/73966) - DataView: update free-composition story (https://github.com/WordPress/gutenberg/pull/74146) - Add checkerboard pattern for background in featured image preview (https://github.com/WordPress/gutenberg/pull/74091) - Fix Post Date Block: Semantic use of `date` tag inside link (https://github.com/WordPress/gutenberg/pull/73788) - Terms Query Block: Fix Max terms for non-hierarchical taxonomies (https://github.com/WordPress/gutenberg/pull/74130) - Fields: Add MediaEdit component (https://github.com/WordPress/gutenberg/pull/73537) - Docs: Enhance documentation for Interactivity API and iAPI Router (https://github.com/WordPress/gutenberg/pull/73766) - DataViews: Add groupBy.showLabel config option to control group header label visibility (https://github.com/WordPress/gutenberg/pull/74161) - Theme_JSON_Resolver: check for `WP_Post` instance (https://github.com/WordPress/gutenberg/pull/74172) - Breadcrumbs: Stabilize block (https://github.com/WordPress/gutenberg/pull/74166) - Menu, CustomSelectControl (v1 & 2): Update animation (https://github.com/WordPress/gutenberg/pull/74111) - Add RTL support for drop caps in paragraph block styles in the editor (https://github.com/WordPress/gutenberg/pull/74058) - Font Library: fix help text position in Upload tab (https://github.com/WordPress/gutenberg/pull/74157) - Media Modal experiment: Tweak padding of the modal for consistency (https://github.com/WordPress/gutenberg/pull/74155) - Block visibility based on screen size: add backend block support (https://github.com/WordPress/gutenberg/pull/73994) - Accordion Header: Fix potential undo trap (https://github.com/WordPress/gutenberg/pull/74182) - Classic Block: Always use modal and display block placeholder (https://github.com/WordPress/gutenberg/pull/74162) - Update ToggleGroupControl visual design (https://github.com/WordPress/gutenberg/pull/74036) - Comment Author Name: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74068) - Query Loop: Hide `change design` or `choose pattern` when is locked (https://github.com/WordPress/gutenberg/pull/74160) - Fix: Prevent `accordion-heading` submitting/sending forms (button `type="button"`) (https://github.com/WordPress/gutenberg/pull/74177) - Button: Improve the label of the button block in list view (https://github.com/WordPress/gutenberg/pull/74163) - Add list view tab to the buttons, list and social icons blocks (https://github.com/WordPress/gutenberg/pull/74120) - improve `resolveSelect` type definition (https://github.com/WordPress/gutenberg/pull/73973) - Add label to MediaEdit component (https://github.com/WordPress/gutenberg/pull/74176) - Update LayoutCard story in DataForm to use card layout (https://github.com/WordPress/gutenberg/pull/73695) - `wordpress/dataviews`: migrate to Stack (https://github.com/WordPress/gutenberg/pull/74174) - `wordpress/dataviews`: reorganize code (https://github.com/WordPress/gutenberg/pull/74188) - Tests: Add unit tests for Button block __experimentalLabel functionality (https://github.com/WordPress/gutenberg/pull/74186) - Add `block_core_breadcrumbs_items` filter to Breadcrumbs allowing to filter final items array (https://github.com/WordPress/gutenberg/pull/74169) - `wordpress/dataviews`: improve stories and tests (https://github.com/WordPress/gutenberg/pull/74192) - Block Card: Make the parent block navigation generic, supports any block with list view support (https://github.com/WordPress/gutenberg/pull/74164) - Accordion: Passthrough 'openByDefault' value via context (https://github.com/WordPress/gutenberg/pull/74191) - Improve DataForm stories (https://github.com/WordPress/gutenberg/pull/74196) - DataViews: display a separate `—` for each level (https://github.com/WordPress/gutenberg/pull/74199) - Build: Support pnpm (https://github.com/WordPress/gutenberg/pull/74194) - Accordion: Remove 'isSelected' attribute (https://github.com/WordPress/gutenberg/pull/74198) - Update package changelogs (https://github.com/WordPress/gutenberg/pull/74202) - Docs: Clarify that `npm publishing` requires team approval during the RC1 launch (https://github.com/WordPress/gutenberg/pull/74204) - Extensible Site Editor: Lift template activation restriction (https://github.com/WordPress/gutenberg/pull/74197) - Block support: Add anchor support for dynamic blocks (https://github.com/WordPress/gutenberg/pull/74183) - Template Activation: Try fixing still flaky test (https://github.com/WordPress/gutenberg/pull/74216) - Build: Fix the default base url used when generating php files (https://github.com/WordPress/gutenberg/pull/74220) - Cleanup the dependencies in the root package.json (https://github.com/WordPress/gutenberg/pull/74212) - Remove outdated vendor prefix properties in CSS (https://github.com/WordPress/gutenberg/pull/74213) - Build: Rename extensible site editor page to avoid conflicts (https://github.com/WordPress/gutenberg/pull/74221) - Menu: Clean up popover wrappers (https://github.com/WordPress/gutenberg/pull/74207) - Use a stable npm version on static checks job (https://github.com/WordPress/gutenberg/pull/74222) - Block Editor: Make TextIndentControl component internal (https://github.com/WordPress/gutenberg/pull/74219) - Image Block: Add content tab and reorganize inspector controls (https://github.com/WordPress/gutenberg/pull/74201) - Extensible Site Editor: Fix the dashboard link (https://github.com/WordPress/gutenberg/pull/74231) - Command Palette: Fix in the font library page and site editor experiment (https://github.com/WordPress/gutenberg/pull/74232) - Block Inspector: Update the design of the style variation to use ToolsPanel (https://github.com/WordPress/gutenberg/pull/74224) - Add block transforms between Verse and Quote blocks (https://github.com/WordPress/gutenberg/pull/73068) - Docs: Fix `Get started with create-block` handbook link (https://github.com/WordPress/gutenberg/pull/74237) - tsconfig: Replace skipDefaultLibCheck with skipLibCheck (https://github.com/WordPress/gutenberg/pull/74239) - Docs: Fix `Gutenberg Release Process` handbook link (https://github.com/WordPress/gutenberg/pull/74240) - Schemas: Add breadcrumbs block schema (https://github.com/WordPress/gutenberg/pull/74227) - Tag Cloud: Use new HtmlRenderer component to remove extra div wrapper (https://github.com/WordPress/gutenberg/pull/74228) - Env: Strip version suffix for non-wp-org zip sources (https://github.com/WordPress/gutenberg/pull/74195) - DataViewsPicker Table Layout: Ensure checkbox column is always 48px wide (https://github.com/WordPress/gutenberg/pull/74181) - Docs: fix broken release process links (https://github.com/WordPress/gutenberg/pull/74250) - Add visibility badge for hidden blocks in the block inspector. (https://github.com/WordPress/gutenberg/pull/74180) - Docs: fix callout notices layout and clarify handbook link usage (https://github.com/WordPress/gutenberg/pull/74252) - Tag Cloud: Make error message prefix text translatable (https://github.com/WordPress/gutenberg/pull/74256) - Block variation transformation: change position and threshold (https://github.com/WordPress/gutenberg/pull/74251) - Tabs: Reset focus styles to avoid visual glitch (https://github.com/WordPress/gutenberg/pull/74225) - PHP-only blocks: use `HtmlRenderer` to ensure fontend & editor consistency (https://github.com/WordPress/gutenberg/pull/74261) - Add new `VisuallyHidden` component (https://github.com/WordPress/gutenberg/pull/74189) - Revert "Add Line Indent support (https://github.com/WordPress/gutenberg/pull/73114)" (https://github.com/WordPress/gutenberg/pull/74266) - Fix typos and improve clarity in documentation across multiple files (https://github.com/WordPress/gutenberg/pull/74270) - Archives Block: Use new HtmlRenderer component to remove extra div wrapper and remove editor styles (https://github.com/WordPress/gutenberg/pull/74255) - disable anchor more block (https://github.com/WordPress/gutenberg/pull/74267) - Comment Content: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74269) - Stylelint: Add design token linting (https://github.com/WordPress/gutenberg/pull/74226) - Storybook: Include design tokens styles automatically (https://github.com/WordPress/gutenberg/pull/73938) - Tabs: Adding border radius styling options (https://github.com/WordPress/gutenberg/pull/74103) - Storybook: Show props from component libraries (https://github.com/WordPress/gutenberg/pull/74279) - Theme: Fix design-tokens.js entrypoint to specify types and CJS variants (https://github.com/WordPress/gutenberg/pull/74129) - Add `Field` primitives (https://github.com/WordPress/gutenberg/pull/74190) - Validated form controls: Add stories for validation in popovers (https://github.com/WordPress/gutenberg/pull/71282) - Theme: Refine typography tokens (https://github.com/WordPress/gutenberg/pull/73931) - Packages: Avoid bumping the major version on prerelease packages (https://github.com/WordPress/gutenberg/pull/74285) - Components: Enhance Notice actions to allow more props like disabled and onClick with url (https://github.com/WordPress/gutenberg/pull/74094) - Update color ramp generation snapshots (https://github.com/WordPress/gutenberg/pull/74281) - Upgrade storybook to v9 (https://github.com/WordPress/gutenberg/pull/74143) - Footnotes Block: Fixing various Code Quality and Coding Standard issues (https://github.com/WordPress/gutenberg/pull/74243) - Fix: menu_order validation to allow zero and negative values (https://github.com/WordPress/gutenberg/pull/74282) - Fix: use WP_Theme_JSON_Gutenberg instead of WP_Theme_JSON class (https://github.com/WordPress/gutenberg/pull/74294) - PHP-only blocks: Generate inspector controls from attributes (https://github.com/WordPress/gutenberg/pull/74102) - Update the copyright license to 2026 (https://github.com/WordPress/gutenberg/pull/74306) - Update browsers list data (https://github.com/WordPress/gutenberg/pull/74312) - Storybook: Fix Sass warnings (https://github.com/WordPress/gutenberg/pull/74298) - Update eslint to 8.57.1 (https://github.com/WordPress/gutenberg/pull/74316) - Update eslint-plugin-storybook to 10.1.11 (https://github.com/WordPress/gutenberg/pull/74317) - Tag Cloud, Archives: Fix sidebar flash when changing settings (https://github.com/WordPress/gutenberg/pull/74291) - Tag Cloud, Archives: Restore missing block wrapper div (https://github.com/WordPress/gutenberg/pull/74321) - RSS Block: Use HtmlRenderer to remove extra div from editor and remove editor styles (https://github.com/WordPress/gutenberg/pull/74272) - Breadcrumbs Block: Use HtmlRenderer to remove extra div from editor (https://github.com/WordPress/gutenberg/pull/74273) - Latest Comments: Remove wrapper div and use HtmlRenderer for dynamic content rendering (https://github.com/WordPress/gutenberg/pull/74277) - DataForm: Fix panel field inaccessible when empty with labelPosition none or top (https://github.com/WordPress/gutenberg/pull/74264) - Storybook: Remove outdated story matchers (https://github.com/WordPress/gutenberg/pull/74299) - UI: Exclude package from `jsdoc/require-param` rule (https://github.com/WordPress/gutenberg/pull/74315) - Calender Block: Use HtmlRenderer to remove extra div from editor (https://github.com/WordPress/gutenberg/pull/74271) - Theme: Include Figma scopes extension in design tokens (https://github.com/WordPress/gutenberg/pull/73897) - UI: Remove redundant renderElement utility (https://github.com/WordPress/gutenberg/pull/74284) - Form Field Blocks: Replace dashicon with SVG icons (https://github.com/WordPress/gutenberg/pull/73996) - ContentOnlyControls: Polish header style (https://github.com/WordPress/gutenberg/pull/74260) - Footnotes: prevent inserting footnotes within a footnotes block (https://github.com/WordPress/gutenberg/pull/74287) - Block visibility based on screen size: basic clientside state (https://github.com/WordPress/gutenberg/pull/74025) - Block Support: Fix horizontal overflow in Manage allowed blocks modal (https://github.com/WordPress/gutenberg/pull/74337) - Block support: Backport anchor support changes in core (https://github.com/WordPress/gutenberg/pull/74341) - Dynamically add CSS class to Paragraph block (https://github.com/WordPress/gutenberg/pull/71207) - Test: Update URLs in tests to use example.org instead of test.com (https://github.com/WordPress/gutenberg/pull/74246) - Bump Node.js requirement to 20.19 (https://github.com/WordPress/gutenberg/pull/74342) - `@wordpress/theme`: update `colorjs.io` to version `0.6.0` (https://github.com/WordPress/gutenberg/pull/74278) - HtmlRenderer: Merge style props (https://github.com/WordPress/gutenberg/pull/74344) - @wordpress/theme: disable color ramp unit tests (https://github.com/WordPress/gutenberg/pull/74347) - Update the useCommandLoader example to fix the syntax error and add missing imports. (https://github.com/WordPress/gutenberg/pull/73660) - Code Modernization: Use null coalescing operator in place of `isset()` in ternaries. (https://github.com/WordPress/gutenberg/pull/74335) - Preview drop down: align preview editing widths with common breakpoints (https://github.com/WordPress/gutenberg/pull/74339) - Media mime type field: Disable sorting for now (https://github.com/WordPress/gutenberg/pull/74373) - Remove commented-out note regarding redundant settings OPTIONS requests in preload tests. (https://github.com/WordPress/gutenberg/pull/74375) - Core Merge: Deduplicate Font Library page and routes (https://github.com/WordPress/gutenberg/pull/74381) - Build: Build minified and non minified CSS in both npm run dev and npm run build (https://github.com/WordPress/gutenberg/pull/74380) - Fix TypeScript error output in check-build-type-declaration-files script (https://github.com/WordPress/gutenberg/pull/74346) - Revert bump of Node.js to 20.19 (https://github.com/WordPress/gutenberg/pull/74385) - Packages: Add support for publishing stable release of pre-release package (https://github.com/WordPress/gutenberg/pull/74332) - Forms Block: Switch from dashicons to SVG (https://github.com/WordPress/gutenberg/pull/74297) - Fit-text: Refactor control hook for readability (https://github.com/WordPress/gutenberg/pull/74350) - Pattern Overrides: Infer partial syncing supported blocks from the server (https://github.com/WordPress/gutenberg/pull/73889) - Categories Block: Fix CSS collision with labels (https://github.com/WordPress/gutenberg/pull/73862) - Fix parent popover not closing on click outside (https://github.com/WordPress/gutenberg/pull/74340) - List View Panel: Fix circular dependency issue that was breaking some Storybook stories (https://github.com/WordPress/gutenberg/pull/74399) - Block: memoize canOverrideBlocks (https://github.com/WordPress/gutenberg/pull/74400) - Fix storybook:dev race condition with dev script (https://github.com/WordPress/gutenberg/pull/74290) - Image Cropper package: Add react peer dependencies (https://github.com/WordPress/gutenberg/pull/74402) - Build: use .mjs extensions for build-module files (https://github.com/WordPress/gutenberg/pull/74348) - MediaEdit: expanded view (https://github.com/WordPress/gutenberg/pull/74336) - Inspector Fields: Show DataForm driven Content tab for all blocks that support content fields (+ support block bindings) (https://github.com/WordPress/gutenberg/pull/73863) - Build: Faster repo building in CI (https://github.com/WordPress/gutenberg/pull/74406) - `@wordpress/keycodes`: add `ariaKeyShortcut` and `shortcutFormats ` exports (https://github.com/WordPress/gutenberg/pull/74205) - Create default Core Navigation Overlay patterns (https://github.com/WordPress/gutenberg/pull/74047) - Enhance Block Bindings Documentation as per WP 6.9 updates: Customizing supported attributes an `getFieldsList` (https://github.com/WordPress/gutenberg/pull/73763) - Patterns: Improve memoization in the overrides panel (https://github.com/WordPress/gutenberg/pull/74407) - Docs: Remove "Customizing supported attributes filter" section from Block Bindings docs (https://github.com/WordPress/gutenberg/pull/74410) - fix script module IDs to use configured packageNamespace (https://github.com/WordPress/gutenberg/pull/74411) - Update package version after an unfinished publish (https://github.com/WordPress/gutenberg/pull/74413) - UI: Add `Fieldset` primitives (https://github.com/WordPress/gutenberg/pull/74296) - DataViews: add density picker to list layout (https://github.com/WordPress/gutenberg/pull/71050) - UI: Add `Icon` component (https://github.com/WordPress/gutenberg/pull/74311) - Separator, Code: don't require Enter for shortcut (https://github.com/WordPress/gutenberg/pull/63654) - Theme: Update semibold font weight to apply workaround at CSS (https://github.com/WordPress/gutenberg/pull/74392) - Block visibility based on screen size: add rules to hide on viewport size (https://github.com/WordPress/gutenberg/pull/74379) - Media Fields: Add "Date added" and "Date modified" fields (https://github.com/WordPress/gutenberg/pull/74401) - Fix missing dependencies for packages (https://github.com/WordPress/gutenberg/pull/74310) - DataForm validation story: add support for the details layout (https://github.com/WordPress/gutenberg/pull/74445) - Quote: Fix transformation error (https://github.com/WordPress/gutenberg/pull/74253) - Stop building wp-build by renaming the src directory (https://github.com/WordPress/gutenberg/pull/74450) - Update: Use 12px as minimum font size for warning on fit text. (https://github.com/WordPress/gutenberg/pull/74387) - Render custom overlay template parts in Navigation block (behind experiment) (https://github.com/WordPress/gutenberg/pull/73967) - UI: add `Button` (https://github.com/WordPress/gutenberg/pull/74415) - iAPI: Preserve boolean HTML attributes during client side navigation (https://github.com/WordPress/gutenberg/pull/74446) - Blocks: cache url root when registering assets (https://github.com/WordPress/gutenberg/pull/74451) - Rename overlay area (https://github.com/WordPress/gutenberg/pull/74444) - Bump minimum required PHP version to 7.4. (https://github.com/WordPress/gutenberg/pull/74457) - Show Navigation overlay patterns on right sidebar (https://github.com/WordPress/gutenberg/pull/74069) - Blocks: Fix root url cache fatal error (https://github.com/WordPress/gutenberg/pull/74459) - CI: Run the PHP unit tests with the oldest and latest versions (https://github.com/WordPress/gutenberg/pull/74460) - added group label and 100vh (https://github.com/WordPress/gutenberg/pull/74458) - Convert dom-ready package to TypeScript (https://github.com/WordPress/gutenberg/pull/67671) - List View: Fix focus shift to the selected nested block (https://github.com/WordPress/gutenberg/pull/74431) - Media Fields: Add an attached_to field (https://github.com/WordPress/gutenberg/pull/74432) - Updated useBlockProps to utilize block visibility and device type from context, the intention is to reduce unnecessary store subscriptions. (https://github.com/WordPress/gutenberg/pull/74481) - Block Fields: Decouple the experiment from contentOnly/pattern editing experiments (https://github.com/WordPress/gutenberg/pull/74479) - Image: add focal point controls (https://github.com/WordPress/gutenberg/pull/73115) - MediaEdit: Add drag and drop functionality (https://github.com/WordPress/gutenberg/pull/74455) - DependencyExtractionWebpackPlugin: add ui as bundled package (https://github.com/WordPress/gutenberg/pull/74485) - Parent selector: Fix dot divider horizontal spacing (https://github.com/WordPress/gutenberg/pull/74329) - wp-build: Fix dynamic base-styles import (https://github.com/WordPress/gutenberg/pull/74434) - Plugin: Bump minimum required WordPress version to 6.8 (https://github.com/WordPress/gutenberg/pull/74218) - Pass `post_id` as an argument to `block_core_breadcrumbs_post_type_settings` filter to allow more granular term choice (https://github.com/WordPress/gutenberg/pull/74170) - Block Editor: Close the inserter on small screens after adding a block (https://github.com/WordPress/gutenberg/pull/74487) - `@wordpress/ui` `Button`: add `destructive` tone (https://github.com/WordPress/gutenberg/pull/74463) - Fix punctuation and formatting in README.md (https://github.com/WordPress/gutenberg/pull/74440) - Hide Display section from Nav Inspector Controls if empty (https://github.com/WordPress/gutenberg/pull/74495) - PHPCS: Include the `test` directory (https://github.com/WordPress/gutenberg/pull/48754) - dom-ready: Replace @ts-expect-error with MockDocument in tests (https://github.com/WordPress/gutenberg/pull/74482) - TypeScript: Migrate `packages/jest-puppeteer-axe` package to TypeScript (https://github.com/WordPress/gutenberg/pull/70523) - dom-ready: Refactor tests to use defineProperty (https://github.com/WordPress/gutenberg/pull/74514) - Dev: Fix file change logs not displaying in watch mode (https://github.com/WordPress/gutenberg/pull/74452) - Block Fields: show all form fields by default (https://github.com/WordPress/gutenberg/pull/74486) - Heading: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74383) - Fix the dataviews experiment locked fields position on toggle. (https://github.com/WordPress/gutenberg/pull/74326) - Fully resolve some intra-package import paths (https://github.com/WordPress/gutenberg/pull/74530) - TypeScript: Migrate shortcode package to TS. (https://github.com/WordPress/gutenberg/pull/74522) - Navigation Overlay: Fix area and icon name (https://github.com/WordPress/gutenberg/pull/74520) - Storybook: Update "Introduction" doc (https://github.com/WordPress/gutenberg/pull/74500) - Storybook: Retire old theme switcher (https://github.com/WordPress/gutenberg/pull/74499) - Add design-tokens.css to stylelintignore (https://github.com/WordPress/gutenberg/pull/74498) - fix nextpage-more-disable-visibility (https://github.com/WordPress/gutenberg/pull/74531) - `@wordpress/ui` `Button`: undo `destructive` tone variant (https://github.com/WordPress/gutenberg/pull/74540) - Update nested-blocks-inner-blocks.md (https://github.com/WordPress/gutenberg/pull/74534) - Clamp signaling server retries to prevent unbounded backoff (https://github.com/WordPress/gutenberg/pull/74372) - `@wordpress/ui` `Button`: refactor to base ui (https://github.com/WordPress/gutenberg/pull/74416) - Storybook: Remove "background" tools from toolbar (https://github.com/WordPress/gutenberg/pull/74538) - Storybook: Remove margin checker tool (https://github.com/WordPress/gutenberg/pull/74539) - Fix documentation title for @wordpress/build package (https://github.com/WordPress/gutenberg/pull/74541) - TypeScript: Convert notices package to TypeScript (https://github.com/WordPress/gutenberg/pull/67670) - Client side media: enhance queue system (https://github.com/WordPress/gutenberg/pull/74501) - Improve cross origin isolation support (https://github.com/WordPress/gutenberg/pull/74418) - Remove WebRTC and IndexedDB providers (https://github.com/WordPress/gutenberg/pull/74555) - Block Editor: Prevent browser autocomplete in Navigation link search (https://github.com/WordPress/gutenberg/pull/74305) - Query Title: Fix incorrect quotation marks with trailing spaces (https://github.com/WordPress/gutenberg/pull/74300) - Layout: Add allowWrap option to flex layout block support (https://github.com/WordPress/gutenberg/pull/74493) - Block visibility support: use CSS range syntax for media queries (https://github.com/WordPress/gutenberg/pull/74526) - Block visibility: add viewport modal and controls UI (https://github.com/WordPress/gutenberg/pull/74249) - Media Fields: Add readonly author field to media fields package and use in the media modal (https://github.com/WordPress/gutenberg/pull/74484) - Paragraph block: Stop using named export from block.json (https://github.com/WordPress/gutenberg/pull/74527) - Block Visibility: Fix block position shift when toggling (https://github.com/WordPress/gutenberg/pull/74535) - Block Fields: Remove normalization code and tidy up (https://github.com/WordPress/gutenberg/pull/74532) - Inserter: Prevent block-scope variations insertion in slash inserter (https://github.com/WordPress/gutenberg/pull/74259) - Fix formatting in block bindings documentation: Corrected links to core sources by adding hyphens (https://github.com/WordPress/gutenberg/pull/74414) - Theme/UI: Add intro docs to Storybook (https://github.com/WordPress/gutenberg/pull/74551) - Notes: Enable floating notes in template lock mode (https://github.com/WordPress/gutenberg/pull/74577) - Editor: Remove hardcoded autosave conditions for templates (https://github.com/WordPress/gutenberg/pull/73781) - Theme: enable color ramp tests and update snapshots (https://github.com/WordPress/gutenberg/pull/74403) - `@wordpress/ui` `Button`: tweak disabled styles and rework tokens (https://github.com/WordPress/gutenberg/pull/74470) - Fully resolve moment-timezone import, improve build optimization (https://github.com/WordPress/gutenberg/pull/74578) - Update navigation-overlay-close block to be used as server side rendering (https://github.com/WordPress/gutenberg/pull/74579) - Real-time collaboration: Allow post-locked-modal to be overridden when `collaborative-editing` is enabled (https://github.com/WordPress/gutenberg/pull/72326) - Menu: Remove animation on submenus (https://github.com/WordPress/gutenberg/pull/74548) - UI: Remove individual experimental tags from Storybook (https://github.com/WordPress/gutenberg/pull/74582) - UI: Add dark background for Storybook theme switcher (https://github.com/WordPress/gutenberg/pull/74318) - updates variant handling to pull files before access to temporary directory is removed (https://github.com/WordPress/gutenberg/pull/73986) - UI: Add `InputLayout` primitive (https://github.com/WordPress/gutenberg/pull/74313) - Customize: Preserve CSS cascade for Additional CSS in classic themes (https://github.com/WordPress/gutenberg/pull/74593) - Update TypeScript base config to use bundler module resolution (https://github.com/WordPress/gutenberg/pull/74560) - Block Editor: Add autoComplete attribute to prevent browser autocomplete (https://github.com/WordPress/gutenberg/pull/74595) - Publishing next packages: remove commit hash from version (https://github.com/WordPress/gutenberg/pull/74589) - Inserter: only show blocks that can be inserted on the page (https://github.com/WordPress/gutenberg/pull/74453) - Comments Title Block: Fix double quotes in non-English locales (https://github.com/WordPress/gutenberg/pull/74330) - DataViews stories: add custom layout (https://github.com/WordPress/gutenberg/pull/74605) - Navigation Overlay: Add default paragraph block (https://github.com/WordPress/gutenberg/pull/74592) - Components: Fix InputControl label overflow for long translations (https://github.com/WordPress/gutenberg/pull/74301) - Eslint: Add design token linting (https://github.com/WordPress/gutenberg/pull/74325) - Update Storybook to v10 with Vite builder (https://github.com/WordPress/gutenberg/pull/74396) - Navigations within overlays should not increment aria label attributs (https://github.com/WordPress/gutenberg/pull/74469) - Add template part context to navigation block (https://github.com/WordPress/gutenberg/pull/74614) - Navigation: When a navigation block has a custom overlay, the submenu colors should not apply to the overlay (https://github.com/WordPress/gutenberg/pull/74544) - Improve type safety with YMapWrap (https://github.com/WordPress/gutenberg/pull/73948) - Rename `--fast` build flag and use in Storybook build (https://github.com/WordPress/gutenberg/pull/74552) - Fix deprecations for Storybook component usage (https://github.com/WordPress/gutenberg/pull/74619) - Real-time collaboration: Use alternative diff in quill-delta, provide incremental text updates (https://github.com/WordPress/gutenberg/pull/73699) - Real-time collaboration: Move collaborative editing from experiments to default Gutenberg plugin experience (https://github.com/WordPress/gutenberg/pull/74562) - Real-time Collaboration: Add Yjs awareness foundation (https://github.com/WordPress/gutenberg/pull/74565) - Image Block: Fix empty block content tools when multiselecting image blocks (https://github.com/WordPress/gutenberg/pull/74604) - Content-only: remove `mapping` and `args` in favor of DataForm API (https://github.com/WordPress/gutenberg/pull/74575) - TypeScript: Convert redux-store types in data package to TS (https://github.com/WordPress/gutenberg/pull/67666) - Add list view inspector tab for pattern editing (https://github.com/WordPress/gutenberg/pull/74574) - api-fetch: Add named export to fix TypeScript callable issues (https://github.com/WordPress/gutenberg/pull/74576) - Fix: Dataview: column header move item in RTL moves in the opposite direction to the arrow (https://github.com/WordPress/gutenberg/pull/74644) - UI: Add `Input` primitive (https://github.com/WordPress/gutenberg/pull/74615) - Improve wp-build generated PHP files with proper prefixing and naming (https://github.com/WordPress/gutenberg/pull/74490) - Navigation Submenu: Show (Invalid) indicator when parent page is deleted (https://github.com/WordPress/gutenberg/pull/74461) - components: Fix generated TS types referencing unavailable `csstype` (https://github.com/WordPress/gutenberg/pull/74655) - Real-time collaboration: Refetch entity when it is saved by a peer (https://github.com/WordPress/gutenberg/pull/74637) - add a white background to the overlay default pattern (https://github.com/WordPress/gutenberg/pull/74659) - Infrastructure: Convert storybook to a workspace package (https://github.com/WordPress/gutenberg/pull/74640) - Remove unused dependencies (https://github.com/WordPress/gutenberg/pull/74624) - Apply only detected changes from the persisted CRDT document (https://github.com/WordPress/gutenberg/pull/74668) - Enable components manifest for Storybook (https://github.com/WordPress/gutenberg/pull/74626) - Move ESLint rules specific to `@wordpress/components` to custom rules (https://github.com/WordPress/gutenberg/pull/74611) - Navigaiton: Refactor SCSS to reduce duplication (https://github.com/WordPress/gutenberg/pull/74666) - Site Editor: If the route cannot be found treat the canvas mode as view (https://github.com/WordPress/gutenberg/pull/74642) - `@wordpress/components`: lint and fix `@wordpress/components-no-missing-40px-size-prop` rule (https://github.com/WordPress/gutenberg/pull/74622) - Block visibility supports: refactor metadata to use nested structure (https://github.com/WordPress/gutenberg/pull/74602) - Media Editor: Add a simple media editor package and integrate into the editor package (https://github.com/WordPress/gutenberg/pull/74601) - Embed: Fix Flickr double-padding with responsive wrapper (https://github.com/WordPress/gutenberg/pull/73902) - Block visibility: render blocks when hidden at all viewports (and other changes) (https://github.com/WordPress/gutenberg/pull/74679) - Add missing chevron-up-small icon. (https://github.com/WordPress/gutenberg/pull/74607) - List View: Ensure element exists in document before focusing (https://github.com/WordPress/gutenberg/pull/74613) - Allow for themes to define the overlay attribute without using a theme slug (https://github.com/WordPress/gutenberg/pull/74119) - DataViews: Fix insert left and right handling in table layout for RTL languages (https://github.com/WordPress/gutenberg/pull/74681) - SlotFill: unify registry and fill implementation (https://github.com/WordPress/gutenberg/pull/68056) - Storybook: Automate sidebar sort order (https://github.com/WordPress/gutenberg/pull/74672) - Fix: Update function names to include wp_ prefix (https://github.com/WordPress/gutenberg/pull/74688) - Make custom navigation overlay full width (https://github.com/WordPress/gutenberg/pull/74559) - Components: Add `@types/react` to dependencies for TypeScript type resolution (https://github.com/WordPress/gutenberg/pull/74692) - Core backport for Global Styles: Allow arbitrary CSS, protect from KSES mangling (https://github.com/WordPress/gutenberg/pull/74371) - UI: Add `Select` primitive (https://github.com/WordPress/gutenberg/pull/74661) - Badge: Use stories for "Choosing intent" doc (https://github.com/WordPress/gutenberg/pull/74675) - Add `Tooltip` component to `@wordpress/ui` (https://github.com/WordPress/gutenberg/pull/74625) - Image block: show aspect ratio control for wide and full alignment (https://github.com/WordPress/gutenberg/pull/74519) - Bump the github-actions group across 1 directory with 3 updates (https://github.com/WordPress/gutenberg/pull/74002) - Bump mdast-util-to-hast from 13.1.0 to 13.2.1 in /platform-docs (https://github.com/WordPress/gutenberg/pull/73683) - Updated Minor Typo in Compatibility Rest API File (https://github.com/WordPress/gutenberg/pull/74718) - Block Editor Provider: Fix conditional useMemo call when media processing experiment is active (https://github.com/WordPress/gutenberg/pull/74680) - Reset inspector tab selection if the selected tab is no longer present (https://github.com/WordPress/gutenberg/pull/74682) - Remove react-refresh bundling (https://github.com/WordPress/gutenberg/pull/74721) - iAPI: Fix and refactor runtime initialization logic (https://github.com/WordPress/gutenberg/pull/71123) - Comment Edit Link: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74720) - Update wp-build documentation to describe 'wpPlugin.name' (https://github.com/WordPress/gutenberg/pull/74741) - Navigation Overlay: insert default pattern on creation (https://github.com/WordPress/gutenberg/pull/74650) - DataViews: Use regular casing for bulk selection count (https://github.com/WordPress/gutenberg/pull/74573) - Fix wp-theme dependencies in the build. (https://github.com/WordPress/gutenberg/pull/74743) - Do not wrap persisted doc applied update in transaction (https://github.com/WordPress/gutenberg/pull/74753) - Revert "Fixed Media & Text Block - Image not rendered properly on frontend when inside stack (https://github.com/WordPress/gutenberg/pull/68610)" (https://github.com/WordPress/gutenberg/pull/74715) - Create Block: Simplify blocks-manifest registration (https://github.com/WordPress/gutenberg/pull/74647) - Pattern Editing: Prevent double-click editing template parts and synced patterns (https://github.com/WordPress/gutenberg/pull/74755) - Paragraph: Add text column support (https://github.com/WordPress/gutenberg/pull/74656) - Update overlay control labels (https://github.com/WordPress/gutenberg/pull/74690) - Comment Date: Add textAlign Support (https://github.com/WordPress/gutenberg/pull/74599) - Don't show overlay settings for navigation blocks that are inside oth… (https://github.com/WordPress/gutenberg/pull/74408) - Remove the apiFetch named export (https://github.com/WordPress/gutenberg/pull/74761) - MediaEdit: Support `custom` validation (https://github.com/WordPress/gutenberg/pull/74704) - components: Add `displayName` to the anonymous components (https://github.com/WordPress/gutenberg/pull/74716) - Pattern Overrides: Remove obsolete documentation (https://github.com/WordPress/gutenberg/pull/74749) - Verse Block: Add new textAlign support (https://github.com/WordPress/gutenberg/pull/74724) - DataViews: Move filtering logic in field types (https://github.com/WordPress/gutenberg/pull/74733) - Fix: can't disable textColumns UI (https://github.com/WordPress/gutenberg/pull/74767) - Navigation: Don't use a nav tag for navigation blocks inside overlays (https://github.com/WordPress/gutenberg/pull/74764) - Allow grid layout to use theme blockGap values for columns calculation (https://github.com/WordPress/gutenberg/pull/74725) - Move grid manual mode sync into 7.1 folder (https://github.com/WordPress/gutenberg/pull/74792) - Show block content for label in List View (https://github.com/WordPress/gutenberg/pull/74794) - Ensure grid column never exceeds parent's width (https://github.com/WordPress/gutenberg/pull/74795) - Term List block: Pre-select current term on term archive pages (https://github.com/WordPress/gutenberg/pull/74603) - Update performance results endpoint to codevitals.run (https://github.com/WordPress/gutenberg/pull/74802) - Update performance results endpoint to use fetch API for redirect handling (https://github.com/WordPress/gutenberg/pull/74803) - iAPI: Update deprecation warning for unique ID format (https://github.com/WordPress/gutenberg/pull/74580) - Cover Block: Enable focal point picker for fixed background (https://github.com/WordPress/gutenberg/pull/74600) - Blocks: Always trigger borwser console warnings for blocks with apiVersion below 2 (https://github.com/WordPress/gutenberg/pull/74057) - Fix typo in comment for value change check (https://github.com/WordPress/gutenberg/pull/74730) - Move useIsDraggingWithin to a shared hook (https://github.com/WordPress/gutenberg/pull/74804) - Include totals items count in DataView footer (https://github.com/WordPress/gutenberg/pull/73491) - Storybook: Fix missing props from component stories (https://github.com/WordPress/gutenberg/pull/74807) - Breadcrumbs :Add example block previews (https://github.com/WordPress/gutenberg/pull/74808) - Core backport for gutenberg_filter_global_styles_post: Protect from KSES mangling (https://github.com/WordPress/gutenberg/pull/74731) - Move selectLabelText to shared utility (https://github.com/WordPress/gutenberg/pull/74805) - Bump node-forge from 1.3.1 to 1.3.3 in /platform-docs (https://github.com/WordPress/gutenberg/pull/74292) - Fix blockGap styles not working in block style variations (https://github.com/WordPress/gutenberg/pull/74529) - Comment Reply Link: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74760) - Try storing global styles in static var in layout render (https://github.com/WordPress/gutenberg/pull/74828) - List View support: show full block titles (https://github.com/WordPress/gutenberg/pull/74798) - Pattern Editing: Update template part to use tabs (https://github.com/WordPress/gutenberg/pull/74793) - Block visibility: create selectors for block visibility in current viewport (device setting or responsive) (https://github.com/WordPress/gutenberg/pull/74517) - Fix: add border-box sizing for verse block (https://github.com/WordPress/gutenberg/pull/74722) - Block Visibility: fix failing unit test (https://github.com/WordPress/gutenberg/pull/74840) - Breadcrumbs: Fix placeholder separator preview (https://github.com/WordPress/gutenberg/pull/74842) - Dataviews: Fix actions visibility on smaller viewpoints and for lone action with isPrimary as true (https://github.com/WordPress/gutenberg/pull/74836) - Navigation Overlay: Add sidebar preview (https://github.com/WordPress/gutenberg/pull/74780) - Show submenu colors but remove the word overlay (https://github.com/WordPress/gutenberg/pull/74818) - E2e tests: remove editor.switchToLegacyCanvas from multi select and a11y suite (https://github.com/WordPress/gutenberg/pull/74845) - Enable build-blocks-manifest by default (https://github.com/WordPress/gutenberg/pull/74846) - Direct drag: fix glitching around scrolling (https://github.com/WordPress/gutenberg/pull/74608) - Handle deleted navigation overlays (https://github.com/WordPress/gutenberg/pull/74766) - iAPI Router: Prevent router regions with `data-wp-key` from being recreated on navigation (https://github.com/WordPress/gutenberg/pull/74750) - iAPI Router: Fix initial router regions with `attachTo` being duplicated after `navigate()` (https://github.com/WordPress/gutenberg/pull/74857) - DataViews: Adjust table primary media field styles (https://github.com/WordPress/gutenberg/pull/74813) - Fix: Escape less-than character in HTML attributes to prevent block recovery errors (https://github.com/WordPress/gutenberg/pull/74732) - DataViews: Update storybook to add more context (https://github.com/WordPress/gutenberg/pull/74819) - Sync: Refactor ProviderCreator signature to an object (https://github.com/WordPress/gutenberg/pull/74871) - Real-time Collaboration: Add user and selection information to awareness (https://github.com/WordPress/gutenberg/pull/74728) - Add custom CSS support for individual block instances (https://github.com/WordPress/gutenberg/pull/73959) - Style Engine: Bail early when adding a declaration if not passed a string (https://github.com/WordPress/gutenberg/pull/74881) - Stabilise viewport based block visibility (https://github.com/WordPress/gutenberg/pull/74839) - Navigation: Add a new option that toggles submenus always open (https://github.com/WordPress/gutenberg/pull/74653) - Fix: Fit Text not working on calculated line heights. (https://github.com/WordPress/gutenberg/pull/74860) - Fix: Safari "Edit as HTML" for Fit Text deletes content (https://github.com/WordPress/gutenberg/pull/74864) - Route: Add notFound to public API and add route validation (https://github.com/WordPress/gutenberg/pull/74867) - DataForm: add `combobox` control (https://github.com/WordPress/gutenberg/pull/74891) - Real-time collaboration: Use relative positions in undo stack (https://github.com/WordPress/gutenberg/pull/74878) - MediaReplaceFlow: Move Reset option to bottom of menu (https://github.com/WordPress/gutenberg/pull/74882) - Real-time collaboration: Sync collections (https://github.com/WordPress/gutenberg/pull/74665) - Feat/core tabs restructure (https://github.com/WordPress/gutenberg/pull/74412) - Inserter: Fix missing onClose prop for Inserter Menu (https://github.com/WordPress/gutenberg/pull/74920) - Post Excerpt Block: Fixing max limits for generated excerpts (https://github.com/WordPress/gutenberg/pull/74140) - Post Excerpt Block: Fix excerpt trimming logic to handle whitespace correctly (https://github.com/WordPress/gutenberg/pull/74925) - e2e: fix flaky tests for settings sidebar (https://github.com/WordPress/gutenberg/pull/74929) - Comments Title: Copy deprecate from block.json to deprecated.js to avoid legacy attribute usage (https://github.com/WordPress/gutenberg/pull/74924) - Added Missing Global Documentation (https://github.com/WordPress/gutenberg/pull/74868) - dataviews: Fix missing dependency - @storybook/addon-docs (https://github.com/WordPress/gutenberg/pull/74935) - Patterns: restore rename and delete actions for user patterns (https://github.com/WordPress/gutenberg/pull/74927) - DataViews: Add card form layout validation (https://github.com/WordPress/gutenberg/pull/74547) - E2e tests: remove switchToLegacyCanvas from inserter drag and drop tests (https://github.com/WordPress/gutenberg/pull/74892) - Navigation Overlays: Default new blocks to "always" show overlays (https://github.com/WordPress/gutenberg/pull/74890) - Remove link underline style from default theme.json (https://github.com/WordPress/gutenberg/pull/74901) - selectBlock: fall back to next block if no previous block is present (https://github.com/WordPress/gutenberg/pull/74938) - Update: Preserve additional meta properties on client side abilities. (https://github.com/WordPress/gutenberg/pull/73918) - E2e tests: bump all test blocks to API v3 (https://github.com/WordPress/gutenberg/pull/74941) - Cover Block: Show current embed URL in dialog (https://github.com/WordPress/gutenberg/pull/74885) - core-data: Fix missing dependencies (https://github.com/WordPress/gutenberg/pull/74934) - Build script: Increase memory limit for storybook build process (https://github.com/WordPress/gutenberg/pull/74933) - Real-time collaboration: Pass non-cleaned (but merged) edits to `SyncManager#update` (https://github.com/WordPress/gutenberg/pull/74912) - Navigation overlay patterns: overlay with black background (https://github.com/WordPress/gutenberg/pull/74847) - Navigation overlay patterns: overlay with accent background (https://github.com/WordPress/gutenberg/pull/74849) - Shortcode: Fix non-string attribute values being silently dropped (https://github.com/WordPress/gutenberg/pull/74949) - core-data: Fix yjs import and missing dependency (https://github.com/WordPress/gutenberg/pull/74950) - Icons: Add a manifest containing icons metadata (https://github.com/WordPress/gutenberg/pull/74943) - Babel Preset Default: Remove legacy plugins (https://github.com/WordPress/gutenberg/pull/74916) - Real-time collaboration: Fix undo tests (https://github.com/WordPress/gutenberg/pull/74955) - BlockBreadcrumb: Show custom block name (https://github.com/WordPress/gutenberg/pull/73690) - Fix: Stretchy text issue when nested on flex containers. (https://github.com/WordPress/gutenberg/pull/73652) - iAPI: Don't use deprecated `data-wp-on-async` in docs (https://github.com/WordPress/gutenberg/pull/72591) - Comments Title: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74945) - iAPI Docs: add config to state/context guide (https://github.com/WordPress/gutenberg/pull/71355) - Add content element guidelines for fields in DataForm (https://github.com/WordPress/gutenberg/pull/74817) - Navigation overlay patterns: centered navigation with info (https://github.com/WordPress/gutenberg/pull/74862) - In-editor revisions (initial changes, no diffing) (https://github.com/WordPress/gutenberg/pull/74771) - Docs: Add missing @global documentation in REST assets controller (https://github.com/WordPress/gutenberg/pull/74973) - Docs: Add missing @return tags to experimental functions (https://github.com/WordPress/gutenberg/pull/74960) - Docs: Replace @see with @link for URL references (https://github.com/WordPress/gutenberg/pull/74961) - Gallery block: Image Caption Blur Issue Fix (https://github.com/WordPress/gutenberg/pull/74063) - Inserter Component: Improving Stories (https://github.com/WordPress/gutenberg/pull/74922) - Block Visibility: fix flaky e2e test (https://github.com/WordPress/gutenberg/pull/74931) - Media Modal Experiment: Add a simple notices-based uploading state (https://github.com/WordPress/gutenberg/pull/74965) - Docs: Standardize use of @link tag for URL references in lib directory (https://github.com/WordPress/gutenberg/pull/74984) - Pattern editing: stabilize and remove the experiment flag (https://github.com/WordPress/gutenberg/pull/74843) - Remove comment about non-existing property (https://github.com/WordPress/gutenberg/pull/75003) - Video block: Fix video URLs pasted without "https://" show broken media (https://github.com/WordPress/gutenberg/pull/74964) - Fix flaky 'Revisions' e2e test (https://github.com/WordPress/gutenberg/pull/75002) - Build: deduplicate and minify embedded styles (https://github.com/WordPress/gutenberg/pull/74651) - Navigation overlay patterns: centered navigation (https://github.com/WordPress/gutenberg/pull/74861) - wp-env: Add experimental WordPress Playground runtime support (https://github.com/WordPress/gutenberg/pull/74609) - Consolidate border tokens (https://github.com/WordPress/gutenberg/pull/74617) - Add the `has-custom-css` class name to the editor and dynamic blocks. (https://github.com/WordPress/gutenberg/pull/74969) - Real-time collaboration: Add default HTTP polling sync provider (https://github.com/WordPress/gutenberg/pull/74564) - eslint-plugin: Add "never" option for dependency-group rule (https://github.com/WordPress/gutenberg/pull/74990) - Design System: Add guidelines for destructive actions UX (https://github.com/WordPress/gutenberg/pull/74778) - DataViews: Show validation errors when a panel closes (https://github.com/WordPress/gutenberg/pull/74995) - DataForm: Sync React-level validation to native inputs on date fields. (https://github.com/WordPress/gutenberg/pull/74994) - Pattern Editing: Hide List View child blocks in Content panel (https://github.com/WordPress/gutenberg/pull/75007) - Infrastructure: Add storybook to tsconfig project references (https://github.com/WordPress/gutenberg/pull/74887) - Real-time Collaboration: Add hook for accessing awareness data (https://github.com/WordPress/gutenberg/pull/75009) - Hide grid visualiser if the grid block is hidden (https://github.com/WordPress/gutenberg/pull/74963) - Add unit test for gap in block style variations fix (https://github.com/WordPress/gutenberg/pull/75038) - Post Excerpt: Disable HTML element insertion (https://github.com/WordPress/gutenberg/pull/74928) - Deprecate 'Post author' block (https://github.com/WordPress/gutenberg/pull/55352) - Fix emdashes in HTML anchor description (https://github.com/WordPress/gutenberg/pull/75043) - In-editor revisions: preserve client IDs to prevent flashes/remounts (https://github.com/WordPress/gutenberg/pull/75028) - Playlist block (https://github.com/WordPress/gutenberg/pull/50664) - Media & Text: Respect image_default_link_type option (https://github.com/WordPress/gutenberg/pull/74295) - Author Biography: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/74997) - Dataform: Adds validation support to the DataForm details layout (https://github.com/WordPress/gutenberg/pull/74996) - Docs: Clarifies cherry-picking permissions and improves minor release workflow documentation (https://github.com/WordPress/gutenberg/pull/75034) - Routing Boot Package: Remove left border from stage and inspector surfaces (https://github.com/WordPress/gutenberg/pull/75036) - Replace install-path command with status command in wp-env (https://github.com/WordPress/gutenberg/pull/75020) - Remove temp files (https://github.com/WordPress/gutenberg/pull/75061) - Update and unpin sync package dependencies (https://github.com/WordPress/gutenberg/pull/75059) - Navigation Overlay: Add Create Overlay button (https://github.com/WordPress/gutenberg/pull/74971) - Try hiding parent grid cells when child grid is selected. (https://github.com/WordPress/gutenberg/pull/75078) - Notes: Use preferences store when applicable (https://github.com/WordPress/gutenberg/pull/75008) - Notes: Don't trigger reflow for pinned sidebar (https://github.com/WordPress/gutenberg/pull/75010) - Resize meta box pane without `ResizableBox` (https://github.com/WordPress/gutenberg/pull/66735) - `@wordpress/ui`: add `IconButton` (https://github.com/WordPress/gutenberg/pull/74697) - Private APIs: remove duplicate `@wordpress/ui` entry (https://github.com/WordPress/gutenberg/pull/75051) - DataViews: Fix title truncation in `list` layout (https://github.com/WordPress/gutenberg/pull/75063) - Custom CSS support: Add attributes for dynamic blocks. (https://github.com/WordPress/gutenberg/pull/75052) - DataViews: Fix fields async validation (https://github.com/WordPress/gutenberg/pull/74948) - Unified view persistence: Share one persisted view across all tabs (https://github.com/WordPress/gutenberg/pull/74970) - SVG Icon registration API (https://github.com/WordPress/gutenberg/pull/72215) - Navigation: Use :where on the :not(.disable-default-overlay) selector so that the scope doesn't change. (https://github.com/WordPress/gutenberg/pull/75090) - wp-env: Fix MySQL startup race condition causing database connection errors (https://github.com/WordPress/gutenberg/pull/75046) - RichText: fix white space collapsing arround formatting (https://github.com/WordPress/gutenberg/pull/74820) - Docs: Add missing @global documentation in rtl.php and meta-box.php (https://github.com/WordPress/gutenberg/pull/75082) - Blocks: Try prepending 'https' to URLs without protocol (https://github.com/WordPress/gutenberg/pull/75005) - wp-env: Add cleanup command and force flag (https://github.com/WordPress/gutenberg/pull/75045) - DataViews: Add `title` attribute in `grid` item title field (https://github.com/WordPress/gutenberg/pull/75085) - wp-env: Fix mixed runtime detection issues (https://github.com/WordPress/gutenberg/pull/75057) - `@wordpress/ui`: add `Tabs` (https://github.com/WordPress/gutenberg/pull/74652) - Run generate-worker-placeholders script in dev (https://github.com/WordPress/gutenberg/pull/75104) - Docs: Add missing @global documentation in block library (https://github.com/WordPress/gutenberg/pull/75004) - Site Editor: Prevent welcome guide from appearing during loading (https://github.com/WordPress/gutenberg/pull/75102) - Media Fields: Fix filename field truncation (https://github.com/WordPress/gutenberg/pull/75091) - Block Supports: Add Line Indent support using enum setting (https://github.com/WordPress/gutenberg/pull/74889) - useBlockVisibility: consolidate useMemo calls to the output object (https://github.com/WordPress/gutenberg/pull/75120) - Post Author Name: Migrate to text-align block support (https://github.com/WordPress/gutenberg/pull/75109) - Restore deprecated Pullquote Block (https://github.com/WordPress/gutenberg/pull/75122) - useBlockVisibility: Remove the last 'useMemo' call (https://github.com/WordPress/gutenberg/pull/75125) - remove horizontal scroll (https://github.com/WordPress/gutenberg/pull/75086) - Refactor activeFilters to activeViewOverrides with date sort for User tab (https://github.com/WordPress/gutenberg/pull/75094) - Post Content Block: Improve removal confirmation modal (https://github.com/WordPress/gutenberg/pull/75001) - DataViews: Consistent rendering of selection checkbox and actions in `grid` layout (https://github.com/WordPress/gutenberg/pull/75056) - Pullquote: Fix deprecated block validation when anchor/id attribute is present (https://github.com/WordPress/gutenberg/pull/75132) - Add URL validation in LinkControl using ValidatedInputControl (https://github.com/WordPress/gutenberg/pull/73486) - Components: remove "text-wrap: balance" fallback from Text (https://github.com/WordPress/gutenberg/pull/75089) - Image Block: Handle image URLs without protocol (https://github.com/WordPress/gutenberg/pull/75135) - fix the color of the overlay to fix contrast issues on dark themes (https://github.com/WordPress/gutenberg/pull/74979) - Admin UI: apply 'text-wrap: pretty' to Page (https://github.com/WordPress/gutenberg/pull/74907) - Fix dev build for fresh checkouts (or with build/scripts/block-library missing) (https://github.com/WordPress/gutenberg/pull/75108) - Calculate viewport based on iframe size in resizable editor. (https://github.com/WordPress/gutenberg/pull/75156) - Media Modal Experiment: Remove default value for allowedTypes so that the file block can accept all types (https://github.com/WordPress/gutenberg/pull/75159) - wp-env Playground: Support zip archive themes (https://github.com/WordPress/gutenberg/pull/75155) - Block Editor: Allow stable block IDs in block editor store (https://github.com/WordPress/gutenberg/pull/74687) - Code Quality: Remove deprecated __nextHasNoMarginBottom prop (https://github.com/WordPress/gutenberg/pull/75139) - Migrate textAlign attributes from the Author block to block support when migrating. (https://github.com/WordPress/gutenberg/pull/75153) - Scripts: Fix contributor guide link in README (https://github.com/WordPress/gutenberg/pull/75161) - ToggleGroupControl: add visual emphasis to selected item (https://github.com/WordPress/gutenberg/pull/75138) - Image block: Add missing space between sentences (https://github.com/WordPress/gutenberg/pull/75142) - DOM: exclude inert elements from focus.focusable (https://github.com/WordPress/gutenberg/pull/75172) - Writing flow: fix Cmd+A from empty RichText (https://github.com/WordPress/gutenberg/pull/75175) - Theme: Update dimension tokens (https://github.com/WordPress/gutenberg/pull/75054) - Build: Add vendorScripts config to build packages from node_modules (https://github.com/WordPress/gutenberg/pull/74343) - ui/`Button`: add min width (https://github.com/WordPress/gutenberg/pull/75133) - Navigation: Consolidate SVG rendering functions to a shared helper (https://github.com/WordPress/gutenberg/pull/74853) - RangeControl: support forced-colors mode (https://github.com/WordPress/gutenberg/pull/75165) - Restrict base-ui imports outside of UI component packages (https://github.com/WordPress/gutenberg/pull/75143) - Remove the React Native test status badges. (https://github.com/WordPress/gutenberg/pull/74674) - DataViews: externalize theme stylesheet (https://github.com/WordPress/gutenberg/pull/75182) - Media Modal Experiment: Update preview size to be a little smaller (https://github.com/WordPress/gutenberg/pull/75191) - Env: Remove non-functional `WP_ENV_MULTISITE` config (https://github.com/WordPress/gutenberg/pull/72567) - Cover block: Force LTR direction for the background URL input field (https://github.com/WordPress/gutenberg/pull/75169) - Tabs block: Polish (https://github.com/WordPress/gutenberg/pull/75128) - Real-time Collaboration: Add collaborators presence UI (https://github.com/WordPress/gutenberg/pull/75065) - DataForm: mark fields as required or optional automatically (https://github.com/WordPress/gutenberg/pull/74430) - ToggleControl: pass full props to the input element (https://github.com/WordPress/gutenberg/pull/74956) - Media & Text: Fix RTLCSS control directives appearing in production CSS (https://github.com/WordPress/gutenberg/pull/73205) - @wordpress/ui: use semantic dimension tokens (https://github.com/WordPress/gutenberg/pull/74557) - Fix duplicate content when navigation overlay is open and nav has non-link inner blocks (https://github.com/WordPress/gutenberg/pull/75180) - Group fix example text-align attributes (https://github.com/WordPress/gutenberg/pull/75200) - Editor: Introduce new selectedNote editor state (https://github.com/WordPress/gutenberg/pull/75177) - Block Support: Allow serialization skipping for ariaLabel (https://github.com/WordPress/gutenberg/pull/75192) Built from https://develop.svn.wordpress.org/trunk@61605 git-svn-id: http://core.svn.wordpress.org/trunk@60916 1a063a9b-81f0-0310-95a4-ce76da25c4cd
612 lines
19 KiB
PHP
612 lines
19 KiB
PHP
<?php
|
|
/**
|
|
* Server-side rendering of the `core/breadcrumbs` block.
|
|
*
|
|
* @package WordPress
|
|
*/
|
|
|
|
/**
|
|
* Renders the `core/breadcrumbs` block on the server.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param array $attributes Block attributes.
|
|
* @param string $content Block default content.
|
|
* @param WP_Block $block Block instance.
|
|
*
|
|
* @return string Returns the post breadcrumb for hierarchical post types.
|
|
*/
|
|
function render_block_core_breadcrumbs( $attributes, $content, $block ) {
|
|
$is_front_page = is_front_page();
|
|
|
|
if ( ! $attributes['showOnHomePage'] && $is_front_page ) {
|
|
return '';
|
|
}
|
|
|
|
$is_home = is_home();
|
|
$page_for_posts = get_option( 'page_for_posts' );
|
|
$breadcrumb_items = array();
|
|
|
|
if ( $attributes['showHomeItem'] ) {
|
|
// We make `home` a link if not on front page, or if front page
|
|
// is set to a custom page and is paged.
|
|
if ( ! $is_front_page || ( 'page' === get_option( 'show_on_front' ) && (int) get_query_var( 'page' ) > 1 ) ) {
|
|
$breadcrumb_items[] = array(
|
|
'label' => __( 'Home' ),
|
|
'url' => home_url( '/' ),
|
|
);
|
|
} else {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item( __( 'Home' ), block_core_breadcrumbs_is_paged() );
|
|
}
|
|
}
|
|
|
|
// Handle home.
|
|
if ( $is_home ) {
|
|
// These checks are explicitly nested in order not to execute the `else` branch.
|
|
if ( $page_for_posts ) {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item( block_core_breadcrumbs_get_post_title( $page_for_posts ), block_core_breadcrumbs_is_paged() );
|
|
}
|
|
if ( block_core_breadcrumbs_is_paged() ) {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item();
|
|
}
|
|
} elseif ( $is_front_page ) {
|
|
// Handle front page.
|
|
// This check is explicitly nested in order not to execute the `else` branch.
|
|
// If front page is set to custom page and is paged, add the page number.
|
|
if ( (int) get_query_var( 'page' ) > 1 ) {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item( 'page' );
|
|
}
|
|
} elseif ( is_search() ) {
|
|
// Handle search results.
|
|
$is_paged = block_core_breadcrumbs_is_paged();
|
|
/* translators: %s: search query */
|
|
$text = sprintf( __( 'Search results for: "%s"' ), wp_trim_words( get_search_query(), 10 ) );
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item( $text, $is_paged );
|
|
// Add the "Page X" as the current page if paginated.
|
|
if ( $is_paged ) {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item();
|
|
}
|
|
} elseif ( is_404() ) {
|
|
// Handle 404 pages.
|
|
$breadcrumb_items[] = array(
|
|
'label' => __( 'Page not found' ),
|
|
);
|
|
} elseif ( is_archive() ) {
|
|
// Handle archive pages (taxonomy, post type, date, author archives).
|
|
$archive_breadcrumbs = block_core_breadcrumbs_get_archive_breadcrumbs();
|
|
if ( ! empty( $archive_breadcrumbs ) ) {
|
|
$breadcrumb_items = array_merge( $breadcrumb_items, $archive_breadcrumbs );
|
|
}
|
|
} else {
|
|
// Handle single post/page breadcrumbs.
|
|
if ( ! isset( $block->context['postId'] ) || ! isset( $block->context['postType'] ) ) {
|
|
return '';
|
|
}
|
|
|
|
$post_id = $block->context['postId'];
|
|
$post_type = $block->context['postType'];
|
|
|
|
$post = get_post( $post_id );
|
|
if ( ! $post ) {
|
|
return '';
|
|
}
|
|
|
|
// For non-hierarchical post types with parents (e.g., attachments), build trail for the parent.
|
|
$post_parent = $post->post_parent;
|
|
$parent_post = null;
|
|
if ( ! is_post_type_hierarchical( $post_type ) && $post_parent ) {
|
|
$parent_post = get_post( $post_parent );
|
|
if ( $parent_post ) {
|
|
$post_id = $parent_post->ID;
|
|
$post_type = $parent_post->post_type;
|
|
$post_parent = $parent_post->post_parent;
|
|
}
|
|
}
|
|
|
|
// Determine breadcrumb type.
|
|
// Some non-hierarchical post types (e.g., attachments) can have parents.
|
|
// Use hierarchical breadcrumbs if a parent exists, otherwise use taxonomy breadcrumbs.
|
|
$show_terms = false;
|
|
if ( ! is_post_type_hierarchical( $post_type ) && ! $post_parent ) {
|
|
$show_terms = true;
|
|
} elseif ( empty( get_object_taxonomies( $post_type, 'objects' ) ) ) {
|
|
$show_terms = false;
|
|
} else {
|
|
$show_terms = $attributes['prefersTaxonomy'];
|
|
}
|
|
|
|
// Add post type archive link if applicable.
|
|
$post_type_object = get_post_type_object( $post_type );
|
|
$archive_link = get_post_type_archive_link( $post_type );
|
|
if ( $archive_link && untrailingslashit( home_url() ) !== untrailingslashit( $archive_link ) ) {
|
|
$label = $post_type_object->labels->archives;
|
|
if ( 'post' === $post_type && $page_for_posts ) {
|
|
$label = block_core_breadcrumbs_get_post_title( $page_for_posts );
|
|
}
|
|
$breadcrumb_items[] = array(
|
|
'label' => $label,
|
|
'url' => $archive_link,
|
|
);
|
|
}
|
|
// Build breadcrumb trail based on hierarchical structure or taxonomy terms.
|
|
if ( ! $show_terms ) {
|
|
$breadcrumb_items = array_merge( $breadcrumb_items, block_core_breadcrumbs_get_hierarchical_post_type_breadcrumbs( $post_id ) );
|
|
} else {
|
|
$breadcrumb_items = array_merge( $breadcrumb_items, block_core_breadcrumbs_get_terms_breadcrumbs( $post_id, $post_type ) );
|
|
}
|
|
|
|
// Add post title: linked when viewing a paginated page, plain text otherwise.
|
|
$is_paged = (int) get_query_var( 'page' ) > 1 || (int) get_query_var( 'cpage' ) > 1;
|
|
$title = block_core_breadcrumbs_get_post_title( $post );
|
|
|
|
if ( $is_paged ) {
|
|
$breadcrumb_items[] = array(
|
|
'label' => $title,
|
|
'url' => get_permalink( $post ),
|
|
'allow_html' => true,
|
|
);
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item( (int) get_query_var( 'cpage' ) > 1 ? 'cpage' : 'page' );
|
|
} else {
|
|
$breadcrumb_items[] = array(
|
|
'label' => $title,
|
|
'allow_html' => true,
|
|
);
|
|
}
|
|
}
|
|
|
|
// Remove current item if disabled.
|
|
if ( ! $attributes['showCurrentItem'] && ! empty( $breadcrumb_items ) ) {
|
|
array_pop( $breadcrumb_items );
|
|
}
|
|
|
|
/**
|
|
* Filters the breadcrumb items array before rendering.
|
|
*
|
|
* Allows developers to modify, add, or remove breadcrumb items.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param array[] $breadcrumb_items {
|
|
* Array of breadcrumb item data.
|
|
*
|
|
* @type string $label The breadcrumb text.
|
|
* @type string $url Optional. The breadcrumb link URL.
|
|
* @type bool $allow_html Optional. Whether to allow HTML in the label.
|
|
* When true, the label will be sanitized with wp_kses_post(),
|
|
* allowing only safe HTML tags. When false or omitted, all HTML
|
|
* will be escaped with esc_html(). Default false.
|
|
* }
|
|
*/
|
|
$breadcrumb_items = apply_filters( 'block_core_breadcrumbs_items', $breadcrumb_items );
|
|
|
|
if ( empty( $breadcrumb_items ) ) {
|
|
return '';
|
|
}
|
|
|
|
$wrapper_attributes = get_block_wrapper_attributes(
|
|
array(
|
|
'style' => '--separator: "' . addcslashes( $attributes['separator'], '\\"' ) . '";',
|
|
'aria-label' => __( 'Breadcrumbs' ),
|
|
)
|
|
);
|
|
|
|
$breadcrumb_html = sprintf(
|
|
'<nav %s><ol>%s</ol></nav>',
|
|
$wrapper_attributes,
|
|
implode(
|
|
'',
|
|
array_map(
|
|
static function ( $item ) {
|
|
$label = ! empty( $item['allow_html'] ) ? wp_kses_post( $item['label'] ) : esc_html( $item['label'] );
|
|
if ( ! empty( $item['url'] ) ) {
|
|
return '<li><a href="' . esc_url( $item['url'] ) . '">' . $label . '</a></li>';
|
|
}
|
|
return '<li><span aria-current="page">' . $label . '</span></li>';
|
|
},
|
|
$breadcrumb_items
|
|
)
|
|
)
|
|
);
|
|
|
|
return $breadcrumb_html;
|
|
}
|
|
|
|
/**
|
|
* Checks if we're on a paginated view (page 2 or higher).
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @return bool True if paged > 1, false otherwise.
|
|
*/
|
|
function block_core_breadcrumbs_is_paged() {
|
|
$paged = (int) get_query_var( 'paged' );
|
|
return $paged > 1;
|
|
}
|
|
|
|
/**
|
|
* Creates a "Page X" breadcrumb item for paginated views.
|
|
*
|
|
* @since 7.0.0
|
|
* @param string $query_var Optional. Query variable to get current page number. Default 'paged'.
|
|
* @return array The "Page X" breadcrumb item data.
|
|
*/
|
|
function block_core_breadcrumbs_create_page_number_item( $query_var = 'paged' ) {
|
|
$paged = (int) get_query_var( $query_var );
|
|
|
|
if ( 'cpage' === $query_var ) {
|
|
return array(
|
|
'label' => sprintf(
|
|
/* translators: %s: comment page number */
|
|
__( 'Comments Page %s' ),
|
|
number_format_i18n( $paged )
|
|
),
|
|
);
|
|
}
|
|
|
|
return array(
|
|
'label' => sprintf(
|
|
/* translators: %s: page number */
|
|
__( 'Page %s' ),
|
|
number_format_i18n( $paged )
|
|
),
|
|
);
|
|
}
|
|
|
|
|
|
/**
|
|
* Creates a breadcrumb item that's either a link or current page item.
|
|
*
|
|
* When paginated (is_paged is true), creates a link to page 1.
|
|
* Otherwise, creates a span marked as the current page.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param string $text The text content.
|
|
* @param bool $is_paged Whether we're on a paginated view.
|
|
*
|
|
* @return array The breadcrumb item data.
|
|
*/
|
|
function block_core_breadcrumbs_create_item( $text, $is_paged = false ) {
|
|
$item = array( 'label' => $text );
|
|
if ( $is_paged ) {
|
|
$item['url'] = get_pagenum_link( 1 );
|
|
}
|
|
return $item;
|
|
}
|
|
|
|
/**
|
|
* Gets a post title with fallback for empty titles.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param int|WP_Post $post_id_or_object The post ID or post object.
|
|
*
|
|
* @return string The post title or fallback text.
|
|
*/
|
|
function block_core_breadcrumbs_get_post_title( $post_id_or_object ) {
|
|
$title = get_the_title( $post_id_or_object );
|
|
if ( strlen( $title ) === 0 ) {
|
|
$title = __( '(no title)' );
|
|
}
|
|
return $title;
|
|
}
|
|
|
|
/**
|
|
* Generates breadcrumb items from hierarchical post type ancestors.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param int $post_id The post ID.
|
|
*
|
|
* @return array Array of breadcrumb item data.
|
|
*/
|
|
function block_core_breadcrumbs_get_hierarchical_post_type_breadcrumbs( $post_id ) {
|
|
$breadcrumb_items = array();
|
|
$ancestors = get_post_ancestors( $post_id );
|
|
$ancestors = array_reverse( $ancestors );
|
|
|
|
foreach ( $ancestors as $ancestor_id ) {
|
|
$breadcrumb_items[] = array(
|
|
'label' => block_core_breadcrumbs_get_post_title( $ancestor_id ),
|
|
'url' => get_permalink( $ancestor_id ),
|
|
'allow_html' => true,
|
|
);
|
|
}
|
|
return $breadcrumb_items;
|
|
}
|
|
|
|
/**
|
|
* Generates breadcrumb items for hierarchical term ancestors.
|
|
*
|
|
* For hierarchical taxonomies, retrieves and formats ancestor terms as breadcrumb links.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param int $term_id The term ID.
|
|
* @param string $taxonomy The taxonomy name.
|
|
*
|
|
* @return array Array of breadcrumb item data for ancestors.
|
|
*/
|
|
function block_core_breadcrumbs_get_term_ancestors_items( $term_id, $taxonomy ) {
|
|
$breadcrumb_items = array();
|
|
|
|
// Check if taxonomy is hierarchical and add ancestor term links.
|
|
if ( is_taxonomy_hierarchical( $taxonomy ) ) {
|
|
$term_ancestors = get_ancestors( $term_id, $taxonomy, 'taxonomy' );
|
|
$term_ancestors = array_reverse( $term_ancestors );
|
|
foreach ( $term_ancestors as $ancestor_id ) {
|
|
$ancestor_term = get_term( $ancestor_id, $taxonomy );
|
|
if ( $ancestor_term && ! is_wp_error( $ancestor_term ) ) {
|
|
$breadcrumb_items[] = array(
|
|
'label' => $ancestor_term->name,
|
|
'url' => get_term_link( $ancestor_term ),
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $breadcrumb_items;
|
|
}
|
|
|
|
/**
|
|
* Generates breadcrumb items for archive pages.
|
|
*
|
|
* Handles taxonomy archives, post type archives, date archives, and author archives.
|
|
* For hierarchical taxonomies, includes ancestor terms in the breadcrumb trail.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @return array Array of breadcrumb item data.
|
|
*/
|
|
function block_core_breadcrumbs_get_archive_breadcrumbs() {
|
|
$breadcrumb_items = array();
|
|
|
|
// Date archive (check first since it doesn't have a queried object).
|
|
if ( is_date() ) {
|
|
$year = get_query_var( 'year' );
|
|
$month = get_query_var( 'monthnum' );
|
|
$day = get_query_var( 'day' );
|
|
|
|
// Fallback to 'm' query var for plain permalinks.
|
|
// Plain permalinks use ?m=YYYYMMDD format instead of separate query vars.
|
|
if ( ! $year ) {
|
|
$m = get_query_var( 'm' );
|
|
if ( $m ) {
|
|
$year = substr( $m, 0, 4 );
|
|
$month = substr( $m, 4, 2 );
|
|
$day = (int) substr( $m, 6, 2 );
|
|
}
|
|
}
|
|
|
|
$is_paged = block_core_breadcrumbs_is_paged();
|
|
|
|
if ( $year ) {
|
|
if ( $month ) {
|
|
// Year is linked if we have month.
|
|
$breadcrumb_items[] = array(
|
|
'label' => $year,
|
|
'url' => get_year_link( $year ),
|
|
);
|
|
|
|
if ( $day ) {
|
|
// Month is linked if we have day.
|
|
$breadcrumb_items[] = array(
|
|
'label' => date_i18n( 'F', mktime( 0, 0, 0, $month, 1, $year ) ),
|
|
'url' => get_month_link( $year, $month ),
|
|
);
|
|
// Add day (current if not paginated, link if paginated).
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
|
|
$day,
|
|
$is_paged
|
|
);
|
|
} else {
|
|
// Add month (current if not paginated, link if paginated).
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
|
|
date_i18n( 'F', mktime( 0, 0, 0, $month, 1, $year ) ),
|
|
$is_paged
|
|
);
|
|
}
|
|
} else {
|
|
// Add year (current if not paginated, link if paginated).
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
|
|
$year,
|
|
$is_paged
|
|
);
|
|
}
|
|
}
|
|
|
|
// Add pagination breadcrumb if on a paged date archive.
|
|
if ( $is_paged ) {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item();
|
|
}
|
|
|
|
return $breadcrumb_items;
|
|
}
|
|
|
|
// For other archive types, we need a queried object.
|
|
$queried_object = get_queried_object();
|
|
|
|
if ( ! $queried_object ) {
|
|
return array();
|
|
}
|
|
|
|
$is_paged = block_core_breadcrumbs_is_paged();
|
|
|
|
// Taxonomy archive (category, tag, custom taxonomy).
|
|
if ( $queried_object instanceof WP_Term ) {
|
|
$term = $queried_object;
|
|
$taxonomy = $term->taxonomy;
|
|
|
|
// Add hierarchical term ancestors if applicable.
|
|
$breadcrumb_items = array_merge(
|
|
$breadcrumb_items,
|
|
block_core_breadcrumbs_get_term_ancestors_items( $term->term_id, $taxonomy )
|
|
);
|
|
|
|
// Add current term (current if not paginated, link if paginated).
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
|
|
$term->name,
|
|
$is_paged
|
|
);
|
|
} elseif ( is_post_type_archive() ) {
|
|
// Post type archive.
|
|
$post_type = get_query_var( 'post_type' );
|
|
if ( is_array( $post_type ) ) {
|
|
$post_type = reset( $post_type );
|
|
}
|
|
$post_type_object = get_post_type_object( $post_type );
|
|
|
|
/** This filter is documented in wp-includes/general-template.php */
|
|
$title = apply_filters( 'post_type_archive_title', $post_type_object->labels->archives, $post_type ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound
|
|
|
|
if ( $post_type_object ) {
|
|
// Add post type (current if not paginated, link if paginated).
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
|
|
$title ? $title : $post_type_object->labels->archives,
|
|
$is_paged
|
|
);
|
|
}
|
|
} elseif ( is_author() ) {
|
|
// Author archive.
|
|
$author = $queried_object;
|
|
// Add author (current if not paginated, link if paginated).
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_item(
|
|
$author->display_name,
|
|
$is_paged
|
|
);
|
|
}
|
|
|
|
// Add pagination breadcrumb if on a paged archive.
|
|
if ( $is_paged ) {
|
|
$breadcrumb_items[] = block_core_breadcrumbs_create_page_number_item();
|
|
}
|
|
|
|
return $breadcrumb_items;
|
|
}
|
|
|
|
/**
|
|
* Generates breadcrumb items from taxonomy terms.
|
|
*
|
|
* Finds the first publicly queryable taxonomy with terms assigned to the post
|
|
* and generates breadcrumb links, including hierarchical term ancestors if applicable.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param int $post_id The post ID.
|
|
* @param string $post_type The post type name.
|
|
*
|
|
* @return array Array of breadcrumb item data.
|
|
*/
|
|
function block_core_breadcrumbs_get_terms_breadcrumbs( $post_id, $post_type ) {
|
|
$breadcrumb_items = array();
|
|
|
|
// Get public taxonomies for this post type.
|
|
$taxonomies = wp_filter_object_list(
|
|
get_object_taxonomies( $post_type, 'objects' ),
|
|
array(
|
|
'publicly_queryable' => true,
|
|
'show_in_rest' => true,
|
|
)
|
|
);
|
|
|
|
if ( empty( $taxonomies ) ) {
|
|
return $breadcrumb_items;
|
|
}
|
|
|
|
/**
|
|
* Filters breadcrumb settings (taxonomy and term selection) for a post or post type.
|
|
*
|
|
* Allows developers to specify which taxonomy and term should be used in the
|
|
* breadcrumb trail when a post type has multiple taxonomies or when a post is
|
|
* assigned to multiple terms within a taxonomy.
|
|
*
|
|
* @since 7.0.0
|
|
*
|
|
* @param array $settings {
|
|
* Array of breadcrumb settings. Default empty array.
|
|
*
|
|
* @type string $taxonomy Optional. Taxonomy slug to use for breadcrumbs.
|
|
* The taxonomy must be registered for the post type and have
|
|
* terms assigned to the post. If not found or has no terms,
|
|
* fall back to the first available taxonomy with terms.
|
|
* @type string $term Optional. Term slug to use when the post has multiple terms
|
|
* in the selected taxonomy. If the term is not found or not
|
|
* assigned to the post, fall back to the first term. If the
|
|
* post has only one term, that term is used regardless.
|
|
* }
|
|
* @param string $post_type The post type slug.
|
|
* @param int $post_id The post ID.
|
|
*/
|
|
$settings = apply_filters( 'block_core_breadcrumbs_post_type_settings', array(), $post_type, $post_id );
|
|
|
|
$taxonomy_name = null;
|
|
$terms = array();
|
|
|
|
// Try preferred taxonomy first if specified.
|
|
if ( ! empty( $settings['taxonomy'] ) ) {
|
|
foreach ( $taxonomies as $taxonomy ) {
|
|
if ( $taxonomy->name === $settings['taxonomy'] ) {
|
|
$post_terms = get_the_terms( $post_id, $taxonomy->name );
|
|
if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) {
|
|
$taxonomy_name = $taxonomy->name;
|
|
$terms = $post_terms;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// If no preferred taxonomy or it didn't have terms, find the first taxonomy with terms.
|
|
if ( empty( $terms ) ) {
|
|
foreach ( $taxonomies as $taxonomy ) {
|
|
$post_terms = get_the_terms( $post_id, $taxonomy->name );
|
|
if ( ! empty( $post_terms ) && ! is_wp_error( $post_terms ) ) {
|
|
$taxonomy_name = $taxonomy->name;
|
|
$terms = $post_terms;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $terms ) ) {
|
|
// Select which term to use.
|
|
$term = reset( $terms );
|
|
|
|
// Try preferred term if specified and post has multiple terms.
|
|
if ( ! empty( $settings['term'] ) && count( $terms ) > 1 ) {
|
|
foreach ( $terms as $candidate_term ) {
|
|
if ( $candidate_term->slug === $settings['term'] ) {
|
|
$term = $candidate_term;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Add hierarchical term ancestors if applicable.
|
|
$breadcrumb_items = array_merge(
|
|
$breadcrumb_items,
|
|
block_core_breadcrumbs_get_term_ancestors_items( $term->term_id, $taxonomy_name )
|
|
);
|
|
$breadcrumb_items[] = array(
|
|
'label' => $term->name,
|
|
'url' => get_term_link( $term ),
|
|
);
|
|
}
|
|
return $breadcrumb_items;
|
|
}
|
|
|
|
/**
|
|
* Registers the `core/breadcrumbs` block on the server.
|
|
*
|
|
* @since 7.0.0
|
|
*/
|
|
function register_block_core_breadcrumbs() {
|
|
register_block_type_from_metadata(
|
|
__DIR__ . '/breadcrumbs',
|
|
array(
|
|
'render_callback' => 'render_block_core_breadcrumbs',
|
|
)
|
|
);
|
|
}
|
|
add_action( 'init', 'register_block_core_breadcrumbs' );
|