Удалить ссылки на контент (внутренние и внешние), но исключить посты в определенных категориях

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

    add_filter('the_content', 'removelink_content',1);

function removelink_content($content="")
{
    preg_match_all("#<a(.*?)>(.*?)</a>#i",$content, $matches);
    $num = count($matches[0]);for($i = 0;$i < $num;$i++){
        $content = str_replace($matches[0][$i] , $matches[2][$i] , $content);
    }
    return $content;
}

Это работает, но я хотел бы исключить некоторые категории. То есть, чтобы код работал только на записях, которые не находятся в исключенной категории.

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

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

add_filter('the_content', 'removelink_content',1);

function removelink_content($content="") {
  // Получить категории текущей записи
  $categories = get_the_category();

  // Задать массив с ID исключенных категорий
  $excluded_categories = array(2, 5, 8);

  // Проверить, есть ли какие-либо категории текущей записи в массиве исключенных категорий
  $excluded = false;
  foreach ( $categories as $category ) {
    if ( in_array( $category->term_id, $excluded_categories ) ) {
      $excluded = true;
      break;
    }
  }

  // Если запись не находится в исключенной категории, удалить ссылки из содержимого
  if ( ! $excluded ) {
    preg_match_all("#<a(.*?)>(.*?)</a>#i",$content, $matches);
    $num = count($matches[0]);
    for($i = 0;$i < $num;$i++){
      $content = str_replace($matches[0][$i] , $matches[2][$i] , $content);
    }
  }

  return $content;
}

В этом примере функция сначала получает категории текущей записи, используя функцию get_the_category(). Затем она задает массив с ID исключенных категорий (в данном случае, ID 2, 5 и 8). Далее функция проверяет, есть ли какие-либо категории текущей записи в массиве исключенных категорий с помощью функции in_array(). Если запись находится в исключенной категории, переменная $excluded устанавливается в true.

Если переменная $excluded не установлена в true, функция продолжает удалять ссылки из содержимого, как раньше. Если переменная $excluded установлена в true, функция ничего не делает и возвращает содержимое как есть.

Надеюсь, это поможет! Дайте знать, если у вас есть вопросы.

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

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

Вот пример кода, который выполняет данную задачу:

add_filter('the_content', 'removelink_content', 1);

function removelink_content($content = "") {
    // Получаем категории текущего поста
    $categories = get_the_category();

    // Задаем массив ID исключенных категорий
    $excluded_categories = array(2, 5, 8); // Замените ID на свои

    // Проверяем, есть ли категории текущего поста в массиве исключенных категорий
    $excluded = false;
    foreach ($categories as $category) {
        if (in_array($category->term_id, $excluded_categories)) {
            $excluded = true;
            break;
        }
    }

    // Если пост не в исключенных категориях, удаляем ссылки из содержимого
    if (!$excluded) {
        preg_match_all("#<a(.*?)>(.*?)</a>#i", $content, $matches);
        $num = count($matches[0]);
        for ($i = 0; $i < $num; $i++) {
            $content = str_replace($matches[0][$i], $matches[2][$i], $content);
        }
    }

    return $content;
}

Объяснение кода:

  1. Получение категорий поста: Функция get_the_category() возвращает категории текущего поста в виде массива объектов категории.

  2. Исключенные категории: Вы задаете массив с ID категорий, которые хотите исключить из обработки (в примере это категории с ID 2, 5 и 8). Замените эти ID на свои, исходя из структуры вашего сайта.

  3. Проверка на исключения: В цикле проверяем, находится ли хотя бы одна из категорий поста в массиве исключенных категорий. Если да, то переменная $excluded устанавливается в true.

  4. Удаление ссылок: Если пост не является частью исключенных категорий, осуществляется поиск всех ссылок (тегов <a>) в содержимом поста с помощью регулярного выражения. В случае нахождения ссылок они заменяются на текст, содержащийся между тегами <a>, что и реализует удаление ссылок.

  5. Возврат результата: Если пост не в исключенных категориях, возвращается новый текст без ссылок. Если пост в исключенных категориях, возвращается оригинальное содержимое.

Таким образом, данный код позволяет вам контролировать, на каких постах будет применяться удаление ссылок, не затрагивая посты из указанных категорий. Если у вас возникнут дополнительные вопросы или нужны будут уточнения, пожалуйста, дайте знать!

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

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