درود
برای درک و حل مسئله، چطور به موضوع پرداختم؟ به طور خلاصه:
۱. در صحبتهای آقای صالحی اشارهای شد به strip_tags که آن را مطالعه کردم.
۲. در بین پاسخهای ارائه شده به ریپازیتوری آقای مرادی مراجعه کردم به شیوه OOP مسئله را حل کرده بودند.
۳. با توجه به درک مسئله تلاش کردم آن را به یک پرامپ تبدیل کنم و از آن خروجی (به شکل ساده و نه OOP) بگیرم:
<?php
/*
Plugin Name: Enhanced Comment Filter
Plugin URI: https://bahmanfallahi.ir/
Description: Enhanced Comment Filter
Author: Bahman Fallahi
Version: 1.1.0
License: GPLv2 or later
Author URI: https://bahmanfallahi.ir/
*/
defined('ABSPATH') || exit;
function filter_comment_text(string $comment_content): string {
// Filter bad words
$bad_words = ['کلمه شما', 'کلمه شما', 'کلمه شما'];
foreach ($bad_words as $word) {
$word_length = mb_strlen($word);
$comment_content = str_replace($word, str_repeat('*', $word_length), $comment_content);
}
// Remove links
$comment_content = preg_replace('/<a\b[^>]*>(.*?)<\/a>/i', '*', $comment_content);
// Remove link href
$comment_content = preg_replace('/<a\b[^>]*href=[\'"](.*?)[\'"][^>]*>(.*?)<\/a>/i', '*', $comment_content);
// Remove link title and replace with a star
$comment_content = preg_replace('/<a\b[^>]*title=[\'"](.*?)[\'"][^>]*>(.*?)<\/a>/i', '*', $comment_content);
// Add nofollow attribute to links
$comment_content = preg_replace('/<a\b(.*?)>/i', '<a$1 rel="nofollow">', $comment_content);
// Allow only specified tags
$allowed_tags = '<p><b><hr><strong>';
$comment_content = strip_tags($comment_content, $allowed_tags);
return $comment_content;
}
add_filter('comment_text', 'filter_comment_text');