Вопрос или проблема
Один новостной агрегатор хочет иметь 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, не правильно конфигурируя тексты исключения.
Рекомендации для Решения
-
Использование Корректных Хуков: Ваша задача заключается в изменении контента именно RSS-ленты. Поэтому, вместо фильтра
the_content
, рассмотрите использование хуков, которые непосредственно отвечают за контент RSS, например,rss2_item
. Это будет более целевой подход. -
Манипуляции с Тегами: Исправление удаления ссылок можно сделать, используя регулярные выражения или специализированные 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; }
-
Уточнение Исключений: Вы можете конфигурировать и расширить массив $my_allowed_tags, если потребуются дополнительные теги в вашем контенте.
Оптимизация для SEO
Включение текста из ссылок может помочь в поддержании релевантности и улучшении читаемости, что положительно скажется на SEO. Правильное использование тегов, таких как strong
и em
для выделения ключевых слов, сохранит привлекательность содержания для поисковых систем.
Для большей надежности и модернизации вашего подхода, рассмотрите возможность использования WordPress Hooks API и более целевых инструментов форматирования текста, что позволит управлять всем обилием HTML-тегов в ваших RSS-лентах без потерь в контенте.
Заключение
Ваша задача по удалению только определённых тегов из RSS контента может быть решена правильной конфигурацией хуков и использованием регулярных выражений. Такой подход обеспечит, что ваш контент будет полноценным и легко читаемым как для пользователей, так и для поисковых систем, поддерживая его качество и релевантность.