Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
ce4a045
Announce page builder support in admin
danieliser Aug 12, 2026
b828bda
Document builder notice dismissal scope
danieliser Aug 12, 2026
d65e049
Remove notification changelog entry
danieliser Aug 12, 2026
8ef68a0
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 12, 2026
a6a33ed
Keep notification metadata with builders
danieliser Aug 12, 2026
8bf9077
Merge remote-tracking branch 'origin/feature/page-builder-announcemen…
danieliser Aug 12, 2026
475795c
Verify builder notification metadata contract
danieliser Aug 12, 2026
0358fbf
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 12, 2026
fb013fa
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 12, 2026
1567d6a
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
66ad099
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
0907b0a
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
e48c51f
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
158c154
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
fe75db3
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
1ece22a
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
2ff716f
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
760755c
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
8e17557
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
24c82a5
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
ff70830
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
d76f392
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
df73ac4
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
c5d471b
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
cf38458
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
b97063e
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 13, 2026
bd3341f
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 14, 2026
eb2771a
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 14, 2026
ce5e9ab
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 14, 2026
53d62c5
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 14, 2026
02b3521
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 14, 2026
3bdfe54
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 15, 2026
ff647ed
Merge branch 'develop' into feature/page-builder-announcements
github-actions[bot] Aug 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions classes/Base/PageBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,20 @@
*/
abstract class PageBuilder {

/**
* Stable builder identifier.
*
* @var string
*/
public $key = '';

/**
* Builder display label.
*
* @var string
*/
protected $label = '';

/**
* Plugin container.
*
Expand All @@ -36,6 +50,15 @@ public function __construct( $container ) {
$this->container = $container;
}

/**
* Builder display label.
*
* @return string
*/
public function label() {
return $this->label;
}

/**
* Whether the third-party APIs used by this integration exist.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/BeaverBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
*/
class BeaverBuilder extends PageBuilder {

/** @var string */
public $key = 'beaver-builder';

/** @var string */
protected $label = 'Beaver Builder';

/**
* Whether Beaver's native Popup Maker integration is active.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/Bricks.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@
*/
class Bricks extends PageBuilder {

/** @var string */
public $key = 'bricks';

/** @var string */
protected $label = 'Bricks';

/**
* CSS generated for popup documents and awaiting emission.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/Brizy.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
*/
class Brizy extends PageBuilder {

/** @var string */
public $key = 'brizy';

/** @var string */
protected $label = 'Brizy';

/**
* Popup documents already given to Brizy's asset manager.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/Divi.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
*/
class Divi extends PageBuilder {

/** @var string */
public $key = 'divi';

/** @var string */
protected $label = 'Divi';

/**
* Whether Divi is active as either a theme or a plugin.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/Elementor.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@
*/
class Elementor extends PageBuilder {

/** @var string */
public $key = 'elementor';

/** @var string */
protected $label = 'Elementor';

/**
* Whether Elementor's document and rendering APIs are usable.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/Etch.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@
*/
class Etch extends PageBuilder {

/** @var string */
public $key = 'etch';

/** @var string */
protected $label = 'Etch';

/**
* Marker confirming that Etch successfully saved this document.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/SiteOrigin.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@
*/
class SiteOrigin extends PageBuilder {

/** @var string */
public $key = 'siteorigin';

/** @var string */
protected $label = 'SiteOrigin Page Builder';

/**
* Whether popup support existed before this provider injected it.
*
Expand Down
6 changes: 6 additions & 0 deletions classes/Builders/VisualComposer.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@
*/
class VisualComposer extends PageBuilder {

/** @var string */
public $key = 'visual-composer';

/** @var string */
protected $label = 'Visual Composer';

/**
* Popup documents already given to Visual Composer's asset queue.
*
Expand Down
12 changes: 12 additions & 0 deletions classes/Controllers/Builders.php
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,18 @@ public function boot_builders() {
}
}

/**
* Get the available builder adapters.
*
* Only builders that passed runtime detection and their adapter's
* availability check are returned. Inactive adapters are not autoloaded.
*
* @return PageBuilder[]
*/
public function get_available_builders() {
return array_values( $this->builders );
}

/**
* Register the shared pipeline once a builder is available.
*
Expand Down
5 changes: 3 additions & 2 deletions classes/Services/Notifications/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
/**
* Notifications service — parent orchestrator.
*
* Owns the core notification providers (WhatsNew, FeatureAnnouncements)
* and exposes a filter that lets addons (Pro, Pro+, integrations) plug
* Owns the core notification providers and exposes a filter that lets addons
* (Pro, Pro+, integrations) plug
* in their own providers without touching core code.
*
* @package PopupMaker
Expand Down Expand Up @@ -167,6 +167,7 @@ public function get_providers() {
protected function resolve_providers() {
$core = [
new WhatsNew( $this->container ),
new PageBuilderAnnouncements( $this->container ),
new FeatureAnnouncements( $this->container ),
];

Expand Down
152 changes: 152 additions & 0 deletions classes/Services/Notifications/PageBuilderAnnouncements.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
<?php
/**
* Page builder support announcements.
*
* @package PopupMaker
* @copyright Copyright (c) 2026, Code Atlantic LLC
*/

namespace PopupMaker\Services\Notifications;

use PopupMaker\Base\Service;
use PopupMaker\Base\PageBuilder;
use PopupMaker\Controllers\Builders;

defined( 'ABSPATH' ) || exit;

/**
* Announces complete support for page builders active on the site.
*
* @since 1.25.0
*/
class PageBuilderAnnouncements extends Service implements Provider {

/**
* Page builder integrations hub.
*
* @var string
*/
const GUIDE_URL = 'https://wppopupmaker.com/integrations/page-builder-integrations/';

/**
* Hook into the alert list.
*
* @return void
*/
public function init() {
add_filter( 'pum_alert_list', [ $this, 'register_announcement' ], 14 );
}

/**
* Register one announcement for all supported builders active on the site.
*
* @param mixed $alerts Existing alerts.
*
* @return mixed
*/
public function register_announcement( $alerts ) {
if (
! is_array( $alerts ) ||
! current_user_can( $this->container->get_permission( 'edit_popups' ) )
) {
return $alerts;
}

$builders = $this->get_available_builders();

if ( ! $builders ) {
return $alerts;
}

$labels = wp_list_pluck( $builders, 'label' );
$slugs = wp_list_pluck( $builders, 'slug' );
$names = wp_sprintf_l( '%l', $labels );

if ( 1 === count( $builders ) ) {
/* translators: %s: page builder name. */
$title = sprintf( __( 'Full Popup Maker support for %s is here', 'popup-maker' ), $names );
$message = sprintf(
/* translators: %s: page builder name. */
__( 'Design popup content directly in <strong>%s</strong> while Popup Maker handles the popup theme, triggers, targeting, and analytics. Builder styles and interactive elements work in the editor and on your site.', 'popup-maker' ),
esc_html( $names )
);
} else {
$title = __( 'Full Popup Maker support for your page builders is here', 'popup-maker' );
$message = sprintf(
/* translators: %s: comma-separated list of page builder names. */
__( 'Popup Maker now fully supports the builders active on this site: <strong>%s</strong>. Design popup content in each builder while Popup Maker handles the popup theme, triggers, targeting, and analytics.', 'popup-maker' ),
esc_html( $names )
);
}

$alerts[] = [
'code' => 'pm_feat_page_builder_support_2026_' . implode( '_', $slugs ),
'type' => 'info',
'category' => 'feature',
'priority' => 88,
'title' => $title,
'message' => $message,
'subtitle' => __( 'new in Popup Maker', 'popup-maker' ),
'icon' => 'layout',
'dismissible' => true,
'actions' => [
[
'text' => __( 'See how it works', 'popup-maker' ),
'type' => 'link',
'action' => '',
'href' => add_query_arg(
[
'utm_source' => 'plugin',
'utm_medium' => 'notification',
'utm_campaign' => 'page-builder-support',
],
self::GUIDE_URL
),
'primary' => true,
'external' => true,
],
[
'text' => __( 'Dismiss', 'popup-maker' ),
'type' => 'action',
'action' => 'dismiss',
],
],
];

return $alerts;
}

/**
* Get display details for available builder adapters.
*
* @return array<int,array{slug:string,label:string}>
*/
protected function get_available_builders() {
$controller = $this->container->get_controller( 'Builders' );

if ( ! $controller instanceof Builders ) {
return [];
}

$available = [];

foreach ( $controller->get_available_builders() as $builder ) {
if ( ! $builder instanceof PageBuilder || ! is_string( $builder->key ) || '' === $builder->key ) {
continue;
}

$label = $builder->label();

if ( ! is_string( $label ) || '' === $label ) {
continue;
}

$available[] = [
'slug' => sanitize_key( $builder->key ),
'label' => $label,
];
}

return $available;
}
}
6 changes: 6 additions & 0 deletions docs/notifications-registry.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,12 @@ Shared helpers (in `FeatureAnnouncements`):
- `feature_url( $slug, $campaign )` — `wppopupmaker.com/features/<slug>/` with UTM. Supports nested slugs (`popup-triggers/exit-intent-triggers`).
- `upgrade_url( $campaign )` — wraps `\PopupMaker\get_upgrade_link()` → `wppopupmaker.com/pricing/` with UTM. Kept for future pricing-direct CTAs; current upsells route to feature pages instead.

#### PageBuilderAnnouncements provider (`classes/Services/Notifications/PageBuilderAnnouncements.php`)

| Code | Category | Condition | Destination | Notes |
|---|---|---|---|---|
| `pm_feat_page_builder_support_2026_<builder-slugs>` | `feature` | At least one bundled page builder adapter passed runtime detection and its availability check | `/integrations/page-builder-integrations/` | Consolidates every active supported builder into one announcement with permanent per-user dismissal. The stable builder slug suffix scopes dismissal to the detected set, so installing another supported builder can surface the new capability without loading inactive adapters. |

### Pro / Pro+ / extensions

| Plugin | Registered alerts | Notes |
Expand Down
Loading