Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Работа фильтра с нецензурными словами на форуме в комментариях
11ответ(ов) в теме
Купцов Андрей
не в сети 4 года
На сайте с 04.03.2020
Участник
Тем 1
Сообщения 6
1
20:04
Версия WP-Recall: 16.18.7

Добрый день! Установил WP-recall, активировал и создал форум, создал фильтр для подмены нецензурных слов на форуме, в постах WP и в комментариях WP подмена работает, на форуме фильтр не срабатывает, код который использую:

<function cenzorship_filter_comment_text($comment_text)
{
  static $badwords = array();
  if ( empty($badwords) )
  {
    $badwords = explode(',', file_get_contents(CENZORSHIP_DIR . 'badwords.txt'));
  }

  for( $i = 0, $c = count($badwords); $i < $c; $i++ )
  {
      $comment_text = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $comment_text);
  }

  return $comment_text;

}

add_filter('comment_text', 'cenzorship_filter_comment_text');>

Вместо comment_text пробовал: comments_user (как я понял это id), count_comments (количество коментов), подскажите пожалуйста через что выводить фильтр для подмены нецензурных слов в создании темы и в комментариях форума?

Редакции сообщения
13.03.2020 20:45Дружаев Владимир (Otshelnik-Fm)Причина: есть кнопка многострочный код
0
Андрей CS
не в сети 23 часа
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16843
2
20:15

Добрый вечер, пробуйте использовать фильтр "pfm_pre_save_postdata"

1
Купцов Андрей
не в сети 4 года
На сайте с 04.03.2020
Участник
Тем 1
Сообщения 6
3
20:31

Андрей CS сказал(а)
Добрый вечер, пробуйте использовать фильтр "pfm_pre_save_postdata"

Андрей, к сожалению не сработал данный фильтр, использовал код:

<function cenzorship_filter_pfm_pre_save_postdata($pfm_pre_save_postdata)
{
  static $badwords = array();
  if ( empty($badwords) )
  {
    $badwords = explode(',', file_get_contents(CENZORSHIP_DIR . 'badwords.txt'));
  }

  for( $i = 0, $c = count($badwords); $i < $c; $i++ )
  {
      $pfm_pre_save_postdata = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata);
  }

  return $pfm_pre_save_postdata;

}

add_filter('comment_text', 'cenzorship_filter_pfm_pre_save_postdata');>

Редакции сообщения
13.03.2020 20:45Дружаев Владимир (Otshelnik-Fm)Причина: есть кнопка многострочный код
0
Купцов Андрей
не в сети 4 года
На сайте с 04.03.2020
Участник
Тем 1
Сообщения 6
4
20:33

Полный код:

function cenzorship_filter_pfm_pre_save_postdata($pfm_pre_save_postdata)
{
  static $badwords = array();
  if ( empty($badwords) )
  {
    $badwords = explode(',', file_get_contents(CENZORSHIP_DIR . 'badwords.txt'));
  }

  for( $i = 0, $c = count($badwords); $i < $c; $i++ )
  {
      $pfm_pre_save_postdata = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata);
  }

  return $pfm_pre_save_postdata;

}

add_filter('pfm_pre_save_postdata', 'cenzorship_filter_pfm_pre_save_postdata');

Редакции сообщения
13.03.2020 20:41Купцов АндрейПричина: Ошибка в тексте
13.03.2020 20:42Купцов АндрейПричина: Ошибка в тексте
13.03.2020 20:46Дружаев Владимир (Otshelnik-Fm)Причина: есть кнопка многострочный код
0
Вова (Otshelnik-Fm)
не в сети 13 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18639
5
20:47

Здравствуйте.

Используйте кнопку "Многострочный код" над окном ввода сообщения.
Так будет проще читать.
Выше я поправил

1
Купцов Андрей
не в сети 4 года
На сайте с 04.03.2020
Участник
Тем 1
Сообщения 6
6
20:50

Дружаев Владимир (Otshelnik-Fm) сказал(а)
Здравствуйте.

Используйте кнопку "Многострочный код" над окном ввода сообщения.
Так будет проще читать.
Выше я поправил

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

0
Preci
не в сети 20 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
7
21:37

Попробуйте заменить:

$pfm_pre_save_postdata = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata);

на

$pfm_pre_save_postdata['post_content'] = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata['post_content']);

1
Купцов Андрей
не в сети 4 года
На сайте с 04.03.2020
Участник
Тем 1
Сообщения 6
8
22:10

Preci сказал(а)
Попробуйте заменить:

$pfm_pre_save_postdata = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata);

на

$pfm_pre_save_postdata['post_content'] = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata['post_content']);

Preci, спасибо за желание помочь, выполнил вашу рекомендацию, не помогло, получился код:

/ КАМ Заменяем плохие слова в комментариях на форуме wp-recall
function cenzorship_filter_pfm_pre_save_postdata($pfm_pre_save_postdata)
{
  static $badwords = array();
  if ( empty($badwords) )
  {
    $badwords = explode(',', file_get_contents(CENZORSHIP_DIR . 'badwords.txt'));
  }

  for( $i = 0, $c = count($badwords); $i < $c; $i++ )
  {
      // $pfm_pre_save_postdata = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata);
      $pfm_pre_save_postdata['post_content'] = preg_replace('#' .$badwords[$i].'#iu', '{плохое слово-хотите бан?}', $pfm_pre_save_postdata['post_content']);
  }

  return $pfm_pre_save_postdata;

}

add_filter('pfm_pre_save_postdata', 'cenzorship_filter_pfm_pre_save_postdata');
0
Preci
не в сети 20 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
9
22:19

Ну вы можете в начале функции добавить

var_dump($pfm_pre_save_postdata);
die();

и посмотреть, есть ли в $pfm_pre_save_postdata['post_content'] содержимое вашего поста. Если есть - значит в вашем коде ошибка где то

0
Купцов Андрей
не в сети 4 года
На сайте с 04.03.2020
Участник
Тем 1
Сообщения 6
10
00:00

Preci сказал(а)
Ну вы можете в начале функции добавить

var_dump($pfm_pre_save_postdata);
die();

и посмотреть, есть ли в $pfm_pre_save_postdata['post_content'] содержимое вашего поста. Если есть - значит в вашем коде ошибка где то

Я не совсем понял как проверить, это же функция, которая ищет нецензурные слова из файла, если находит, то производит замену на мой текст, это же не вывод поста или контента, подскажите пожалуйста, если не сложно, более подробно как проверить с помощью var_dump данную функцию. Да и дело в том что данная функция прекрасно справляется с постами и комментариями wordpress, с помощью функций the_content и comment_text, и скорее всего мне нужно просто функцию узнать, через которую wp-recall выводит в форуме тему и комменты

0
Preci
не в сети 20 часов
На сайте с 11.11.2014
Участник
Тем 71
Сообщения 1643
11
00:30

Фильтр pfm_the_post_content - фильтрует содержимое поста, этот фильтр передает строку с контентом - попробуйте его использовать, если не хотите фильтровать данные перед сохранением в базу.
Фильтр pfm_pre_save_postdata - фильтрует данные перед сохранением в базу, этот фильтр передает массив с данными формы добавления поста

0
Вы не имеете права на публикацию сообщений в этой теме