Как можно открыть ссылки в новом окне только в определенной части страницы, например, в зоне .entry-content постов?

Как изменить код javascript, чтобы ссылки открывались в новом окне ТОЛЬКО в постах и только в зоне .entry-content (т. е. теле статей), а также чтобы добавлялись атрибуты target="_blank" и rel="noopener", и чтобы исключить открытие ссылок из плагина Yarpp, который отображает рекомендуемые записи в конце каждого поста?
  • 5 февраля 2024 г. 19:29
Ответы на вопрос 2
Чтобы открыть ссылки в новом окне только в определенной части страницы (например, внутри зоны с классом `.entry-content`) и исключить ссылки, сгенерированные плагином YARPP, вы можете использовать следующий код JavaScript:

```javascript
document.addEventListener('DOMContentLoaded', function() {
    // Выбираем все ссылки внутри элементов с классом .entry-content
    var links = document.querySelectorAll('.entry-content a');

    for (var i = 0; i < links.length; i++) {
        var link = links[i];

        // Проверяем, чтобы ссылка не была частью плагина YARPP (по классу или другому идентификатору)
        if (!link.closest('.yarpp-related')) {
            // Устанавливаем атрибуты target и rel
            link.target = '_blank';
            link.rel = 'noopener';
        }
    }
});
```

Следует учесть, что пример использует `document.querySelectorAll` для выборки всех ссылок внутри `.entry-content` и `link.closest` для проверки, что ссылка не вложена в контейнер с классом, который вы хотите исключить (в примере это `.yarpp-related`, предполагается, что это класс блока YARPP).

Атрибут `rel="noopener"` добавляется для улучшения безопасности и оптимизации производительности, поскольку он предотвращает возможность использования определенных видов атак со стороны открывающейся страницы на ваш сайт.

Обратите внимание, что подобные манипуляции с `target="_blank"` могут затруднить пользователю навигацию, если он предпочитает самостоятельно решать, нужно ли открывать ссылку в новом окне или вкладке. Вам следует учитывать пользовательский опыт при использовании подобного подхода.

Если ваш сайт работает на WordPress (как выявлено из упоминания плагина YARPP), вы можете также интегрировать подобную функциональность через файл functions.php вашей темы, вместо того чтобы использовать JavaScript, например, назначив функцию обратного вызова для фильтра `the_content`, который будет изменять содержимое статей. Функция могла бы выглядеть примерно так:

```php
function modify_content_links($content) {
    // Находим все ссылки в $content и добавляем target="_blank" и rel="noopener"
    // При этом учитываем условия по классам и исключениям
    // ...

    return $content;
}

add_filter('the_content', 'modify_content_links');
```

Внутри этой функции вы использовали бы регулярные выражения или DOM-манипуляции PHP для изменения контента.

Помните, что регулярные выражения могут иногда ненадежно работать с HTML-контентом, особенно при сложных или нестандартных структурах документа, поэтому DOM-манипуляции предпочтительнее для подобной задачи.
1. Ознакомиться с материалом из документации https://developer.mozilla.org/en-US/docs/Web/API/W... 
2. Правильно написать селектор (мы вашего html кода не видим), читаем https://jquery-docs.ru/category/selectors/
3. Отключить плагин? Сделать кастомный темплейт этой страницы, на которой не будет вывода рекомендуемых постов
Похожие вопросы