Как правильно указать источник при цитировании текста?

Какой современный и безопасный код вы можете порекомендовать для использования в файле functions.php темы на WordPress, чтобы добавить источник при копировании текста? Важно, чтобы код загружался в футере, содержал абзацные отступы для источника, не работал для администраторов и активировался только на страницах типа post (в теле статей). Кроме того, желательно, чтобы он срабатывал только при выделении определенного количества символов и только один раз за сессию.
  • 2 февраля 2025 г. 8:24
Ответы на вопрос 2
Чтобы добавить функциональность для указания источника при копировании текста в WordPress, вы можете использовать следующий код. Этот код нужно вставить в файл `functions.php` вашей темы. Он будет добавлять источник при попытке копирования текста на страницах типа `post`, будет активироваться только для неадминистраторов, а также для текста длиной не менее определённого количества символов.

```php
add_action('wp_footer', 'custom_copy_source_script');

function custom_copy_source_script() {
    if (!is_admin() && is_single() && !current_user_can('administrator')) {
        ?>
        <script type="text/javascript">
            document.addEventListener('copy', function(e) {
                var selection = window.getSelection().toString();
                if (selection.length >= 100) { // Минимальная длина выделенного текста
                    var source = "\n\nИсточник: https://example.com"; // Замените на ваш источник
                    e.clipboardData.setData('text/plain', selection + source);
                    e.preventDefault();
                    sessionStorage.setItem('source_added', 'true'); // Запоминаем, что источник был добавлен
                } else if (sessionStorage.getItem('source_added')) {
                    e.preventDefault(); // Если источник уже добавлен, предотвращаем дальнейшее добавление
                }
            });
        </script>
        <?php
    }
}
```

### Пояснения по коду:

1. **Проверки**: 
   - Код работает только для неадминистраторов на одиночных страницах (постах).
   - Добавлена проверка, чтобы код выполнялся только для страниц типа `post`.
  
2. **Событие `copy`**: 
   - При копировании текста, проверяется его длина. Если выделенный текст содержит 100 или более символов, к нему добавляется указанный источник.

3. **Хранение состояния**:
   - Используется `sessionStorage` для отслеживания того, был ли уже добавлен источник. Если да, то дальнейшие попытки добавления источника блокируются.

4. **Изменение источника**:
   - Не забудьте заменить `https://example.com` на ваш фактический источник.

Этот код помогает обеспечить добавление информации о источнике только на страницах с контентом и предотвращает ее множественное добавление при дальнейших копированиях в одной сессии.
Вы неправильно осмыслили задачу, и получился франкенштейн. Одна задача - это вставка ссылки при событии oncopy. Это делается на чистом Javascript, абсолютно не требует PHP, и  никакого отношения к WordPress не имеет. Можете эту часть спросить отдельно в хабе Javscript - хотя я подозреваю, что в интернете уже выложена куча решений. 
А вторая задача у Вас уже решена; я только использую хук на другое событие:
add_action( 'wp_enqueue_scripts', function () {
    if ( !current_user_can( 'manage_options' ) ) {
        wp_enqueue_script('oncopy_addlink', '/path/to/script.js');
    }
});
Похожие вопросы