From ff9c17bc5fcf1d8863dd701159fad32f704a0c4e Mon Sep 17 00:00:00 2001 From: MaggieCabrera Date: Mon, 9 Nov 2026 13:11:01 +0100 Subject: [PATCH 01/16] Ipsum: Draw the Button block's focus outline inside the button. The Button block's focus outline gets a negative offset, so it sits inside the button like the Search block's button does. Synced from https://github.com/WordPress/ipsum/pull/187. See #66631. Co-Authored-By: Claude Opus 5.5 --- src/wp-content/themes/ipsum/theme.json | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/wp-content/themes/ipsum/theme.json b/src/wp-content/themes/ipsum/theme.json index 546cbe3e8dbb6..5c130b980792b 100644 --- a/src/wp-content/themes/ipsum/theme.json +++ b/src/wp-content/themes/ipsum/theme.json @@ -435,9 +435,6 @@ "color": { "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", "text": "var(--wp--preset--color--base)" - }, - "outline": { - "offset": "4px" } }, ":focus-visible": { @@ -536,11 +533,8 @@ } }, "color": { - "background": "color-mix(in srgb, var(--wp--preset--color--contrast) 85%, transparent)", - "text": "var(--wp--preset--color--base)" - }, - "outline": { - "offset": "4px" + "background": "var(--wp--preset--color--accent-5)", + "text": "var(--wp--preset--color--accent-3)" } }, ":focus-visible": { From e1fad580b36ce61edc97a283a88a78e55fc24ae0 Mon Sep 17 00:00:00 2001 From: MaggieCabrera Date: Mon, 9 Nov 2026 13:11:06 +0100 Subject: [PATCH 02/16] Ipsum: Respect reduced motion in view transitions. Browsers don't turn off view transitions for people who prefer reduced motion, so they still got the crossfade between pages. The cross-document view transition now only runs with `prefers-reduced-motion: no-preference`, like the theme's other animations. Synced from https://github.com/WordPress/ipsum/pull/198. See #66631. Co-Authored-By: Claude Opus 5.5 --- src/wp-content/themes/ipsum/style.css | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/wp-content/themes/ipsum/style.css b/src/wp-content/themes/ipsum/style.css index a4939b33df6a8..ba7ff0325bbc9 100644 --- a/src/wp-content/themes/ipsum/style.css +++ b/src/wp-content/themes/ipsum/style.css @@ -16,8 +16,10 @@ Tags: one-column, featured-images, full-site-editing, block-patterns, rtl-langua /* Crossfade page transition */ -@view-transition { - navigation: auto; +@media (prefers-reduced-motion: no-preference) { + @view-transition { + navigation: auto; + } } /* Font smoothing */ From 7acbe8dcdfcc3d44c0c45176a688865edee9aea6 Mon Sep 17 00:00:00 2001 From: MaggieCabrera Date: Mon, 9 Nov 2026 13:11:12 +0100 Subject: [PATCH 03/16] Ipsum: Register the pattern utility classes as block styles. Pinned to Bottom, Row Hover and Dot Separator, which the patterns used as utility classes, are now block styles, so they show up in the Styles panel and the REST API. The pinned Search Bar's outlined button becomes the Outline style on Search. Nothing changes visually. Synced from https://github.com/WordPress/ipsum/pull/180. See #66631. Co-Authored-By: Claude Opus 5.5 --- .../themes/ipsum/assets/css/editor-style.css | 6 +- src/wp-content/themes/ipsum/functions.php | 84 +++++++++++++++++++ .../themes/ipsum/patterns/archive-compact.php | 2 +- .../themes/ipsum/patterns/archive-lead.php | 2 +- .../themes/ipsum/patterns/archive-simple.php | 2 +- .../ipsum/patterns/archive-standard.php | 2 +- .../ipsum/patterns/hidden-archive-sidebar.php | 4 +- .../themes/ipsum/patterns/hidden-archive.php | 2 +- .../themes/ipsum/patterns/hidden-comments.php | 4 +- .../ipsum/patterns/hidden-index-sidebar.php | 2 +- .../themes/ipsum/patterns/hidden-index.php | 2 +- .../ipsum/patterns/hidden-page-no-title.php | 2 +- .../ipsum/patterns/hidden-page-sidebar.php | 2 +- .../themes/ipsum/patterns/hidden-page.php | 2 +- .../ipsum/patterns/hidden-search-bar.php | 2 +- .../themes/ipsum/patterns/hidden-search.php | 2 +- .../ipsum/patterns/hidden-single-sidebar.php | 2 +- .../themes/ipsum/patterns/hidden-single.php | 2 +- src/wp-content/themes/ipsum/style.css | 66 --------------- .../ipsum/styles/blocks/dot-separator.json | 10 +++ 20 files changed, 115 insertions(+), 87 deletions(-) create mode 100644 src/wp-content/themes/ipsum/styles/blocks/dot-separator.json diff --git a/src/wp-content/themes/ipsum/assets/css/editor-style.css b/src/wp-content/themes/ipsum/assets/css/editor-style.css index f459c3833eb86..6d191462de895 100644 --- a/src/wp-content/themes/ipsum/assets/css/editor-style.css +++ b/src/wp-content/themes/ipsum/assets/css/editor-style.css @@ -2,10 +2,10 @@ * Editor-only overrides. The editors load style.css first, so this file holds * only what the editors need on top of it. * - * Sticky header part and pinned search bar: !important because the editor - * forces position:relative on block wrappers. + * Sticky header part and Pinned to Bottom template parts: !important because + * the editor forces position:relative on block wrappers. */ header.wp-block-template-part:has(> .is-position-sticky), -.sticky-bottom { +.wp-block-template-part.is-style-sticky-bottom { position: sticky !important; } diff --git a/src/wp-content/themes/ipsum/functions.php b/src/wp-content/themes/ipsum/functions.php index edaf242a10b99..59acef0b6b14d 100644 --- a/src/wp-content/themes/ipsum/functions.php +++ b/src/wp-content/themes/ipsum/functions.php @@ -201,6 +201,10 @@ function ipsum_search_aria_label_support( $metadata ) { * The Evening code style keeps the Evening palette's literals on purpose, * so the block reads as a dark slab under every style variation. * + * Each style's CSS is an inline style, as in the default themes. Row Hover + * can't move to styles/blocks/, because a theme.json css string cannot hold + * its at-rules and selector lists. + * * @since Ipsum 1.0 * * @return void @@ -223,6 +227,86 @@ function ipsum_register_block_styles() { 'inline_style' => '.wp-block-site-logo.is-style-sharp{border-radius:0;}', ) ); + + /* + * Pins the part to the bottom of the viewport, so it belongs at the root + * of the template. It keeps to its content's width at the inline end, so + * the rest of the band doesn't block clicks on the page. The editors also + * need the override in editor-style.css. + */ + register_block_style( + 'core/template-part', + array( + 'name' => 'sticky-bottom', + 'label' => _x( 'Pinned to Bottom', 'Block style label', 'ipsum' ), + 'inline_style' => ' + .wp-block-template-part.is-style-sticky-bottom { + position: sticky; + inset-block-end: 0; + z-index: 10; + width: fit-content; + margin-inline-start: auto; + }', + ) + ); + + /* + * Outlines the Search button until it is hovered, focused or pressed, when + * the global button states take back over. A theme.json css string would + * wrap this in :where() and only tie with the global button styles. + */ + register_block_style( + 'core/search', + array( + 'name' => 'outline', + 'label' => _x( 'Outline', 'Block style label', 'ipsum' ), + 'inline_style' => ' + .wp-block-search.is-style-outline .wp-block-search__button.wp-element-button:not(:hover):not(:focus):not(:active) { + background-color: var(--wp--preset--color--base); + border: 1px dotted var(--wp--preset--color--contrast); + color: var(--wp--preset--color--contrast); + }', + ) + ); + + /* + * Hovering any part of a post row colors the whole row and tilts its + * featured image. Targets the row's child blocks, since the Group spans + * the full band. Needs each post's blocks wrapped in one Group. + */ + register_block_style( + 'core/post-template', + array( + 'name' => 'hover-together', + 'label' => _x( 'Row Hover', 'Block style label', 'ipsum' ), + 'inline_style' => ' + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group, + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group a { + transition: color 0.15s ease-out; + } + + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group:has(> :hover), + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group:has(> :hover) a { + color: var(--wp--preset--color--accent-3); + } + + @media (prefers-reduced-motion: no-preference) { + @keyframes tilt-settle { + 35% { + transform: rotate(-1deg); + } + + 100% { + transform: rotate(0deg); + } + } + + .wp-block-post-template.is-style-hover-together .wp-block-post > .wp-block-group:has(> :hover) .wp-block-post-featured-image img { + animation: tilt-settle 0.5s ease-out; + } + }', + ) + ); } endif; add_action( 'init', 'ipsum_register_block_styles' ); diff --git a/src/wp-content/themes/ipsum/patterns/archive-compact.php b/src/wp-content/themes/ipsum/patterns/archive-compact.php index 543bc22a6d28a..17b0199776725 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-compact.php +++ b/src/wp-content/themes/ipsum/patterns/archive-compact.php @@ -13,7 +13,7 @@ ?> -
+
diff --git a/src/wp-content/themes/ipsum/patterns/archive-lead.php b/src/wp-content/themes/ipsum/patterns/archive-lead.php index 6b07e41fe6a54..005816c36ae30 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-lead.php +++ b/src/wp-content/themes/ipsum/patterns/archive-lead.php @@ -20,7 +20,7 @@ -
+
diff --git a/src/wp-content/themes/ipsum/patterns/archive-simple.php b/src/wp-content/themes/ipsum/patterns/archive-simple.php index c9594dbd405e7..d30589319a077 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-simple.php +++ b/src/wp-content/themes/ipsum/patterns/archive-simple.php @@ -13,7 +13,7 @@ ?> -
+
diff --git a/src/wp-content/themes/ipsum/patterns/archive-standard.php b/src/wp-content/themes/ipsum/patterns/archive-standard.php index 33eccc8d6ae1b..22b6de52220bb 100644 --- a/src/wp-content/themes/ipsum/patterns/archive-standard.php +++ b/src/wp-content/themes/ipsum/patterns/archive-standard.php @@ -13,7 +13,7 @@ ?> -
+
diff --git a/src/wp-content/themes/ipsum/patterns/hidden-archive-sidebar.php b/src/wp-content/themes/ipsum/patterns/hidden-archive-sidebar.php index 1033de79e616b..d9c4f27cb0589 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-archive-sidebar.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-archive-sidebar.php @@ -21,7 +21,7 @@ -
+
@@ -69,4 +69,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-archive.php b/src/wp-content/themes/ipsum/patterns/hidden-archive.php index 0d090bf8860b3..90c6aefa49e98 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-archive.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-archive.php @@ -22,4 +22,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-comments.php b/src/wp-content/themes/ipsum/patterns/hidden-comments.php index 474d7d39f4756..d754410b78761 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-comments.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-comments.php @@ -29,9 +29,9 @@
- + -
+
diff --git a/src/wp-content/themes/ipsum/patterns/hidden-index-sidebar.php b/src/wp-content/themes/ipsum/patterns/hidden-index-sidebar.php index b6f4fce33f2d3..62656624f1022 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-index-sidebar.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-index-sidebar.php @@ -81,4 +81,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-index.php b/src/wp-content/themes/ipsum/patterns/hidden-index.php index 6eb61191657af..1ea2bfdcd09c1 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-index.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-index.php @@ -72,4 +72,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-page-no-title.php b/src/wp-content/themes/ipsum/patterns/hidden-page-no-title.php index 0b218a6f0fb0f..bfd858c8a7288 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-page-no-title.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-page-no-title.php @@ -21,4 +21,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-page-sidebar.php b/src/wp-content/themes/ipsum/patterns/hidden-page-sidebar.php index cd067249b73e7..87530464a39ff 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-page-sidebar.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-page-sidebar.php @@ -37,4 +37,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-page.php b/src/wp-content/themes/ipsum/patterns/hidden-page.php index c61afee1258f3..23b98d106912f 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-page.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-page.php @@ -26,4 +26,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-search-bar.php b/src/wp-content/themes/ipsum/patterns/hidden-search-bar.php index 92d6f5741478b..fedc376154941 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-search-bar.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-search-bar.php @@ -10,5 +10,5 @@ ?> -
+
diff --git a/src/wp-content/themes/ipsum/patterns/hidden-search.php b/src/wp-content/themes/ipsum/patterns/hidden-search.php index 4fc68d3e7308f..989a8c1fbc47c 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-search.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-search.php @@ -19,7 +19,7 @@ -
+
diff --git a/src/wp-content/themes/ipsum/patterns/hidden-single-sidebar.php b/src/wp-content/themes/ipsum/patterns/hidden-single-sidebar.php index 365515f58692d..1b62adba61076 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-single-sidebar.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-single-sidebar.php @@ -69,4 +69,4 @@ - + diff --git a/src/wp-content/themes/ipsum/patterns/hidden-single.php b/src/wp-content/themes/ipsum/patterns/hidden-single.php index 15045f82e3e3e..5399d24a696e4 100644 --- a/src/wp-content/themes/ipsum/patterns/hidden-single.php +++ b/src/wp-content/themes/ipsum/patterns/hidden-single.php @@ -58,4 +58,4 @@ - + diff --git a/src/wp-content/themes/ipsum/style.css b/src/wp-content/themes/ipsum/style.css index ba7ff0325bbc9..46d62a2c944df 100644 --- a/src/wp-content/themes/ipsum/style.css +++ b/src/wp-content/themes/ipsum/style.css @@ -158,21 +158,6 @@ footer.wp-block-template-part { border-bottom-color: var(--wp--preset--color--accent-5); } -/* - * Utility class prefixing an element with the "·" meta separator. Used where - * neighbors render conditionally (e.g. the comment Edit link only exists for - * users who can edit), so the dot appears and disappears with its element - * instead of leaving orphan separators. The padding carries the breathing - * room — literal spaces in generated content can collapse — so rows using - * this class need no block gap of their own. The empty alternative text after - * the slash keeps screen readers from announcing the dot, which is decorative. - */ -.dot-before::before { - content: "·" / ""; - font-weight: 600; - padding-inline: 0.5em; -} - /* * Author cards: core hides the Author Name block for post types that do not * support authors, but the hand-written "Written by" byline would remain. @@ -240,40 +225,6 @@ header.wp-block-template-part:has(> .is-position-sticky):has(.wp-block-navigatio flex-grow: 1; } -/* Utility class for pinning an element to the bottom of the viewport. */ -.sticky-bottom { - position: sticky; - inset-block-end: 0; - z-index: 10; - width: fit-content; - margin-inline-start: auto; -} - -/* - * Quiet search button inside the pinned Search Bar part only: Base ground, - * outlined; global button states take back over on hover/focus/active. - */ -.sticky-bottom .wp-block-search__button.wp-element-button:not(:hover):not(:focus):not(:active) { - background-color: var(--wp--preset--color--base); - border: 1px dotted var(--wp--preset--color--contrast); - color: var(--wp--preset--color--contrast); -} - -/* - * Utility class for a query loop whose post rows hover as one: hovering any - * visible content of a row colors the whole row. Keyed on the row's child - * blocks because the row group's own box spans the full alignwide band. - */ -.hover-together .wp-block-post > .wp-block-group, -.hover-together .wp-block-post > .wp-block-group a { - transition: color 0.15s ease-out; -} - -.hover-together .wp-block-post > .wp-block-group:has(> :hover), -.hover-together .wp-block-post > .wp-block-group:has(> :hover) a { - color: var(--wp--preset--color--accent-3); -} - /* * Arrival bar: the blank canvas keeps index and single visually close, so a * thin accent bar sweeps the top of the viewport when a single post loads, @@ -323,20 +274,3 @@ header.wp-block-template-part:has(> .is-position-sticky):has(.wp-block-navigatio } } } - -/* A light tilt-and-settle on the row's featured image when the row is hovered. */ -@media (prefers-reduced-motion: no-preference) { - @keyframes tilt-settle { - 35% { - transform: rotate(-1deg); - } - - 100% { - transform: rotate(0deg); - } - } - - .hover-together .wp-block-post > .wp-block-group:has(> :hover) .wp-block-post-featured-image img { - animation: tilt-settle 0.5s ease-out; - } -} diff --git a/src/wp-content/themes/ipsum/styles/blocks/dot-separator.json b/src/wp-content/themes/ipsum/styles/blocks/dot-separator.json new file mode 100644 index 0000000000000..0e359a59c7421 --- /dev/null +++ b/src/wp-content/themes/ipsum/styles/blocks/dot-separator.json @@ -0,0 +1,10 @@ +{ + "$schema": "https://schemas.wp.org/trunk/theme.json", + "version": 3, + "title": "Dot Separator", + "slug": "dot-before", + "blockTypes": ["core/comment-edit-link", "core/comment-reply-link"], + "styles": { + "css": "&::before{content:\"·\" / \"\";font-weight:600;padding-inline:0.5em;}" + } +} From 15e09a733cec6bc8d6322f39d540f85663ef0f6d Mon Sep 17 00:00:00 2001 From: MaggieCabrera Date: Mon, 9 Nov 2026 13:44:30 +0100 Subject: [PATCH 04/16] Ipsum: Fix the PHPStan level 10 errors that core reports. Core's PHPStan analysis has covered Ipsum since the import, and at level 10 it reported errors in the patterns and the design guide ability. Pattern images no longer get a `?ver=` query string, like the pattern images in Twenty Twenty-Four and Twenty Twenty-Five, and their URLs now come from `get_parent_theme_file_uri()`. Synced from https://github.com/WordPress/ipsum/pull/171. See #66631. Co-Authored-By: Claude Opus 5.5 --- src/wp-content/themes/ipsum/functions.php | 39 ++++++++++------- src/wp-content/themes/ipsum/inc/abilities.php | 42 ++++++++++++++----- .../themes/ipsum/patterns/about-row.php | 2 +- .../themes/ipsum/patterns/cta-membership.php | 4 +- .../themes/ipsum/patterns/format-audio.php | 2 +- .../ipsum/patterns/gallery-grid-full.php | 18 ++++---- .../ipsum/patterns/gallery-grid-wide.php | 18 ++++---- .../themes/ipsum/patterns/gallery-grid.php | 22 +++++----- .../ipsum/patterns/gallery-offset-full.php | 18 ++++---- .../themes/ipsum/patterns/gallery-offset.php | 18 ++++---- .../themes/ipsum/patterns/kind-words.php | 4 +- .../themes/ipsum/patterns/overlay-profile.php | 2 +- .../themes/ipsum/patterns/page-bio.php | 2 +- .../themes/ipsum/patterns/page-soon.php | 4 +- .../ipsum/patterns/text-alternating.php | 6 +-- 15 files changed, 116 insertions(+), 85 deletions(-) diff --git a/src/wp-content/themes/ipsum/functions.php b/src/wp-content/themes/ipsum/functions.php index 59acef0b6b14d..424c874272f33 100644 --- a/src/wp-content/themes/ipsum/functions.php +++ b/src/wp-content/themes/ipsum/functions.php @@ -53,7 +53,7 @@ function ipsum_enqueue_styles() { 'ipsum-style', get_parent_theme_file_uri( 'style.css' ), array(), - wp_get_theme()->get( 'Version' ) + wp_get_theme( get_template() )->get( 'Version' ) ); // Enqueue theme stylesheet. @@ -69,21 +69,29 @@ function ipsum_enqueue_styles() { * * @since Ipsum 1.0 * - * @param array $source_args Block binding source arguments. - * @param WP_Block $block_instance The block instance. - * @return string The call to action text. + * @param array $source_args Block binding source arguments. Unused. + * @param WP_Block $block_instance The block instance. + * @return string|null The call to action text, an empty string when comments + * are closed, or null to keep the block's original content + * when there is no post. */ function ipsum_comments_cta_binding( $source_args, $block_instance ) { - $post_id = $block_instance->context['postId'] ?? get_the_ID(); + unset( $source_args ); // Unused, but must be accepted to get the block instance. - if ( ! comments_open( $post_id ) ) { + $post_id = $block_instance->context['postId'] ?? null; + $post = get_post( is_numeric( $post_id ) ? (int) $post_id : null ); + if ( ! $post ) { + return null; + } + + if ( ! comments_open( $post ) ) { return ''; } - $post_title = wp_strip_all_tags( get_the_title( $post_id ) ); + $post_title = wp_strip_all_tags( get_the_title( $post ) ); $has_title = ! empty( $post_title ); - if ( get_comments_number( $post_id ) > 0 ) { + if ( get_comments_number( $post ) > 0 ) { $text = $has_title ? sprintf( /* translators: %s: Post title. */ @@ -101,7 +109,7 @@ function ipsum_comments_cta_binding( $source_args, $block_instance ) { : __( 'Be the first to comment', 'ipsum' ); } - return '' . wp_kses_post( $text ) . ''; + return '' . wp_kses_post( $text ) . ''; } endif; @@ -133,8 +141,9 @@ function ipsum_register_block_bindings() { * * @since Ipsum 1.0 * - * @param array $default_template_types The default template types. - * @return array The template types, with the sidebar variants added. + * @param array> $default_template_types The default template types, keyed by + * slug, each with a title and description. + * @return array> The template types, with the sidebar variants added. */ function ipsum_sidebar_template_types( $default_template_types ) { $default_template_types['index-sidebar'] = array( @@ -182,12 +191,14 @@ function ipsum_register_pattern_categories() { * * @since Ipsum 1.0 * - * @param array $metadata Metadata for the block type being registered. - * @return array The block metadata, with ARIA label support on the Search block. + * @param array $metadata Metadata for the block type being registered. + * @return array The block metadata, with ARIA label support on the Search block. */ function ipsum_search_aria_label_support( $metadata ) { if ( isset( $metadata['name'] ) && 'core/search' === $metadata['name'] ) { - $metadata['supports']['ariaLabel'] = true; + $supports = isset( $metadata['supports'] ) && is_array( $metadata['supports'] ) ? $metadata['supports'] : array(); + $supports['ariaLabel'] = true; + $metadata['supports'] = $supports; } return $metadata; } diff --git a/src/wp-content/themes/ipsum/inc/abilities.php b/src/wp-content/themes/ipsum/inc/abilities.php index 8f5875ea658bd..e507a9cf38522 100644 --- a/src/wp-content/themes/ipsum/inc/abilities.php +++ b/src/wp-content/themes/ipsum/inc/abilities.php @@ -90,7 +90,12 @@ function ipsum_get_color_roles() { * * @since Ipsum 1.0 * - * @return array The output schema of the design guide ability. + * @return array The output schema of the design guide ability. + * @phpstan-return array{ + * type: 'object', + * additionalProperties: false, + * properties: array> + * } */ function ipsum_get_design_guide_schema() { $string = array( 'type' => 'string' ); @@ -254,14 +259,23 @@ function ipsum_get_design_guide_schema() { * * @since Ipsum 1.0 * - * @param array $presets The presets from the global settings, keyed by origin. + * @param mixed $presets The presets from the global settings, keyed by origin. * @param string[] $keys The preset properties to keep. - * @return array[] The presets, with only the given properties. + * @return array> The presets, with only the given properties. */ function ipsum_get_design_guide_presets( $presets, $keys ) { $items = array(); + if ( ! is_array( $presets ) ) { + return $items; + } foreach ( array( 'theme', 'custom' ) as $origin ) { - foreach ( $presets[ $origin ] ?? array() as $preset ) { + if ( ! isset( $presets[ $origin ] ) || ! is_array( $presets[ $origin ] ) ) { + continue; + } + foreach ( $presets[ $origin ] as $preset ) { + if ( ! is_array( $preset ) ) { + continue; + } $item = array(); foreach ( $keys as $key ) { if ( isset( $preset[ $key ] ) ) { @@ -315,7 +329,7 @@ static function ( $block ) { } ) ); - if ( 1 === count( $blocks ) && 'core/pattern' === $blocks[0]['blockName'] && ! empty( $blocks[0]['attrs']['slug'] ) ) { + if ( 1 === count( $blocks ) && 'core/pattern' === $blocks[0]['blockName'] && isset( $blocks[0]['attrs']['slug'] ) && is_string( $blocks[0]['attrs']['slug'] ) && '' !== $blocks[0]['attrs']['slug'] ) { return $blocks[0]['attrs']['slug']; } return null; @@ -334,7 +348,7 @@ static function ( $block ) { * * @type string[] $fields Optional. The sections to return. Default all of them. * } - * @return array The design guide. + * @return array The design guide, keyed by section. */ function ipsum_get_design_guide( $input = array() ) { $sections = array_keys( ipsum_get_design_guide_schema()['properties'] ); @@ -364,7 +378,7 @@ function ipsum_get_design_guide( $input = array() ) { $roles = ipsum_get_color_roles(); $guide['colors'] = array(); foreach ( ipsum_get_design_guide_presets( $settings['color']['palette'] ?? array(), array( 'slug', 'name', 'color' ) ) as $color ) { - if ( isset( $color['slug'], $roles[ $color['slug'] ] ) ) { + if ( isset( $color['slug'] ) && is_string( $color['slug'] ) && isset( $roles[ $color['slug'] ] ) ) { $color['role'] = $roles[ $color['slug'] ]; } $guide['colors'][] = $color; @@ -382,7 +396,8 @@ function ipsum_get_design_guide( $input = array() ) { if ( isset( $sections['typography'] ) ) { $body_font = ipsum_get_design_guide_font_slug( $styles['typography']['fontFamily'] ?? '' ); $block_fonts = array(); - foreach ( $styles['blocks'] ?? array() as $block_type => $block_styles ) { + $blocks = $styles['blocks'] ?? null; + foreach ( is_array( $blocks ) ? $blocks : array() as $block_type => $block_styles ) { $block_font = ipsum_get_design_guide_font_slug( $block_styles['typography']['fontFamily'] ?? '' ); if ( null !== $block_font && $block_font !== $body_font ) { $block_fonts[ $block_font ][] = $block_type; @@ -427,8 +442,13 @@ function ipsum_get_design_guide( $input = array() ) { if ( ! empty( $variation_styles['elements']['heading']['typography']['fontFamily'] ) ) { $item['headingFont'] = ipsum_get_design_guide_font_slug( $variation_styles['elements']['heading']['typography']['fontFamily'] ); } - if ( ! empty( $variation_styles['blocks'] ) ) { - $item['blocks'] = array_map( 'array_keys', $variation_styles['blocks'] ); + if ( ! empty( $variation_styles['blocks'] ) && is_array( $variation_styles['blocks'] ) ) { + $item['blocks'] = array_map( + static function ( $block_styles ) { + return is_array( $block_styles ) ? array_keys( $block_styles ) : array(); + }, + $variation_styles['blocks'] + ); } $guide['styleVariations'][] = $item; } @@ -459,7 +479,7 @@ function ipsum_get_design_guide( $input = array() ) { ); $guide['patterns'] = array(); foreach ( WP_Block_Patterns_Registry::get_instance()->get_all_registered() as $pattern ) { - if ( empty( $pattern['filePath'] ) || ! in_array( wp_normalize_path( dirname( $pattern['filePath'] ) ), $theme_pattern_dirs, true ) ) { + if ( ! isset( $pattern['filePath'] ) || ! is_string( $pattern['filePath'] ) || '' === $pattern['filePath'] || ! in_array( wp_normalize_path( dirname( $pattern['filePath'] ) ), $theme_pattern_dirs, true ) ) { continue; } $item = array( diff --git a/src/wp-content/themes/ipsum/patterns/about-row.php b/src/wp-content/themes/ipsum/patterns/about-row.php index 0b4e0ec03a1f4..773f812007a11 100644 --- a/src/wp-content/themes/ipsum/patterns/about-row.php +++ b/src/wp-content/themes/ipsum/patterns/about-row.php @@ -29,7 +29,7 @@
-
<?php esc_attr_e( 'Portrait of the author.', 'ipsum' ); ?>
+
<?php esc_attr_e( 'Portrait of the author.', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/cta-membership.php b/src/wp-content/themes/ipsum/patterns/cta-membership.php index ff099e13128f6..d3fde018027a5 100644 --- a/src/wp-content/themes/ipsum/patterns/cta-membership.php +++ b/src/wp-content/themes/ipsum/patterns/cta-membership.php @@ -13,8 +13,8 @@ ?>
-
-
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/format-audio.php b/src/wp-content/themes/ipsum/patterns/format-audio.php index 096230582434b..45503dbd5e155 100644 --- a/src/wp-content/themes/ipsum/patterns/format-audio.php +++ b/src/wp-content/themes/ipsum/patterns/format-audio.php @@ -14,7 +14,7 @@
-
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/gallery-grid-full.php b/src/wp-content/themes/ipsum/patterns/gallery-grid-full.php index 3869801a8dd97..1956fe7f4c13a 100644 --- a/src/wp-content/themes/ipsum/patterns/gallery-grid-full.php +++ b/src/wp-content/themes/ipsum/patterns/gallery-grid-full.php @@ -26,39 +26,39 @@ -
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred plastic chair seen from behind, in iridescent pastel tones.', 'Alt text for the back view of the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair seen from behind, in iridescent pastel tones.', 'Alt text for the back view of the monobloc chair image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'Metal cylinders standing on a gray surface.', 'Alt text for the studio close-up image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Metal cylinders standing on a gray surface.', 'Alt text for the studio close-up image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/gallery-grid-wide.php b/src/wp-content/themes/ipsum/patterns/gallery-grid-wide.php index 5e5a525bd61c2..bfca1a10dddfa 100644 --- a/src/wp-content/themes/ipsum/patterns/gallery-grid-wide.php +++ b/src/wp-content/themes/ipsum/patterns/gallery-grid-wide.php @@ -26,39 +26,39 @@ -
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred plastic chair seen from behind, in iridescent pastel tones.', 'Alt text for the back view of the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair seen from behind, in iridescent pastel tones.', 'Alt text for the back view of the monobloc chair image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'Metal cylinders standing on a gray surface.', 'Alt text for the studio close-up image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Metal cylinders standing on a gray surface.', 'Alt text for the studio close-up image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/gallery-grid.php b/src/wp-content/themes/ipsum/patterns/gallery-grid.php index 1420c34bb2e1a..7cea2a5aa831c 100644 --- a/src/wp-content/themes/ipsum/patterns/gallery-grid.php +++ b/src/wp-content/themes/ipsum/patterns/gallery-grid.php @@ -26,47 +26,47 @@ -
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred plastic chair seen from behind, in iridescent pastel tones.', 'Alt text for the back view of the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair seen from behind, in iridescent pastel tones.', 'Alt text for the back view of the monobloc chair image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'Metal cylinders standing on a gray surface.', 'Alt text for the studio close-up image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Metal cylinders standing on a gray surface.', 'Alt text for the studio close-up image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A blurred figure walking past an orange facade.', 'Alt text for the facade image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred figure walking past an orange facade.', 'Alt text for the facade image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A black ribbon-like sculpture curving across a pale background.', 'Alt text for the sculpture image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A black ribbon-like sculpture curving across a pale background.', 'Alt text for the sculpture image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/gallery-offset-full.php b/src/wp-content/themes/ipsum/patterns/gallery-offset-full.php index a9f97ad206108..21744dee2478c 100644 --- a/src/wp-content/themes/ipsum/patterns/gallery-offset-full.php +++ b/src/wp-content/themes/ipsum/patterns/gallery-offset-full.php @@ -15,7 +15,7 @@
-
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
@@ -23,7 +23,7 @@ -
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
@@ -31,7 +31,7 @@ -
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
@@ -41,7 +41,7 @@ -
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
@@ -49,7 +49,7 @@ -
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
@@ -57,13 +57,13 @@ -
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
@@ -71,7 +71,7 @@ -
<?php echo esc_attr_x( 'A desk fan blurred mid-spin against a blue background.', 'Alt text for the desk fan image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A desk fan blurred mid-spin against a blue background.', 'Alt text for the desk fan image', 'ipsum' ); ?>
@@ -79,7 +79,7 @@ -
<?php echo esc_attr_x( 'A person in profile, in shadow against a blue sky.', 'Alt text for the editorial portrait image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A person in profile, in shadow against a blue sky.', 'Alt text for the editorial portrait image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/gallery-offset.php b/src/wp-content/themes/ipsum/patterns/gallery-offset.php index 4f5022d5e9d8e..04f022ca18a11 100644 --- a/src/wp-content/themes/ipsum/patterns/gallery-offset.php +++ b/src/wp-content/themes/ipsum/patterns/gallery-offset.php @@ -15,7 +15,7 @@
-
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A dark metal tabletop on a single thin leg against a hazy sky.', 'Alt text for the metal table image', 'ipsum' ); ?>
@@ -23,7 +23,7 @@ -
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A black staircase climbing a white wall.', 'Alt text for the staircase image', 'ipsum' ); ?>
@@ -31,7 +31,7 @@ -
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A glowing pendant lamp above a warm orange room.', 'Alt text for the pendant lamp image', 'ipsum' ); ?>
@@ -41,7 +41,7 @@ -
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A blurred plastic chair in blue and cream tones.', 'Alt text for the monobloc chair image', 'ipsum' ); ?>
@@ -49,7 +49,7 @@ -
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Rows of glossy black hollow cones catching the light.', 'Alt text for the polygons image', 'ipsum' ); ?>
@@ -57,13 +57,13 @@ -
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'The number 27 fading into blue and pink light.', 'Alt text for the lead letter image', 'ipsum' ); ?>
-
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A capital A pressed into brushed metal.', 'Alt text for the capital letter image', 'ipsum' ); ?>
@@ -71,7 +71,7 @@ -
<?php echo esc_attr_x( 'A desk fan blurred mid-spin against a blue background.', 'Alt text for the desk fan image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A desk fan blurred mid-spin against a blue background.', 'Alt text for the desk fan image', 'ipsum' ); ?>
@@ -79,7 +79,7 @@ -
<?php echo esc_attr_x( 'A person in profile, in shadow against a blue sky.', 'Alt text for the editorial portrait image', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'A person in profile, in shadow against a blue sky.', 'Alt text for the editorial portrait image', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/kind-words.php b/src/wp-content/themes/ipsum/patterns/kind-words.php index 5d8aee38dcf48..1190a771788ee 100644 --- a/src/wp-content/themes/ipsum/patterns/kind-words.php +++ b/src/wp-content/themes/ipsum/patterns/kind-words.php @@ -14,7 +14,7 @@
-
<?php echo esc_attr_x( 'Black-and-white portrait of a woman with short curly hair in a dark blazer.', 'Alt text for a reader portrait', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Black-and-white portrait of a woman with short curly hair in a dark blazer.', 'Alt text for a reader portrait', 'ipsum' ); ?>
@@ -26,7 +26,7 @@
-
<?php echo esc_attr_x( 'Black-and-white portrait of a smiling woman with curly hair.', 'Alt text for a reader portrait', 'ipsum' ); ?>
+
<?php echo esc_attr_x( 'Black-and-white portrait of a smiling woman with curly hair.', 'Alt text for a reader portrait', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/overlay-profile.php b/src/wp-content/themes/ipsum/patterns/overlay-profile.php index ce84d01dfcaa4..50973a3a903c4 100644 --- a/src/wp-content/themes/ipsum/patterns/overlay-profile.php +++ b/src/wp-content/themes/ipsum/patterns/overlay-profile.php @@ -19,7 +19,7 @@
-
<?php esc_attr_e( 'Portrait of the author.', 'ipsum' ); ?>
+
<?php esc_attr_e( 'Portrait of the author.', 'ipsum' ); ?>
diff --git a/src/wp-content/themes/ipsum/patterns/page-bio.php b/src/wp-content/themes/ipsum/patterns/page-bio.php index 5da432fe4ae3a..4ac1d23cccdc9 100644 --- a/src/wp-content/themes/ipsum/patterns/page-bio.php +++ b/src/wp-content/themes/ipsum/patterns/page-bio.php @@ -18,7 +18,7 @@