Riverworks Logo

Option 1

Create a section in the Divi library, and use the following JavaScript. It will show the popup when a button is clicked. (Alani Smiles Site Example)

// Website Popup
const websitePopup = document.querySelector('#website-popup');
const popupSection = document.querySelector('#website-popup #popup-section.et_pb_section');
// If it exists and isn't display none, show popup
if (popupSection && popupSection.style.display != "none") {
    // Let all links with href="#popup" trigger the popup
    var popupLinks = document.querySelectorAll('a[href="#popup"]');
    popupLinks.forEach(function(elem) {
        elem.addEventListener('click', function(e) {
            e.preventDefault();
            document.body.classList.add('popup-active');
        });
    });

    // If the user clicks outside of the popup, hide the popup.
    websitePopup.addEventListener('click', function(e) {
        if (e.target.closest('.popup-content')) return;
        document.body.classList.remove('popup-active');
    });
    
    // If the user click the X button, close the popup.
    var popupClose = document.querySelector('.popup-close');
    popupClose.addEventListener('click', () => {
        document.body.classList.remove('popup-active');
    });
}



functions.php:

function footer_website_popup() {
    ?>
        <div id="website-popup">
            <div class="popup-content">
                <a class="popup-close">X</a>
                 <?php echo do_shortcode('[et_pb_section global_module="1595"][/et_pb_section]'); ?>
            </div>
        </div>
    <?php
}
add_action('get_footer', 'footer_website_popup');

Option 2

Use a Divi section in the Divi library. Show the popup once per day per user. (Talking Water site example)

Functions.php : 

function footer_website_popup() {
    ?>
        <div id="website-popup">
            <div class="popup-content">
                <a class="popup-close">X</a>
                 <?php echo do_shortcode('[et_pb_section global_module="2230"][/et_pb_section]'); ?>
            </div>
        </div>
    <?php
}
add_action('get_footer', 'footer_website_popup');


Extra.js : 

const sitewidePopup = document.querySelector('#website-popup');
const popupSection = document.querySelector('#website-popup #popup-section.et_pb_section');
window.addEventListener('load', function() {
    const now = new Date();
    const today = now.toDateString();
    const lastPopupDate = localStorage.getItem('lastPopupDate');

    // Check if the popup status has expired
    if (lastPopupDate !== today) {
        if (popupSection && popupSection.style.display != "none" ) {
            setTimeout(function() {
                sitewidePopup.classList.add('popup-active');
            }, 500);
        }

        localStorage.setItem('lastPopupDate', today);
    }

    const popupClose = document.querySelector('#website-popup .popup-close');
    popupClose.addEventListener('click', function() {
        sitewidePopup.classList.remove('popup-active');
    });

    sitewidePopup.addEventListener('click', function(e) {
        if (e.target.closest('.popup-content')) return;
        sitewidePopup.classList.remove('popup-active');
    });
});


Style.css : 

/* Website Popup */
#website-popup {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0,0,0,.25);
    pointer-events: none;
    visibility: hidden;
    opacity: 0;
    transition: 1s;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 99999;
    padding: 30px;
}
#website-popup.popup-active {
    pointer-events: auto;
    visibility: visible;
    opacity: 1;
}
#website-popup .popup-content {
    position: relative;
    max-width: 900px;
    width: 100%;
    overflow-y: auto;
    overflow-x: hidden;
    box-shadow:  5px 5px 35px black;
}
#website-popup .popup-close {
    color: #fff;
    font-size: 25px;
    font-weight: bold;
    position: absolute;
    top: 15px;
    right: 20px;
    z-index: 9;
    transition: 0.25s;
    cursor: pointer;
}
#website-popup .popup-close:hover {
    opacity: .5;
}

Option 3

To display a popup once per user, with a 1 second delay (Action Rentals Site Example):

var popupStatus = localStorage.getItem('popupStatus1');
window.addEventListener('load', function() {
    if (!popupStatus) {
        setTimeout(() => {
            document.body.classList.add('popup-active');
            localStorage.setItem('popupStatus1', 1);
        }, 1000)
    }
});
    
var popupHolder = document.querySelector('.popup-holder');
var popupClose = document.querySelector('.popup-close');
popupHolder.addEventListener('click', function(e) {
    if (e.target.closest('.popup')) return;
    document.body.classList.remove('popup-active');
});
popupClose.addEventListener('click', function() {
    document.body.classList.remove('popup-active');
});

Option 4

Show popup once a day per user (Main Street Meats Site Example):

const sitewidePopup = document.querySelector('.popup-holder');
window.addEventListener('load', function() {
    let popupStatus = localStorage.getItem('popupStatus');
    let popupTimestamp = localStorage.getItem('popupTimestamp');
    let now = new Date().getTime();

    // Check if the popup status has expired
    if (popupTimestamp && now - popupTimestamp > 24 * 60 * 60 * 1000) {
        localStorage.removeItem('popup');
        localStorage.removeItem('popupTimestamp');
        popupStatus = null;
    }

    if (sitewidePopup && !popupStatus) {
        setTimeout(function() {
            sitewidePopup.classList.add('popup-active');
            localStorage.setItem('popup', 'shown');
            localStorage.setItem('popupTimestamp', now);
        }, 500);
    }
    
    const popupClose = document.querySelector('.popup-holder .popup-close');
    popupClose.addEventListener('click', function() {
        sitewidePopup.classList.remove('popup-active');
    });

    sitewidePopup.addEventListener('click', function(e) {
        if (e.target.closest('.popup-content')) return;
        sitewidePopup.classList.remove('popup-active');
    });
});