Как я могу удалить определенные HTML-теги из RSS-ленты?

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

Один новостной агрегатор хочет иметь RSS-ленту без каких-либо ссылок в поле <description>. Поэтому я пытаюсь использовать этот код в functions.php, чтобы удалить теги <a href></a>, но он не работает. Что не так? Как я могу удалить теги, но сохранить весь текст в неприкосновенности?

add_filter('the_content', 'my_custom_feed');
function my_custom_feed( $content ){
    global $post;

    if ( ! is_feed() )
        return $content;

    // Удалить все шорткоды
    $content = strip_shortcodes( $post->post_content );
        $content = strip_tags( $content );

    // Удалить все HTML-теги, за исключением этих
    $my_allowed_tags = array(
        'p'      => array(),
        'strong' => array(),
        'em'     => array(),
        'img'    => array( 'src' => array(), 'width' => array(), 'height' => array() ),
    );
    $content = wp_kses( $content, $my_allowed_tags );

    // Уравновесить теги
    $content = balanceTags( $content, true );

    return $content;
}

Вы не указали, в чем именно ошибка 🙂

Удаляет ли он некоторые ссылки или вообще ничего не делает. В любом случае, чтобы изменить содержимое каждого элемента RSS, вы можете использовать хук rss_item(), или rss2_item() в зависимости от того, какой поток является вашей целью.

add_filter('rss_item', 'custom_item_content');
function custom_item_content($content) {

    // изменить ваш $content здесь

    return $content;
}

.

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

Как IT-специалист вы, видимо, столкнулись с задачей удаления HTML-тегов из поля <description> в RSS-ленте. Давайте разберем вашу ситуацию и предложим решение.

Задача и Ошибки

Вы пытаетесь удалить <a href></a> теги из контента RSS, используя код в файле functions.php. Однако ваше текущее решение, похоже, не выполняет эту задачу, возможно из-за того, что оно удаляет все HTML-теги, включая сохранение нужного текста внутри них. Ваша попытка настройка фильтра the_content находит отражение в том, что вы на данный момент работаете неверно с содержимым RSS, не правильно конфигурируя тексты исключения.

Рекомендации для Решения

  1. Использование Корректных Хуков: Ваша задача заключается в изменении контента именно RSS-ленты. Поэтому, вместо фильтра the_content, рассмотрите использование хуков, которые непосредственно отвечают за контент RSS, например, rss2_item. Это будет более целевой подход.

  2. Манипуляции с Тегами: Исправление удаления ссылок можно сделать, используя регулярные выражения или специализированные PHP-функции для удаления только <a> тегов, сохраняя при этом текст:

    add_filter('rss2_item', 'custom_item_content');
    function custom_item_content($content) {
       // Удаление <a> тегов, сохраняя текст
       $content = preg_replace('#<a.*?>(.*?)</a>#i', '$1', $content);
    
       // Возврат обработанного контента
       return $content;
    }
  3. Уточнение Исключений: Вы можете конфигурировать и расширить массив $my_allowed_tags, если потребуются дополнительные теги в вашем контенте.

Оптимизация для SEO

Включение текста из ссылок может помочь в поддержании релевантности и улучшении читаемости, что положительно скажется на SEO. Правильное использование тегов, таких как strong и em для выделения ключевых слов, сохранит привлекательность содержания для поисковых систем.

Для большей надежности и модернизации вашего подхода, рассмотрите возможность использования WordPress Hooks API и более целевых инструментов форматирования текста, что позволит управлять всем обилием HTML-тегов в ваших RSS-лентах без потерь в контенте.

Заключение

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

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

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