Показ віджета лише там, де потрібно

Часте питання: чи можна обмежити віджет одним розділом сайту, тестовим оточенням або тими людьми, які зараз тестують, замість того щоб показувати його всім відвідувачам на всіх сторінках?

Можна — але сьогодні це вирішується на вашому боці, а не в налаштуваннях проєкту. Правил для сторінок, доменів чи відвідувачів у додатку поки немає (вони в планах). Віджет стартує, щойно виконався його код вставки, тож питання просте: коли ваш сайт виводить цей код? Усе далі — це способи відповісти на нього.

Що Revisionme перевіряє сам

Одне правило працює без жодних налаштувань. Повідомлення приймається лише з того сайту, для якого створено проєкт: з хоста з поля Website URL проєкту, з одного рівня його піддоменів і з localhost для локальної розробки. Список видно в налаштуваннях проєкту → General → White-listed hosts.

Тобто проєкт, створений для https://example.com, приймає повідомлення також з www.example.com і staging.example.com, але не з example.net — якщо код потрапить на чужий домен, форма там відкриється, але до вас нічого не дійде. Для іншого сайту потрібен окремий проєкт.

Створюйте проєкт на «голий» домен (https://example.com), а не на https://www.example.com: тоді правило піддоменів працює на вас, і www, і staging проходять.

Лише на тестовому оточенні

Найтиповіший випадок: ви збираєте зауваження, поки нову версію переглядають, а бойовий сайт лишається чистим. Виводьте код лише тоді, коли ваша змінна оточення каже, що це не продакшн:

<?php if (getenv('APP_ENV') !== 'production'): ?>
  <script>
  var __rm__config = {
    projectId: 'YOUR_PROJECT_ID',
    locale: 'auto'
  };
  </script>
  <script src="https://widget.revisionme.com/app.js" defer id="rm_app_script"></script>
<?php endif; ?>

Якщо тестовий сайт — піддомен того самого домену (staging.example.com), наявний проєкт його вже покриває. Якщо він на окремому домені або за паролем, створіть для нього другий проєкт.

Лише на окремих сторінках

Та сама ідея, тільки зі шляхом. Тримайте список сторінок або розділів, які зараз переглядають, і підключайте сніпет лише там:

<?php
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$sections = ['/pricing', '/blog/', '/docs/'];

foreach ($sections as $prefix) {
    if (strpos($path, $prefix) === 0) {
        include __DIR__ . '/revisionme.php'; // код вставки
        break;
    }
}

У шаблонізаторі перевірка та сама, відрізняється лише синтаксис; у single-page застосунку виводьте сніпет з того маршруту, який уже знає ваш роутер.

Лише для певних IP-адрес

Зручно, коли сайт уже живий, а віджет має бачити офіс або один рецензент — і більше ніхто:

<?php
$allowed = ['203.0.113.10', '198.51.100.24'];

if (in_array($_SERVER['REMOTE_ADDR'], $allowed, true)) {
    include __DIR__ . '/revisionme.php';
}

Два застереження. За проксі, балансувальником чи Cloudflare у REMOTE_ADDR буде адреса проксі, а адреса відвідувача приїде в заголовку (CF-Connecting-IP, X-Forwarded-For), якому варто довіряти лише тоді, коли запит справді прийшов від вашого ж проксі. І домашні та мобільні адреси змінюються, тож список IP надійний для офісної мережі й дратівливий для решти — для однієї людини простіше зробити перемикач нижче.

Лише для залогінених або для обраної групи

Якщо ті, хто лишає зауваження, і так авторизовані на вашому сайті, скористайтеся перевіркою, яка у вас уже є, — роль, група, прапорець в акаунті:

<?php if ($user && $user->hasRole('editor')): ?>
  <?php include __DIR__ . '/revisionme.php'; ?>
<?php endif; ?>

Перемикач у посиланні

Найзручніший варіант для клієнта чи тестувальника без акаунта на вашому сайті: секретний параметр вмикає віджет саме для нього і запам'ятовує це в кукі, щоб він пережив наступні кліки.

<?php
if (isset($_GET['rm'])) {
    // /any-page?rm=1 вмикає, ?rm=0 вимикає
    setcookie('rm_feedback', $_GET['rm'] === '1' ? '1' : '0', time() + 86400 * 30, '/');
    $_COOKIE['rm_feedback'] = $_GET['rm'];
}

if (($_COOKIE['rm_feedback'] ?? '') === '1') {
    include __DIR__ . '/revisionme.php';
}

Ви надсилаєте рецензенту https://example.com/?rm=1, він наступний місяць бачить віджет на всіх сторінках, а решта відвідувачів — ніколи.

WordPress

У WordPress ті самі умови вже є у вигляді умовних тегів. Додайте сніпет у functions.php дочірньої теми (або в невеликий плагін) і причепіть його до футера:

add_action('wp_footer', function () {
    // Лише для тих, хто може редагувати записи; замініть на свою умову,
    // наприклад is_page(['pricing', 'about']) або is_singular('post')
    if (!current_user_can('edit_posts')) {
        return;
    }
    ?>
    <script>
    var __rm__config = { projectId: 'YOUR_PROJECT_ID', locale: 'auto' };
    </script>
    <script src="https://widget.revisionme.com/app.js" defer id="rm_app_script"></script>
    <?php
});

Корисні теги: is_page(), is_singular(), is_category(), is_front_page(), is_user_logged_in(), current_user_can(), а для тестового оточення — wp_get_environment_type() !== 'production'.

Без коду те саме дають плагіни для сніпетів через власний інтерфейс: WPCode, Insert Headers and Footers, Header Footer Code Manager і подібні дозволяють один раз вставити код і потім обрати, де він виводиться — скрізь, на обраних сторінках чи типах записів, лише для залогінених. Вставляйте код у позицію Footer / Body, щоб він виконувався перед </body>.

Google Tag Manager

Якщо сайт живе через GTM, зробіть тег Custom HTML з повним кодом вставки (обидва <script>, конфіг першим) і дайте йому тригер з умовами: Page Path contains /docs/, Page Hostname equals staging.example.com, змінна з кукі, що дорівнює 1, і так далі. Так усі правила лежать в одному місці, і змінити їх можна без деплою.

Перевірка в браузері — це не замок

Рішення в JavaScript (if (location.pathname.startsWith('/docs/'))) цілком годиться, щоб віджет не з'являвся на сторінці. Але це не обмеження: код уже завантажено, і будь-хто може запустити його руками. Коли віджет справді має бути невидимим для публіки — перед запуском, на приватному staging клієнта — умова має бути на сервері, там, де збирається сторінка, щоб коду вставки просто не було в HTML.

Хоч би що ви обрали, для вже зібраних повідомлень нічого не зміниться: вони лишаються в додатку, а далі приходитимуть лише від відвідувачів, які підпадають під вашу умову.

У планах

Правила для сторінок і відвідувачів у налаштуваннях проєкту, щоб робити це без змін на сайті, є в планах. Якщо вам потрібне конкретне правило, напишіть на hello@revisionme.com — це допомагає вирішити, що робити першим.