Popraw kod tak, by po zamknięciu przez użytkownika modal pojawia się po 3 dniach od wizyty, w której nastąpiło zamknięcie. W przypadku użytkownika zalogowanego do panelu administracyjnego wordpress modal powinien się pokazywać przez cały czas z uwagi na to, żeby można było skutecznie zarządzać zmianami treści. Oto kod do poprawy: <?php
/**
 * Shortcode: [modal]
 */
function modal_shortcode($atts) {
    // -------------------------------------------------------------------------
    // 1) Pobranie ustawień z shortcode i ACF
    // -------------------------------------------------------------------------
    $atts = shortcode_atts(array(
        'header'           => 'Domyślny Nagłówek',
        'text'             => 'Domyślny tekst modala',
        'background_image' => '',
        'cta_text'         => 'Dowiedz się więcej',
        'cta_link'         => '#'
    ), $atts, 'modal');

    // ACF fields (post ID = 14187)
    $header           = get_field('modal_header', 14187) ?: $atts['header'];
    $text             = wp_kses_post(get_field('modal_text', 14187) ?: $atts['text']);
    $background_image = get_field('modal_background_image', 14187) ?: $atts['background_image'];
    if (is_array($background_image)) {
        $background_image = $background_image['url'];
    } elseif (is_numeric($background_image)) {
        $background_image = wp_get_attachment_image_url($background_image, 'full');
    }
    $cta_text        = get_field('cta_text', 14187) ?: $atts['cta_text'];
    $cta_link        = get_field('cta_link', 14187) ?: $atts['cta_link'];
    $enable_countdown = get_field('enable_countdown', 14187);
    $countdown_timestamp = '';
    if ($enable_countdown) {
        $countdown_end = get_field('modal_countdown_end', 14187);
        if ($countdown_end) {
            $countdown_timestamp = strtotime($countdown_end) * 1000;
        }
    }

    // -------------------------------------------------------------------------
    // 2) Sprawdzenie, czy użytkownik jest zalogowany (WP Admin / Editor itd.)
    // -------------------------------------------------------------------------
    $is_admin_user = is_user_logged_in() ? 'true' : 'false';

    // -------------------------------------------------------------------------
    // 3) Budowa HTML + JS
    // -------------------------------------------------------------------------
    ob_start(); ?>
    <div class="modal fade" id="exampleModal" tabindex="-1" 
         aria-labelledby="exampleModalLabel" aria-hidden="true">
      <div class="modal-dialog modal-lg modal-dialog-centered">
        <div class="modal-content position-relative">
          <div class="modal-background" 
               style="background-image: url(<?php echo esc_url($background_image); ?>);"></div>
          <div class="modal-header">
            <h2 id="exampleModalLabel" class="fw-bold card-title">
              <?php echo esc_html($header); ?>
            </h2>
            <button type="button" id="modalCloseButton" data-bs-dismiss="modal"
                    class="btn btn-close material-symbols-outlined"
                    style="color: rgba(200,115,40,1); font-size:1.6rem; background:none; border:none;">
              close
            </button>
          </div>
          <div class="modal-body" style="min-height:300px;">
            <?php echo $text; ?>
          </div>
          <div class="modal-footer d-flex justify-content-between align-items-center">
            <a href="<?php echo esc_url($cta_link); ?>" 
               class="btn btn-secondary text-decoration-none px-3">
              <?php echo esc_html($cta_text); ?>
            </a>
            <?php if ($enable_countdown && $countdown_timestamp): ?>
              <div class="countdown-wrapper text-end">
                <div class="countdown-label" style="font-size:1.2rem; font-weight:bold; color:#e35f21;">
                  Do początku zostało...
                </div>
                <div id="modal-countdown"
                     data-end-time="<?php echo esc_attr($countdown_timestamp); ?>"
                     style="font-size:1.2rem; font-weight:bold; color:#fff; margin:0;">
                  Ładowanie...
                </div>
              </div>
            <?php endif; ?>
          </div>
        </div>
      </div>
    </div>

    <script>
    document.addEventListener("DOMContentLoaded", function() {
      var isAdminUser = <?php echo $is_admin_user; ?>;  // true|false

      // inicjalizuj bootstrap-modal
      var modal = new bootstrap.Modal(document.getElementById("exampleModal"));
      var closeButton = document.getElementById("modalCloseButton");

      // logika wyświetlania (3 dni dla niezalogowanych, zawsze dla zalogowanych)
      function shouldShowModal() {
        if (isAdminUser) {
          return true;
        }
        var lastClosed = localStorage.getItem("modalLastClosed");
        if (!lastClosed) {
          return true;
        }
        var threeDays = 3 * 24 * 60 * 60 * 1000;
        return (Date.now() - parseInt(lastClosed, 10)) >= threeDays;
      }

      // zapamiętaj zamknięcie tylko dla niezalogowanych
      closeButton.addEventListener("click", function() {
        if (!isAdminUser) {
          localStorage.setItem("modalLastClosed", Date.now().toString());
        }
      });

      // jeśli warunki ok – wyświetl modal
      if (shouldShowModal()) {
        modal.show();
      }

      // countdown
      <?php if ($enable_countdown && $countdown_timestamp): ?>
      (function(){
        var countdownElem = document.getElementById("modal-countdown");
        var endTime = parseInt(countdownElem.dataset.endTime, 10);
        function update() {
          var now = Date.now(), diff = endTime - now;
          if (diff < 0) {
            countdownElem.closest(".countdown-wrapper").style.display = "none";
            return;
          }
          var d = Math.floor(diff/(1000*60*60*24)),
              h = Math.floor((diff%(1000*60*60*24))/(1000*60*60)),
              m = Math.floor((diff%(1000*60*60))/(1000*60)),
              s = Math.floor((diff% (1000*60))/1000);
          countdownElem.textContent = d+"d "+h+"h "+m+"m "+s+"s";
        }
        update();
        setInterval(update, 1000);
      })();
      <?php endif; ?>
    });
    </script>
    <?php

    return ob_get_clean();
}
add_shortcode('modal', 'modal_shortcode');
?>