Удаление внешних ссылок из сообщений WordPress с помощью add_filter() в файле functions.php темы

Вопрос или проблема

Мы искали повсюду плагин, образец кода или пример того, как удалить все внешние ссылки на уровне фильтра темы, но, похоже, ничего не можем найти онлайн.

Мы хотим сохранить внешние ссылки в фактической записи базы данных поста, но просто удалить их, используя add_filter() внутри файла functions.php темы, чтобы мы могли добавить их снова, когда нам это понадобится.

Также нам нужно отфильтровать ссылки для домена, на котором работает сайт – эти внутренние ссылки не нужно удалять.

Мы хотим удалить ссылку, но сохранить текст внутри ссылки и вывести его без окружающей ссылки.

Мы начали, но не можем понять, как исключить внутренние ссылки или сохранить текст привязки внутри поста.

Любая помощь, образцы кода, советы, подсказки или предложения будут очень признательны, и я благодарю вас заранее.

add_filter( 'the_content', 'filter_the_content_in_the_main_loop' );

function filter_the_content_in_the_main_loop( $content ) {

    if ( is_single() ) {
      $content = preg_replace( '/<a href=\"(.*?)\">(.*?)<\/a>/', '', $content );
    }

    return $content;
}

Вы используете правильный подход, нужно небольшое изменение! ..

Просто замените
$content = preg_replace('/<a href=\"(.*?)\">(.*?)<\/a>/', "", $content);
на
$content = preg_replace(array('"<a href(.*?)>"', '"</a>"'), array('',''), $content);

.

Ответ или решение

Для решения задачи удаления внешних ссылок из постов WordPress на уровне темы, используя функцию add_filter(), важно не только учитывать правильный механизм замены, но также и корректный учёт внутренних ссылок, относящихся к вашему домену. Разберем этот процесс более подробно.

Теория:

В WordPress функционал фильтрации контента широко используется для модификации отображаемых данных перед их рендерингом. Указанная задача включает в себя несколько подходов. Цель — удаление внешних ссылок из содержимого постов без изменения исходной базы данных. Идея заключается в том, чтобы сохранить якорный текст, но убрать саму гиперссылку, если она ведет на внешний ресурс.

Применение функций регулярных выражений, таких как preg_replace, позволяет нам выявлять и заменять части текста, которые соответствуют определенному шаблону. Прописанные регулярные выражения могут найти в тексте HTML-ссылки и заменить их. В целом, обработка ссылок включает два аспекта: идентифицировать внешние и сохранять внутренние ссылки.

Пример:

  1. Поиск и удаление внешних ссылок: необходимо распознать ссылки, которые ведут за пределы текущего домена. Для этого следует определить доменное имя вашего сайта программно и проверить каждую ссылку на предмет соответствия этому домену.

  2. Пример кода:

add_filter('the_content', 'remove_external_links');

function remove_external_links($content) {
    if (is_single()) {
        $home_url = parse_url(home_url(), PHP_URL_HOST);
        $pattern = '/<a\s+href=("|\')(.*?)\1>(.*?)<\/a>/i';

        // Перезаписываем только внешние ссылки
        $content = preg_replace_callback($pattern, function($matches) use ($home_url) {
            $url_host = parse_url($matches[2], PHP_URL_HOST);
            if ($url_host !== $home_url && !empty($url_host)) {
                return $matches[3]; // Возвращаем только текст ссылки без тега
            }
            return $matches[0]; // Возвращаем полную ссылку, если она ведет на внутренний адрес
        }, $content);
    }

    return $content;
}

Приложение:

В этой функции remove_external_links мы сначала извлекаем имя хоста вашего сайта, чтобы различать внутренние и внешние ссылки. Затем мы используем регулярное выражение preg_replace_callback, которое проходит по всем ссылкам в контенте. Для каждой гиперссылки мы определяем, должна ли она оставаться на месте или быть удалена (оставляя только текст внутри тега).

Используемая конструкция обратного вызова позволяет избирательно обрабатывать ссылки, возвращая якорный текст только для внешних URL-адресов, в то время как внутренние ссылки остаются нетронутыми.

Грамотное выполнение данных шагов позволит вам настроить динамическое управление внешними ссылками, сохранив при этом стабильность внутренней структуры сайта. Не забывайте тестировать внесенные изменения в безопасной среде, чтобы избежать нежелательных результатов на производственном сайте. Хотя подход с использованием регулярных выражений достаточно мощен, его сложность заключается в правильной интерпретации HTML—региона и контроля над возможными нюансами рендеринга.

Этот подход, подчеркивающий грамотное сочетание регулярных выражений и динамического программирования, демонстрирует как можно эффективно решать задачи изменения контента в среде WordPress, сохраняя при этом его функциональную структуру и полноту данных.

Оцените материал
Добавить комментарий

Капча загружается...