Добрый день! Установил 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 (количество коментов), подскажите пожалуйста через что выводить фильтр для подмены нецензурных слов в создании темы и в комментариях форума?
Андрей 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');>
Полный код:
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');
Дружаев Владимир (Otshelnik-Fm) сказал(а)
Здравствуйте.Используйте кнопку "Многострочный код" над окном ввода сообщения.
Так будет проще читать.
Выше я поправил
Владимир, спасибо огромное за поправку, намного удобнее! Вы можете подсказать функцию на которую в вашем плагине подключаются создание темы и комментарии на форуме?
Попробуйте заменить:
$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 сказал(а)
Попробуйте заменить:$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');
Preci сказал(а)
Ну вы можете в начале функции добавитьvar_dump($pfm_pre_save_postdata); die();и посмотреть, есть ли в $pfm_pre_save_postdata['post_content'] содержимое вашего поста. Если есть - значит в вашем коде ошибка где то
Я не совсем понял как проверить, это же функция, которая ищет нецензурные слова из файла, если находит, то производит замену на мой текст, это же не вывод поста или контента, подскажите пожалуйста, если не сложно, более подробно как проверить с помощью var_dump данную функцию. Да и дело в том что данная функция прекрасно справляется с постами и комментариями wordpress, с помощью функций the_content и comment_text, и скорее всего мне нужно просто функцию узнать, через которую wp-recall выводит в форуме тему и комменты
Фильтр pfm_the_post_content - фильтрует содержимое поста, этот фильтр передает строку с контентом - попробуйте его использовать, если не хотите фильтровать данные перед сохранением в базу.
Фильтр pfm_pre_save_postdata - фильтрует данные перед сохранением в базу, этот фильтр передает массив с данными формы добавления поста