Skip to content

Develop to main sync for 2.5.0 release - #2238

Merged
subodhr258 merged 15 commits into
mainfrom
develop
Oct 22, 2026
Merged

subodhr258 merged 15 commits into
mainfrom
develop

Conversation

@subodhr258

@subodhr258 subodhr258 commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

Develop to main sync for the 2.5.0 release. Merge as a merge commit (sync PR, not squash), then tag 2.5.0 on main.

Release ticket: rtCamp/godam-plugin-wp#60 · QA sign-off: https://github.com/rtCamp/godam-plugin-wp/issues/60#issuecomment-6339640330 (signed off on the build of develop at c07bb5dd0, which is this PR's head).

What ships

What changed for code that builds on GoDAM

  • Nothing removed or renamed since 2.4.1: no hook, filter or REST route is gone (diff of PHP and JS, built files excluded).
  • One page value removed: videoAnalyticsParams.emailId and godamData.currentLoggedInUserData.email are no longer printed (Stop sending the signed-in viewer's email with video analytics #2213). Code that read them gets undefined.
  • godam_video_seo_schema_cleared now passes a second argument, $had_schema. GoDAM for Woo listens with one argument, so it keeps working.
  • New filters: godam_video_seo_content_url, godam_video_seo_description, godam_video_seo_embed_url, godam_video_seo_key_moments, godam_video_seo_key_moments_enabled, godam_video_sitemap_enabled, godam_video_sitemap_entries_per_page, godam_video_sitemap_entry, godam_video_sitemap_exclude_post, godam_video_sitemap_post_types.

Data changes

Change When it runs Undone by going back to 2.4.1?
Every audio/mp3 attachment becomes audio/mpeg (#2208) Once, on the first request after updating; each subsite on a multisite No. Harmless: audio/mpeg is WordPress's own MP3 type
Sitemap switch rtgodam-settings['seo']['enable_video_sitemap'] Off by default; set from GoDAM > Settings > SEO Ignored by 2.4.1
Option godam_video_sitemap_cache_version When the sitemap's cached pages are cleared Ignored by 2.4.1
Option godam_video_seo_resave_queue, cron event godam_video_seo_resave_batch, post meta _godam_seo_legacy_resave Re-saves the search data of older pages with videos, 10 per run, when they are viewed Ignored by 2.4.1
Post meta _godam_seo_transcript_excerpt Caches a transcript excerpt used as a fallback description Ignored by 2.4.1

The sitemap needs no permalink flush: GoDAM answers /godam-video-sitemap.xml itself in parse_request, and handles plain permalinks too.

After release, on a live site

  1. Update from 2.4.1: the What's New screen shows the 2.5 release post, and GoDAM > Settings > SEO shows "Enable video sitemap" off.
  2. Turn it on: /godam-video-sitemap.xml lists the pages with videos and appears in the SEO plugin's sitemap index.
  3. A page with a chaptered video of 30 seconds or more: its VideoObject has hasPart clips, and Google's Rich Results Test finds the video.
  4. Block editor > Inserter > Media > Audio lists converted MP3s.
  5. A signed-in viewer's page source has no email address.

To back out: point Stable tag in SVN trunk's readme.txt back to 2.4.1 so sites that have not updated stay there, or ship 2.5.1. The MP3 type change stays, and is harmless.

Checked on this head

  • Version 2.5.0 in godam.php (header and RTGODAM_VERSION), readme.txt and README.md (Stable tag), package.json and package-lock.json. Changelog dated October 22, 2026 in readme.txt and CHANGELOG.md; readme.txt keeps the last three entries.
  • No @since n.e.x.t left. Tested up to: 7.1 covers WordPress 7.1.3.
  • QA signed off this exact head; see the link above.
  • The POT check runs on this PR (it only runs on PRs into main, ci: run the POT check only on PRs into main #2188).

KMchaudhary and others added 15 commits October 16, 2026 16:53
Main to Develop branch sync after v2.4.0 release
* Fix: stop the admin menu jumping when a GoDAM page loads

pages/style.css restores Tailwind's border reset for every element on the
page. It is injected by page-css.min.js after the page has painted, and
core's a { transition: border .05s } then animates each admin menu link's
border from 3px to 0: every item grows from 34px to 40px and the whole
menu jumps by about 186px, then snaps back. Keep the reset off
#adminmenumain and #wpadminbar.

* Fix: open the Media Editor with the admin menu already folded

The editor folds the menu from React after the page has painted, so the
menu showed at full width and then collapsed. Add the folded body class
on the server when the editor opens a file.

* Keep the reset off the menu and admin bar containers too; test the editor fold

- pages/style.css also excludes #adminmenumain and #wpadminbar themselves,
  not only their descendants.
- MediaEditorMenuFoldTest: the Media Editor with an id gets 'folded';
  its file picker, other GoDAM pages, the Media Library and no screen
  do not.

* Regenerate the POT: 12 references into class-pages.php moved down

Line numbers only; no strings added or changed. Built like CI: Node
22.14.0, npm ci, npm run build:prod, composer pot.
* feat(seo): fix VideoObject schema and add video sitemap (#1622 v1)

Make GoDAM's video schema indexable by Google and add a video sitemap
that plugs into Yoast SEO, Rank Math, All in One SEO or the WordPress
core sitemap. No new public URLs are created.

- Schema contentUrl now uses the HLS (.m3u8) stream, falling back to the
  original file; the DASH .mpd is never output. Resolved at output time,
  so pages cached before this change are fixed without a re-save.
- Add embedUrl pointing at GoDAM's existing video-embed player page.
- Never output an empty description: fall back to a 160-char transcript
  excerpt (fetched on save only, cached in _godam_seo_transcript_excerpt),
  then the page excerpt, otherwise omit the property.
- Output isFamilyFriendly as a real JSON boolean (string values such as
  "false" are parsed correctly) and omit an empty uploadDate.
- Add Video_Sitemap: /godam-video-sitemap.xml with one <url> per
  published page and one <video:video> per video, built from the cached
  video SEO post meta via the shared schema builder so both always agree.
- Exclude drafts, private and password-protected posts, pages noindexed
  in Yoast / Rank Math / AIOSEO, and videos the editor excludes.
- List the sitemap in the Yoast, Rank Math and AIOSEO indexes, or via a
  core sitemap provider when none is active; paginate at 1000 URLs,
  cache per site with version-based invalidation.
- Add GoDAM > Settings > SEO with an "Enable video sitemap" toggle (off
  by default) and a per-video "Exclude from video sitemap" toggle in
  Gutenberg, Elementor and WPBakery.
- Warn editors in all three editors when a video title looks like a
  raw file name.
- Prefer the HLS URL when prefilling SEO contentUrl in the editors.
- Add new filters: godam_video_seo_content_url, godam_video_seo_embed_url,
  godam_video_seo_description, godam_video_sitemap_enabled,
  godam_video_sitemap_entries_per_page, godam_video_sitemap_post_types,
  godam_video_sitemap_exclude_post, godam_video_sitemap_entry.
- Add PHPUnit coverage (VideoSeoSchemaTest, VideoSitemapTest) and Jest
  tests for the filename-title check.

* Resolve feedback

* Resolve feedbacks and regenrate POT file

* Revert the POT file

* Resolve Privacy Issue

* feat(seo): add key moments to video schema from chapters (#1597) (#2194)

Output each GoDAM video chapter as a schema.org Clip in the VideoObject's
hasPart, so Google can show "key moments" (jump-to links) for the video
in search results.

- Add Seo::get_key_moment_clips(): reads the chapters from the
  attachment's rtgodam_meta at output time, so editing chapters updates
  the schema without re-saving the page.
- Each Clip has name, startOffset, endOffset and a deep link of the form
  <page>?t=<seconds>#godam-video-<attachment id>, which the GoDAM player
  already uses to seek on page load.
- A clip ends at the chapter's own endTime, else the next chapter's
  start, else the video duration (clamped to the duration when known).
- Skip chapters with no title, an unreadable start, a start at or past
  the end of the video, or zero length; drop duplicate start times;
  strip HTML from chapter names.
- Parse chapter times as plain seconds, mm:ss or hh:mm:ss(.ms), falling
  back to originalTime when startTime is missing.
- Build clip URLs without add_query_arg(): use & on plain permalinks and
  drop any existing fragment from the page URL.
- Only add hasPart when the video has an attachment and a host page
  (render-time output on archives/404 has nothing to deep-link to).
- Add filters godam_video_seo_key_moments_enabled and
  godam_video_seo_key_moments.
- Move ISO 8601 duration parsing to Seo::iso8601_to_seconds();
  Video_Sitemap::iso8601_duration_to_seconds() now delegates to it.
- Add VideoSeoKeyMomentsTest (27 tests) and a get_permalink() test stub.

* Match WPBakery SEO Settings to Gutenberg Model (#2209)
* ci: run the POT check only on the develop → main merge

Feature PRs into develop no longer have to regenerate languages/godam.pot.
The release PR from develop into main still fails if the committed POT is
stale. PRs into main from any other branch skip the job.

* ci: run the POT check on every PR into main

Patch releases reach main from fix and hotfix branches, not only from
develop, so they need the check too. The branches: [main] trigger
already keeps it off feature PRs into develop.
Cast the layer id to an integer in the preview template and in the Ninja Forms
and MetForm callbacks, and add unit tests for it.
)

* Keep the Gravity Forms recorder working after an AJAX page change

Gravity Forms replaces a page's markup on every AJAX page change or failed
submit. The recorder kept pointing at the replaced container, file input and
button, and Uppy had bound its dashboard trigger once to the old button, so
Start Recording opened nothing on the new page.

On every gform_post_render, an uploader whose markup left the page now finds
the new container by its id, reads the input and button from it, binds the
new button once and shows the recording it holds again.

* Regenerate the translation template for the recorder's moved lines
* Stop sending the signed-in viewer's email with video analytics

The page params that GoDAM prints on every front-end page no longer carry
the current user's email address (`emailId`), and the analytics request body
no longer has an `email` field. The WordPress user id is still sent.

Tests: the request-body helper and the page params are both checked for the
absence of the email, including a page cached by an older version.

* Remove the viewer's email from the analytics data listed in the readme

The analytics.godam.io entry under External services no longer lists Email as data sent.

* Keep the signed-in viewer's email out of the player's page data

The player script's page data (godamData.currentLoggedInUserData) carried the current user's email address, which nothing in the browser reads. It now holds the display name and whether someone is signed in. The comments routes still read the email on the server.

* Keep the fixture lines untouched in the JS test

The explanation moves into the test, so the fixture lines this branch leaves alone cannot conflict with the sibling change.

* List the page's user fields instead of removing one

rtgodam_get_current_user_data_for_page() now returns only the display name and the sign-in type, so a field added later to the server-side user data is not printed into the page by accident.

* Regenerate the POT for the new line numbers

The new helper in custom-functions.php moves five strings further down the file, so their source references change. Nothing else in the file differs from develop.
…e link, show share button for all videos (#2211)

* Clean up video share popup links and share button gating

- Remove the redundant GoDAM Central and Embed copy fields from the share
  modal footer, keeping only the Page Link field.
- Point the social share links at the WordPress page link instead of the
  GoDAM Central URL, which is private by default and shows a login prompt.
- Show the share button for all videos when sharing is enabled in the
  block settings, instead of only transcoded videos.

Closes #2210

* Address review: keep share anchor and gate button on an ID

- Encode the share link with encodeURIComponent so the #godam-video-{id}
  anchor and any query param travel with the social share URL instead of
  splitting off (encodeURI left #, ? and & intact).
- Hide the share button for players with neither a WordPress attachment ID
  nor a transcoding job ID ("Insert from URL" embeds), since their share
  link could not target the video.
- Remove stale README references to the removed GoDAM Central/Embed links
  and correct the ID described for share links.

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>
…s audio/mp3 (#2208)

* Fix: store transcoded MP3 audio as audio/mpeg, not audio/mp3

WordPress registers MP3 as audio/mpeg. Attachments saved as audio/mp3
were left out of REST media_type=audio, and REST ignored a
mime_type=audio/mp3 filter. New conversions are saved as audio/mpeg,
and a one-time migration (2.4.1 batch) fixes the ones saved before.

* Test the saved type, satisfy the hook-integrity check, retry a failed SELECT

- TranscodedAudioMimeTypeTest calls add_transcoded_files() and checks
  that converted audio is saved as audio/mpeg (video stays video/mp4).
  With the old audio/mp3 it fails.
- add_transcoded_files() starts $transcoded_files as array(), not false;
  PHP 8.1+ reported every conversion as a deprecated false-to-array use.
- The migration's two direct queries carry godam-coverage-ignore: the
  runner already runs it once per site.
- A failed SELECT now returns false so the runner retries, instead of
  marking the site done with nothing changed.
- The runner test checks batch order instead of which batch is last.

* Run the MP3 type migration in the 2.5.0 batch

2.4.1 ships without this change but still stores 2.4.1 as each site's
migration version, and the runner skips batches at or below the stored
version. Keyed 2.4.1, the migration would never run on sites that update
through 2.4.1; keyed 2.5.0 it runs for both 2.4.0 and 2.4.1 sites.
Brings the 2.4.1 transcript panel fix (#2224) and the 2.4.1 version and
changelog into develop. languages/godam.pot was the only conflict; it is
regenerated from a clean production build of the merged code.
…d searchable, and release prep (#2224) (#2230)

* Give the transcript panel its own space, a dark skin palette and search

The open transcript panel was an overlay on the right of the video: it hid
~38% of a 16:9 frame, all of a 9:16 one, and the layers under it. It now
takes its own space. Inline and in the lightbox the stage keeps its height
and the video shrinks beside the panel (letterboxed, never cropped); a
portrait video widens toward 16:9 when the column has room, and otherwise
the panel stacks beneath the video. In fullscreen the video, controls and
layers are confined to the area beside the panel, and hotspots measure the
video's own box so they stay on target.

The panel is dark by default with per-skin tokens and the control bar
colour as its accent, has a search field that narrows and highlights cues
(click-to-seek still works), scrolls only its own list, and drops the slide
and smooth scroll under prefers-reduced-motion.

Fixes #2219

* Keep theme button and input resets out of the transcript panel

* Stack the transcript under a 16:9 video in a typical content column

Beside the panel, a 16:9 video in a 600-720px column shrank below 480px,
where the player switches to its compact control layout. The panel now
goes beside the video only while the video stays at least 480px wide or
keeps 75% of its size (a portrait video that widens the block keeps 100%),
and stacks beneath it otherwise.

* Show an uploaded .srt transcript to visitors

The media editor's Transcription tab accepts .vtt and .srt, but the
player loads the transcript into a text track, which only parses WebVTT.
An .srt therefore gave visitors no captions and no transcript panel,
while the editor (which parses the file itself) showed it fine.

An .srt URL is now fetched once, parsed with the existing parseCaptions,
and handed to both the captions track and the transcript panel as a
WebVTT blob URL. Anything else, or any failure, keeps the original URL.

* Fix review findings in the transcript panel layout

- Close the panel when the lightbox closes, so the inline poster does not
  keep the lightbox layout (shrunk player, widened root).
- Give layers the player's box in the side layout: hotspots were placed from
  the video's size but drawn from the stage's top, so they sat too high
  whenever the video was letterboxed.
- Keep a closed panel hidden and inert, skip hidden/inert ancestors in the
  lightbox focus trap, and return focus to the toggle when the panel closes
  from inside.
- In the lightbox (which cannot scroll), shrink the video so it and a panel
  beneath it both fit the height cap.
- Fullscreen: keep the control bar beside the panel (centred Pills/Bubble
  bars) and above it on a portrait screen.
- Search matches across a cue's line breaks and indexes the displayed text.
- 16px search field (no iOS focus zoom), an always-rendered live region, and
  inner-block overlays kept off the panel when stacked or right-to-left.

* Regenerate the POT for the transcript search strings

* Use a plain split for the WebVTT arrow in converted .srt cues

CodeQL read the /-->/g replace as HTML comment filtering. It is WebVTT
cue syntax, so a split/join says that more plainly and clears the alert.

* Release prep v2.4.1: version bump and changelog

- readme.txt and CHANGELOG.md: v2.4.1 (October 20, 2026) entry; readme.txt
  drops the v2.3.1 entry so it keeps the last three.
- Stable tag 2.4.1 in readme.txt and README.md; Tested up to stays 7.1.
- godam.php header and RTGODAM_VERSION, package.json, package-lock.json.
- No @SInCE n.e.x.t placeholders to resolve.

* Regenerate the POT for v2.4.1

* Stack the transcript under the video in a Row or Grid group

In a flex or grid parent the block root is an item: widening it (a 9:16
video, or a 16:9 one with spare row width) only got it squeezed by its
siblings, so the video collapsed to 0px and the panel ran over the text
beside it. measureLayout() now gives no room to widen there, and the
panel stacks beneath the video.

transcriptPanelManager.test.js drives measureLayout() in jsdom for a
normal column and for flex, inline-flex, grid and inline-grid parents.

* Centre the compact skip buttons on the video in fullscreen with the transcript open

On a narrow player, moveVideoControls() places the skip buttons (and the
Pills centre controls) from the player's size. In portrait fullscreen with
the transcript open the control bar sits on the video's bottom edge, above
the panel, while the player still spans the screen, so the buttons landed
at the top of the screen. They are now placed from the video element's own
box, which matches the player everywhere else.

Closing the panel also clears its layout signature, so reopening it in
fullscreen re-places the controls again.

controlsManager.test.js covers a video that fills the player and one above
an open panel, for the Default and Pills skins.

* Expand the 2.4.1 changelog: transcript layout and .srt captions

Two Fix lines instead of one: what the transcript panel now does, and that .srt transcripts now reach visitors.

* Hide the transcript button while the panel is open

The panel has its own close button, so the toggle is hidden while it is
open and shown again when it closes. If the toggle had focus, focus moves
to the close button, so it stays inside the panel (and the lightbox);
closing hands it back to the toggle, which is shown (and keeps its active
class) until it has taken it. The skins set the button's display, so a
[hidden] rule makes the attribute stick.

The panel's copy and close buttons keep their resting look when focus
came from a click, so the close button does not read as hovered after a
click opens the panel. Keyboard focus and hover still highlight them.

Three tests cover hiding and showing the toggle and where focus goes.

* Retry a failed .srt conversion, and compile the search once per query

toWebVttTrackSrc() cached the conversion promise per URL before knowing
the result, so a one-off failed fetch left the captions and the transcript
panel on the raw .srt (no cues) until the page reloaded. The promise is
still shared, so both tracks fetch once, but a fallback result is dropped
from the cache when it settles and the next request fetches again.

Search built a RegExp for every cue on every keystroke. findMatchRanges()
is split into compileQuery() and matchRanges(), and filterCues() compiles
the query once.

* Keep a lightbox video usable with the transcript open, and fit tall videos in Safari's lightbox

Phone lightbox: with the transcript stacked under a 9:16 video, the video
shrank to half the height cap (202px wide on a 393px phone), where its
skip buttons overlap. It now stays at least 300px wide (or its closed
width, if narrower), and the panel gives up height for it down to 160px.
Videos that already fit, such as 16:9, are unchanged.

Safari lightbox: .godam-player-modal-item relied on width: auto, a max
height and an aspect ratio to size the player. Safari does not carry the
height cap through the ratio into the width, so a tall video rendered at
the wrapper width and was cut off at the bottom. Its max-width is now also
capped at the height cap times the ratio, the width the close button's
offset already uses.

Changelog: adds the Safari fix.

* Regenerate the POT: source line references moved

Only the transcriptPanelManager.js line references changed since 768c707; no strings were added or removed.

* Keep captions clear of the two-row control bar on narrow players

On a Default-skin player 480px wide or less the control bar is two rows,
the progress bar above the buttons, and 6em tall, while the captions sat
4em from the bottom, so their box ran over the progress bar whenever the
controls showed (in the lightbox and inline). They now sit 6em up there.
Wider players are unchanged.

* Add the caption fix to the 2.4.1 changelog

* Keep the lightbox height steady while the mobile toolbar shows and hides

The lightbox height cap used dvh, which follows the mobile browser's
toolbar, so the video (and, with the transcript open, the panel) resized
whenever the toolbar showed or hid. It now uses svh, the viewport with the
toolbar showing, which does not change; vh stays the fallback. Desktop is
unchanged. The cap dates from #2051.

Changelog: adds the fix.

* Revert "Keep the lightbox height steady while the mobile toolbar shows and hides"

This reverts commit bc1d272. The svh change goes into 2.5.0 instead.
- Version 2.5.0 in godam.php, readme.txt, README.md, package.json and package-lock.json.
- v2.5.0 changelog in readme.txt and CHANGELOG.md; v2.3.2 removed from readme.txt to keep the last three.
- Every @SInCE n.e.x.t replaced with 2.5.0 (51 tags in 6 files).
- languages/godam.pot regenerated from a production build.
…2232)

- class-video-sitemap.php: the phpcs:ignore named slow_query_meta_key, which is not a sniff, so it ignored nothing. Use slow_db_query_meta_key.
- class-video-sitemap-core-provider.php: ignore NonPrefixedHooknameFound on WordPress core's own wp_sitemaps_index_entry filter.
…#2235)

* Keep page-builder shortcode text out of the video sitemap description

The sitemap is served at parse_request priority 1, before WPBakery and Divi
register their shortcodes, so core's strip_shortcodes() left tags such as
[vc_row] in the fallback description taken from the page text. Add the tag
names found in the text to strip_shortcodes()'s own list so unregistered
shortcodes are removed the same way registered ones are, which gives the same
description in the sitemap and on the front end.

The strip_shortcodes() test stub removed every [tag], which hid the bug. It now
follows core: only registered shortcodes are removed.

* Only strip builder-style unregistered shortcode names from the fallback description

Review of the first version found that it also removed ordinary bracketed text
([sic], [1], [b]bold[/b]) from the front-end description, that one very long
bracketed word made core's pattern too large and the description empty, that a
tag another filter had taken off the strip list was re-added, and that the
filter stayed registered if stripping threw.

Only names that look like a builder tag are added now (a letter first, an
underscore or hyphen in the name, 64 characters at most), tags that are
registered are left to core, and the filter is removed in a finally block.
New tests pin the cap, the length limit, the filter removal and the ordinary
bracketed text.
2.5.0 releases on 22 Oct (release ticket rtCamp/godam-plugin-wp#60), but readme.txt and CHANGELOG.md dated it October 21.
@subodhr258 subodhr258 self-assigned this Oct 22, 2026
@github-actions

Copy link
Copy Markdown

🔍 WordPress Plugin Check Report

⚠️ Status: Passed with warnings

📊 Report

🎯 Total Issues ❌ Errors ⚠️ Warnings
13 0 13

⚠️ Warnings (13)

📁 readme.txt (2 warnings)
📍 Line 🔖 Check 💬 Message
0 mismatched_plugin_name Plugin name "GoDAM - Organize WordPress Media Library & File Manager with Unlimited Folders for Images, Videos & more" is different from the name declared in plugin header "GoDAM".
0 trademarked_term The plugin name includes a restricted term. Your chosen plugin name - "GoDAM - Organize WordPress Media Library & File Manager with Unlimited Folders for Images, Videos & more" - contains the restricted term "wordpress" which cannot be used at all in your plugin name.
📁 assets/build/css/main.css (1 warning)
📍 Line 🔖 Check 💬 Message
0 EnqueuedStylesScope This style is being loaded in all contexts.
📁 assets/src/libs/analytics.min.js (5 warnings)
📍 Line 🔖 Check 💬 Message
0 EnqueuedScriptsScope This script is being loaded in all frontend contexts.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880 (with handle analytics-library) is loaded in the footer. Consider a defer or async script loading strategy instead.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880/2026/10/22/hello-world/ (with handle analytics-library) is loaded in the footer. Consider a defer or async script loading strategy instead.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880/sample-page/ (with handle analytics-library) is loaded in the footer. Consider a defer or async script loading strategy instead.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880/demo-attachment-post/ (with handle analytics-library) is loaded in the footer. Consider a defer or async script loading strategy instead.
📁 assets/build/js/main.min.js (5 warnings)
📍 Line 🔖 Check 💬 Message
0 EnqueuedScriptsScope This script is being loaded in all frontend contexts.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880 (with handle rtgodam-script) is loaded in the footer. Consider a defer or async script loading strategy instead.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880/2026/10/22/hello-world/ (with handle rtgodam-script) is loaded in the footer. Consider a defer or async script loading strategy instead.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880/sample-page/ (with handle rtgodam-script) is loaded in the footer. Consider a defer or async script loading strategy instead.
0 NonBlockingScripts.NoStrategy This script on http://localhost:8880/demo-attachment-post/ (with handle rtgodam-script) is loaded in the footer. Consider a defer or async script loading strategy instead.

🤖 Generated by WordPress Plugin Check Action • Learn more about Plugin Check

@subodhr258
subodhr258 merged commit d9b9888 into main Oct 22, 2026
12 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants