Skip to content

Main to Develop sync for v1.12.2 release (#1959)#1962

Merged
KMchaudhary merged 1 commit into
developfrom
main
Jun 17, 2026
Merged

Main to Develop sync for v1.12.2 release (#1959)#1962
KMchaudhary merged 1 commit into
developfrom
main

Conversation

@KMchaudhary

Copy link
Copy Markdown
Collaborator

Extended withVirtualAttachmentHandler HOC from core/image-only to all single-ID core media blocks (core/video, core/audio, core/file, core/cover, core/media-text), replacing the virtual GoDAM ID with the real WP attachment ID on the godam-virtual-attachment-created event.

For core/gallery, inner core/image blocks were not updated because the event fired before React effects on newly inserted inner blocks had registered. Fixed by adding replaceVirtualIdInCoreImageBlocks in godam-media-frame-shared.js, which walks the full block tree synchronously inside processGoDAMItem immediately after the REST API returns the real attachment — no reliance on event listener timing.

Also switched ID comparisons to String(x) === String(y) to guard against type mismatches between the numeric block attribute and the string GoDAM ID.

  • fix: add godam/audio and godam/pdf blocks virtual attachment id assignment

  • fix: enhance virtual ID replacement in nested core/image blocks for core/gallery block with error handling

  • fix: improve GoDAM gallery update handling with additional library validation

  • Potential fix for pull request finding

  • Potential fix for pull request finding


  • Replace preload control with performanceMode (balanced/priority) in the Elementor GoDAM Video widget; preload is now derived from performance mode via rtgodam_get_video_performance_settings(), consistent with the block
  • Add hoverSelect, showShareButton, engagements, playerHeight controls to the Elementor widget; engagements is gated by rtgodam_is_engagement_feature_enabled()
  • Set aspectRatio default to responsive in the widget (was empty string) so the template computes ratio from video metadata, matching block behaviour
  • Add hls_transcoded_url to godam_video shortcode attributes and remove the legacy preload attribute
  • Fix player wrapper inline CSS not rendering on admin pages and in AJAX/REST contexts (Elementor editor re-renders): hook into admin_head on admin pages and output immediately when wp_doing_ajax() or REST_REQUEST is true
  • fix: streamline inline CSS output for player wrapper in Elementor context

  • feat: enhance GoDAM Video widget with thumbnail picker, aspect ratio control, mute, and hover options support

  • feat: align gallery shortcode and Elementor widget with godam/gallery-v2 block

  • Extract shared inc/templates/godam-video-gallery.php; block, shortcode, REST endpoint, and Elementor widget all render through it.
  • Rewrite [godam_video_gallery] to delegate to the template; add mode, item_width, view_ratio, performance_mode, enable_more_items, ids; drop legacy columns/category/tag/search/include/align/css.
  • Align Elementor Godam_Gallery widget controls 1:1 with the block, add Handpicked mode via a Repeater, gate engagements behind the feature flag.
  • Skip non-video attachments defensively in the gallery video resolver.
  • Add Elementor_Gallery_Widget_V1_To_V2 migration to rewrite saved _elementor_data (columns→item_width, layout=list→grid, drop legacy keys).
  • feat: add Elementor support for GoDAM Gallery widget re-initialization

  • feat: add editor-side styles for Elementor controls and enhance GoDAM Gallery widget settings

  • Potential fix for pull request finding

  • fix: correct formatting of query arguments in Dynamic_Gallery class

  • fix: resolve GoDAM virtual media to real attachment id in Elementor widgets

Handle the godam-virtual-attachment-created event inside the shared godam-media control so a virtual GoDAM-tab selection swaps to the real attachment id. Covers GoDAM Video, GoDAM Video Gallery, and Shoppable Video widgets, including individual repeater rows.

  • fix: update widget icons and titles for GoDAM Audio, Gallery, and Video Elementor widgets

  • Misc bug fixes for GoDAM plugin (Misc bug fixes for GoDAM plugin #1937)

  • Fix hotspot overlaping over other hotspot layer popup

  • fix: add validation for non-video selections in GoDAM Video block

  • fix: add validation for non-audio selections in GoDAM Audio block

  • fix: restore vertical spacing for ToggleControl in block inspector across audio, gallery, and player blocks

  • Fix style and spacing issues for video editor


Added support for handpicked video items in the GoDAM Video Gallery shortcode, allowing users to specify videos directly via a URL-encoded JSON array.

  • Updated the WPBakery GoDAM Video Gallery element to include new parameters for enhanced video selection, including mode, media folder, author, and date range filters.
  • Improved the user interface for video and audio selectors by ensuring buttons are of type button to prevent unintended form submissions.
  • Refactored dropdown options for media folders and authors to provide clearer labeling and improved usability.
  • Enhanced documentation and comments throughout the code for better maintainability and clarity.
  • feat: enhance GoDAM Video widget with SEO settings and WPBakery integration

  • Apply suggestions from code review

  • feat: enhance gallery sorting options by adding duration and size parameters

  • Potential fix for pull request finding

  • fix: standardize whitespace in shortcode attribute parsing

  • feat: simplify element names for audio and video components in WPBakery




* Fix the virtual media creation for core/gallery block. Resolve virtual attachment id resolution for all core Blocks. (#1944)

* Fix the virtual media creation issue for core/gallery block

* fix: resolve virtual GoDAM ID for core media blocks and gallery inner blocks

Extended withVirtualAttachmentHandler HOC from core/image-only to all
single-ID core media blocks (core/video, core/audio, core/file, core/cover,
core/media-text), replacing the virtual GoDAM ID with the real WP attachment
ID on the godam-virtual-attachment-created event.

For core/gallery, inner core/image blocks were not updated because the
event fired before React effects on newly inserted inner blocks had
registered. Fixed by adding replaceVirtualIdInCoreImageBlocks in
godam-media-frame-shared.js, which walks the full block tree synchronously
inside processGoDAMItem immediately after the REST API returns the real
attachment — no reliance on event listener timing.

Also switched ID comparisons to String(x) === String(y) to guard against
type mismatches between the numeric block attribute and the string GoDAM ID.

* fix: add godam/audio and godam/pdf blocks virtual attachment id assignment

* fix: enhance virtual ID replacement in nested core/image blocks for core/gallery block with error handling

* fix: improve GoDAM gallery update handling with additional library validation

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* feat: align Elementor video widget with godam/video block and fix player wrapper CSS injection (#1927)

* feat: align Elementor video widget with godam/video block and fix player wrapper CSS injection

- Replace `preload` control with `performanceMode` (balanced/priority) in the
  Elementor GoDAM Video widget; preload is now derived from performance mode via
  `rtgodam_get_video_performance_settings()`, consistent with the block
- Add `hoverSelect`, `showShareButton`, `engagements`, `playerHeight` controls
  to the Elementor widget; `engagements` is gated by `rtgodam_is_engagement_feature_enabled()`
- Set `aspectRatio` default to `responsive` in the widget (was empty string)
  so the template computes ratio from video metadata, matching block behaviour
- Add `hls_transcoded_url` to `godam_video` shortcode attributes and remove
  the legacy `preload` attribute
- Fix player wrapper inline CSS not rendering on admin pages and in AJAX/REST
  contexts (Elementor editor re-renders): hook into `admin_head` on admin pages
  and output immediately when `wp_doing_ajax()` or `REST_REQUEST` is true

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: streamline inline CSS output for player wrapper in Elementor context

* feat: enhance GoDAM Video widget with thumbnail picker, aspect ratio control, mute, and hover options support

* feat: align gallery shortcode and Elementor widget with godam/gallery-v2 block

- Extract shared inc/templates/godam-video-gallery.php; block, shortcode,
  REST endpoint, and Elementor widget all render through it.
- Rewrite [godam_video_gallery] to delegate to the template; add mode,
  item_width, view_ratio, performance_mode, enable_more_items, ids; drop
  legacy columns/category/tag/search/include/align/css.
- Align Elementor Godam_Gallery widget controls 1:1 with the block, add
  Handpicked mode via a Repeater, gate engagements behind the feature flag.
- Skip non-video attachments defensively in the gallery video resolver.
- Add Elementor_Gallery_Widget_V1_To_V2 migration to rewrite saved
  _elementor_data (columns→item_width, layout=list→grid, drop legacy keys).

* feat: add Elementor support for GoDAM Gallery widget re-initialization

* feat: add editor-side styles for Elementor controls and enhance GoDAM Gallery widget settings

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: correct formatting of query arguments in Dynamic_Gallery class

* fix: resolve GoDAM virtual media to real attachment id in Elementor widgets

Handle the godam-virtual-attachment-created event inside the shared
godam-media control so a virtual GoDAM-tab selection swaps to the real
attachment id. Covers GoDAM Video, GoDAM Video Gallery, and Shoppable
Video widgets, including individual repeater rows.

* fix: update widget icons and titles for GoDAM Audio, Gallery, and Video Elementor widgets

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Misc bug fixes for GoDAM plugin (#1937)

* Fix hotspot overlaping over other hotspot layer popup

* fix: add validation for non-video selections in GoDAM Video block

* fix: add validation for non-audio selections in GoDAM Audio block

* fix: restore vertical spacing for ToggleControl in block inspector across audio, gallery, and player blocks

* Fix style and spacing issues for video editor

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>

* Enhance GoDAM Video, and GoDAM Video Gallery Shortcode and WPBakery Integration (#1954)

* Enhance GoDAM Video Gallery Shortcode and WPBakery Integration

 Added support for handpicked video items in the GoDAM Video Gallery shortcode, allowing users to specify videos directly via a URL-encoded JSON array.
- Updated the WPBakery GoDAM Video Gallery element to include new parameters for enhanced video selection, including mode, media folder, author, and date range filters.
- Improved the user interface for video and audio selectors by ensuring buttons are of type button to prevent unintended form submissions.
- Refactored dropdown options for media folders and authors to provide clearer labeling and improved usability.
- Enhanced documentation and comments throughout the code for better maintainability and clarity.

* feat: enhance GoDAM Video widget with SEO settings and WPBakery integration

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* feat: enhance gallery sorting options by adding duration and size parameters

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix: standardize whitespace in shortcode attribute parsing

* feat: simplify element names for audio and video components in WPBakery

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Fix the JS build error (#1957)

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>

* Release: Update version to 1.12.2 and add changelog (#1958)

* Release: Update version to 1.12.2 and add changelog

* Generate new POT file

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>

* Update migration version to 1.12.2 and add new migration classes (#1960)

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>

---------

Co-authored-by: KMchaudhary <kuldipkumar.chaudhary@rtcamp.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Subodh Rajpopat <subodh.rajpopat@rtcamp.com>
Copilot AI review requested due to automatic review settings June 17, 2026 06:44
@KMchaudhary KMchaudhary changed the title Develop to Main sync for v1.12.2 release (#1959) Main to Develop sync for v1.12.2 release (#1959) Jun 17, 2026
@github-actions

Copy link
Copy Markdown

🔍 WordPress Plugin Check Report

❌ Status: Failed

📊 Report

🎯 Total Issues ❌ Errors ⚠️ Warnings
18 2 16

❌ Errors (2)

📁 lib/class-godam-frappe-dispatch-installer.php (2 errors)
📍 Line 🔖 Check 💬 Message
302 PluginCheck.CodeAnalysis.WriteFile.PluginDirectoryWrite Plugin folders are deleted when upgraded. Do not save data to the plugin folder using unzip_file(). Detected usage of constant WP_PLUGIN_DIR. Use wp_upload_dir() to get the uploads directory path or save to the database instead.
347 PluginCheck.CodeAnalysis.WriteFile.PluginDirectoryWrite Plugin folders are deleted when upgraded. Do not save data to the plugin folder using copy_dir(). Detected usage of constant WP_PLUGIN_DIR. Use wp_upload_dir() to get the uploads directory path or save to the database instead.

⚠️ Warnings (16)

📁 composer.json (1 warning)
📍 Line 🔖 Check 💬 Message
0 missing_composer_json_file The "/vendor" directory using composer exists, but "composer.json" file is missing.
📁 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/blocks/godam-gallery-v2/render.php (2 warnings)
📍 Line 🔖 Check 💬 Message
15 WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$inner_block_video_ids".
23 WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound Global variables defined by a theme/plugin should start with the theme/plugin prefix. Found: "$inner_block_video_ids".
📁 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/06/17/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/demo-page-post/ (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/06/17/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/demo-page-post/ (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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR syncs develop into main for the v1.12.2 release, combining multiple fixes/features across Gutenberg blocks, media-library virtual attachment handling, Elementor/WPBakery integrations, and release metadata.

Changes:

  • Bump plugin/version metadata to 1.12.2 and add v1.12.2 changelog entries.
  • Align GoDAM Video Gallery rendering across block/shortcode/REST/Elementor/WPBakery via a shared PHP template + updated REST pagination.
  • Improve editor UX and reliability (virtual ID replacement for core blocks/gallery, Elementor widget re-init + thumbnail picker, hotspot hover/stacking fixes, toggle spacing fixes).

Reviewed changes

Copilot reviewed 43 out of 45 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
readme.txt Stable tag bump + changelog updates for 1.12.2.
README.md Stable tag bump to 1.12.2.
pages/video-editor/components/layers/HotspotLayer.js UI spacing tweak for hotspot tooltip field.
pages/video-editor/components/appearance/Appearance.js Switch skip-duration control to SelectControl.
package.json Version bump to 1.12.2.
package-lock.json Version bump to 1.12.2.
inc/templates/godam-video-gallery.php New shared gallery-v2 render template + helper functions.
inc/templates/godam-player.php Inline wrapper CSS output behavior adjusted for more render contexts.
inc/classes/wpbakery-elements/class-wpb-godam-video.php WPBakery GoDAM video element control alignment (performance_mode, hover, etc.).
inc/classes/wpbakery-elements/class-wpb-godam-video-gallery.php WPBakery gallery element aligned to gallery-v2 (mode, handpicked/query, etc.).
inc/classes/wpbakery-elements/class-wpb-godam-params.php Make selector buttons type="button" to avoid form submits.
inc/classes/wpbakery-elements/class-wpb-godam-audio.php Rename WPBakery element title to “Audio”.
inc/classes/shortcodes/class-godam-video-gallery.php Shortcode refactor to delegate to shared template + align attributes.
inc/classes/shortcodes/class-godam-player.php Add new shortcode attrs (e.g., hls_transcoded_url, playerHeight mapping).
inc/classes/rest-api/class-dynamic-gallery.php REST pagination updated to render gallery-v2 compatible item markup.
inc/classes/migrations/class-wpbakery-gallery-shortcode-v1-to-v2.php New migration rewriting V1 [godam_video_gallery] shortcodes in post_content.
inc/classes/migrations/class-runner.php Register new migrations under version key 1.12.2.
inc/classes/migrations/class-elementor-gallery-widget-v1-to-v2.php New migration for Elementor widget settings V1 → V2.
inc/classes/elementor-widgets/class-godam-video.php Elementor video widget parity updates + new controls.
inc/classes/elementor-widgets/class-godam-gallery.php Elementor gallery widget aligned to gallery-v2 (mode, repeater, filters, etc.).
inc/classes/elementor-widgets/class-godam-audio.php Update Elementor audio widget icon class.
inc/classes/class-elementor-widgets.php Enqueue editor-only CSS + inject brand icon CSS for Elementor panel.
godam.php Plugin header + RTGODAM_VERSION bump to 1.12.2.
CHANGELOG.md Add v1.12.2 release notes.
assets/src/js/wpbakery/wpbakery-video-selector-param.js Robust WPBakery selector bindings (namespace + MutationObserver).
assets/src/js/media-library/views/godam-media-frame-shared.js Core/gallery inner-block virtual-ID replacement + selection tracking.
assets/src/js/godam-player/managers/layers/hotspotLayerManager.js Hotspot hover logic updated (pause conditional + z-index fix).
assets/src/js/elementor/widgets/godam-gallery.js Elementor “element_ready” re-init hook for gallery/player.
assets/src/js/elementor/frontend.js Register Elementor gallery widget frontend module.
assets/src/js/elementor/editor.js Elementor editor hydration (thumbnail grid, autoplay locks, REST fetch).
assets/src/js/elementor/controls/godam-media.js Replace virtual IDs with real attachment IDs for Elementor media control.
assets/src/css/godam-elementor-editor.scss New Elementor editor-only polish styles (Select2, etc.).
assets/src/css/admin.scss Elementor thumbnail-picker + autoplay-lock CSS.
assets/src/css/_common.scss Add select styling under .godam-input.
assets/src/blocks/godam-player/editor.scss Restore ToggleControl spacing in inspector for WP 7.0+.
assets/src/blocks/godam-player/edit.js Validate selected media type is video in GoDAM Video block.
assets/src/blocks/godam-gallery-v2/view.js Expose window.GodamGalleryV2.init() for dynamic re-init contexts.
assets/src/blocks/godam-gallery-v2/render.php Make gallery-v2 render a thin wrapper around shared template.
assets/src/blocks/godam-gallery-v2/editor.scss Restore ToggleControl spacing in inspector for WP 7.0+.
assets/src/blocks/godam-audio/editor.scss Restore ToggleControl spacing in inspector for WP 7.0+.
assets/src/blocks/godam-audio/edit.js Validate selected media type is audio in GoDAM Audio block.
assets/src/block-extensions/index.js Switch extension entry to new generalized core-media handler.
assets/src/block-extensions/core-media-blocks-extension.js New generalized virtual-attachment handler for multiple blocks.
assets/src/block-extensions/core-image-extension.js Removed (replaced by generalized handler).
Comments suppressed due to low confidence (1)

inc/classes/elementor-widgets/class-godam-gallery.php:201

  • This widget still uses get_users( [ 'who' => 'authors' ] ), which is deprecated/removed from the public API in newer WordPress versions and can return incomplete results on modern role setups. Use an explicit fields + orderby query instead (same approach used elsewhere in this PR for WPBakery).
		$users        = get_users( array( 'who' => 'authors' ) );
		$user_options = array();

		foreach ( $users as $user ) {
			$user_options[ strval( $user->ID ) ] = $user->display_name;
		}

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +50 to +60
const handleVirtualAttachmentCreated = ( event ) => {
const { attachment, virtualMediaId } = event.detail || {};

// Update id attribute only if it's undefined, null, or matches the virtualMediaId.
if (
attachment &&
( mediaId === undefined || mediaId === null || String( mediaId ) === String( virtualMediaId ) )
) {
setAttributes( { [ singleIdAttr ]: attachment.id } );
}
};
Comment on lines +60 to +66
'date_range' => '',
'custom_date_start' => '',
'custom_date_end' => '',
'show_title' => true,
'performance_mode' => 'balanced',
'engagements' => true,
),
Comment on lines +71 to 74
foreach ( array( 'infinite_scroll', 'enable_more_items', 'show_title', 'engagements' ) as $bool_key ) {
$atts[ $bool_key ] = filter_var( $atts[ $bool_key ], FILTER_VALIDATE_BOOLEAN );
}

Comment on lines 156 to 158
ob_start();

if ( $query->have_posts() ) {
// Add action before gallery output.
do_action( 'rtgodam_gallery_before_output', $query, $atts );

$godam_figure_attributes = get_block_wrapper_attributes(
array(
'class' => 'godam-video-gallery-wrapper',
)
);

// Calculate these values before using them.
$total_videos = $query->found_posts;
$shown_videos = count( $query->posts );

$alignment_class = ! empty( $atts['align'] ) ? ' align' . $atts['align'] : '';
$css_class = ! empty( $atts['css_class'] ) ? ' ' . trim( $atts['css_class'] ) : '';

echo '<div ' . wp_kses_data( $godam_figure_attributes ) . '>';
echo '<div class="godam-video-gallery layout-' . esc_attr( $atts['layout'] ) .
( 'grid' === $atts['layout'] ? ' columns-' . intval( $atts['columns'] ) : '' ) .
esc_attr( $alignment_class ) . esc_attr( $css_class ) . '"
data-infinite-scroll="' . esc_attr( $atts['infinite_scroll'] ) . '"
data-offset="' . esc_attr( $shown_videos ) . '"
data-columns="' . esc_attr( $atts['columns'] ) . '"
data-orderby="' . esc_attr( $atts['orderby'] ) . '"
data-order="' . esc_attr( $atts['order'] ) . '"
data-total="' . esc_attr( $total_videos ) . '"
data-show-title="' . ( $atts['show_title'] ? '1' : '0' ) . '"
data-layout="' . esc_attr( $atts['layout'] ) . '"
data-search="' . esc_attr( $atts['search'] ) . '"
data-category="' . esc_attr( $atts['category'] ) . '"
data-tag="' . esc_attr( $atts['tag'] ) . '"
data-author="' . esc_attr( $atts['author'] ) . '"
data-include="' . esc_attr( $atts['include'] ) . '"
data-date-range="' . esc_attr( $atts['date_range'] ) . '"
data-custom-date-start="' . esc_attr( $atts['custom_date_start'] ) . '"
data-custom-date-end="' . esc_attr( $atts['custom_date_end'] ) . '"
data-engagements="' . esc_attr( rtgodam_is_engagement_feature_enabled() && $atts['engagements'] ? '1' : '0' ) . '"

>';
foreach ( $query->posts as $video ) {
// Add action before each video item.
do_action( 'rtgodam_gallery_before_video_item', $video, $atts );

$video_id = intval( $video->ID );
$video_title = get_the_title( $video_id );
$video_slug = get_post_field( 'post_name', $video_id );
$video_date = get_the_date( 'F j, Y', $video_id );

// Add filter for video title.
$video_title = apply_filters( 'rtgodam_gallery_video_title', $video_title, $video_id );

// Add filter for video date format.
$video_date = apply_filters( 'rtgodam_gallery_video_date', $video_date, $video_id );

$thumbnail_data = rtgodam_get_video_thumbnail_sources( $video_id );
$thumbnail = $thumbnail_data['thumbnail'];
$placeholder_thumbnail = $thumbnail_data['placeholder'];

// Get video duration using file path.
$file_path = get_attached_file( $video_id );
$duration = null;

if ( file_exists( $file_path ) ) {
if ( ! function_exists( 'wp_read_video_metadata' ) ) {
require_once ABSPATH . 'wp-admin/includes/media.php';
}

$metadata = wp_read_video_metadata( $file_path );
if ( ! empty( $metadata['length_formatted'] ) ) {
$duration = $metadata['length_formatted'];
}
}

// Check if engagements are enabled for the video.
$engagements_enabled = rtgodam_is_engagement_feature_enabled() && $atts['engagements'];
$item_engagements_enabled = false;
if ( $engagements_enabled ) {
// Check if the video is transcoded when engagements are enabled.
$transcoded_job_id = get_post_meta( $video_id, 'rtgodam_transcoding_job_id', true );
$transcoded_status = get_post_meta( $video_id, 'rtgodam_transcoding_status', true );
$item_engagements_enabled = ! empty( $transcoded_job_id ) && 'transcoded' === strtolower( $transcoded_status );
}

// Build the query arguments for the video embed page.
$query_args = array(
'godam_page' => 'video-embed',
'id' => $video_id,
'godam_gallery' => '1',
);

// Add the engagements query argument if it is enabled.
if ( $item_engagements_enabled ) {
$query_args['engagements'] = 'show';
}

$video_url = add_query_arg( $query_args, $cpt_base_url );

echo '<div class="godam-video-item">';
echo '<div class="godam-video-thumbnail" data-gallery-item-engagements="' . esc_attr( $item_engagements_enabled ? 'true' : 'false' ) . '" data-video-id="' . esc_attr( $video_id ) . '" data-video-url="' . esc_url( $video_url ) . '">';
if ( ! empty( $thumbnail ) && ! empty( $placeholder_thumbnail ) ) {
echo '<div class="godam-gallery-blurred-img" style="background-image: url(\'' . esc_url( $placeholder_thumbnail ) . '\')">';
echo '<img src="' . esc_url( $thumbnail ) . '" alt="' . esc_attr( $video_title ) . '" class="godam-gallery-thumbnail-image" />';
echo '</div>';
} elseif ( ! empty( $thumbnail ) ) {
echo '<img src="' . esc_url( $thumbnail ) . '" alt="' . esc_attr( $video_title ) . '" class="godam-gallery-thumbnail-image" />';
}
if ( $duration ) {
echo '<span class="godam-video-duration">' . esc_html( $duration ) . '</span>';
}
echo '</div>';
if ( ! empty( $atts['show_title'] ) ) {
echo '<div class="godam-video-info">';
echo '<div class="godam-video-title">' . esc_html( $video_title ) . '</div>';
echo '<div class="godam-video-date">' . esc_html( $video_date ) . '</div>';
echo '</div>';
}
echo '</div>';

// Add action after each video item.
do_action( 'rtgodam_gallery_after_video_item', $video, $atts );
}
echo '</div>';

if ( $shown_videos < $total_videos ) {
if ( ! $atts['infinite_scroll'] ) {
echo '<button
class="godam-load-more wp-element-button"
data-offset="' . esc_attr( $shown_videos ) . '"
data-columns="' . esc_attr( $atts['columns'] ) . '"
data-count="' . esc_attr( $atts['count'] ) . '"
data-orderby="' . esc_attr( $atts['orderby'] ) . '"
data-order="' . esc_attr( $atts['order'] ) . '"
data-total="' . esc_attr( $total_videos ) . '"
data-engagements="' . esc_attr( $atts['engagements'] ) . '"
>' . esc_html__( 'Load More', 'godam' ) . '</button>';
}
echo '<div class="godam-spinner-container"><div class="godam-spinner"></div></div>';
}

echo '</div>';

echo '
<div id="godam-video-modal" class="godam-modal hidden">
<div class="godam-modal-overlay"></div>
<div class="godam-modal-content">
<div class="easydam-video-container animate-video-loading"></div>
<div class="godam-modal-footer">
<div class="godam-video-info">
<h3 class="godam-video-title"></h3>
<span class="godam-video-date"></span>
</div>
</div>
</div>
</div>';

// Add action after gallery output.
do_action( 'rtgodam_gallery_after_output', $query, $atts );
} else {
echo '<p>' . esc_html__( 'No videos found.', 'godam' ) . '</p>';
}

wp_reset_postdata();
require RTGODAM_PATH . 'inc/templates/godam-video-gallery.php';
return ob_get_clean();
Comment thread readme.txt
Comment on lines 236 to 240
= v1.12.0 (June 11, 2026) =

- Feat: Added Layer Analytics feature to track how viewers interact with video layers (CTAs, hotspots, forms, and more), with per-layer engagement and conversion metrics in the analytics dashboard.

= v1.11.2 (June 8, 2026) =

- Feat: Added a setting to disable GoDAM's media library features, allowing GoDAM to coexist with another media or DAM plugin without changing the WordPress media library.

[CHECK THE FULL CHANGELOG](https://github.com/rtCamp/godam/blob/main/CHANGELOG.md)
@KMchaudhary
KMchaudhary merged commit 8a3f7ef into develop Jun 17, 2026
11 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.

3 participants