💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۳ بهمن فلاحی
تمرین: پلاگین فیلتر لینک‌ها در کامنت‌های وردپرس
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۰ آبان ۱۴۰۲

درود

برای درک و حل مسئله، چطور به موضوع پرداختم؟ به طور خلاصه:

۱. در صحبت‌های آقای صالحی اشاره‌ای شد به 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');

 

با رویکرد OOP:

 

<?php
/**
 * Plugin Name: Enhanced Comment Filter OOP
 * Plugin URI: https://bahmanfallahi.ir/
 * Description: Object-oriented implementation of Enhanced Comment Filter
 * Author: Bahman Fallahi
 * Version: 1.1.0
 * License: GPLv2 or later
 * Author URI: https://bahmanfallahi.ir/
 */
defined('ABSPATH') || exit;
class EnhancedCommentFilter {
    private static $instance;
    private $bad_words = ['کلمه شما', 'کلمه شما', 'کلمه شما'];
    private $allowed_tags = '

'; private function __construct() { add_filter('comment_text', array($this, 'filter_comment_text')); } public static function get_instance() { if (!isset(self::$instance)) { self::$instance = new self(); } return self::$instance; } public function filter_comment_text(string $comment_content): string { // Filter bad words foreach ($this->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>/i', '*', $comment_content); // Remove link href $comment_content = preg_replace('/]*href=[\'"](.*?)[\'"][^>]*>(.*?)<\/a>/i', '*', $comment_content); // Remove link title and replace with a star $comment_content = preg_replace('/]*title=[\'"](.*?)[\'"][^>]*>(.*?)<\/a>/i', '*', $comment_content); // Add nofollow attribute to links $comment_content = preg_replace('//i', '', $comment_content); // Allow only specified tags $comment_content = strip_tags($comment_content, $this->allowed_tags); return $comment_content; } } EnhancedCommentFilter::get_instance();

 

 

بهمن فلاحی ۲۰ آبان ۱۴۰۲، ۱۱:۲۵

من به اشتباه فراموش کردم کلمات رکیک برای فیلتر را حذف کنم. لطفا در صورت امکان آن را ویرایش کنید. نه امکان ویرایش دارم و نه امکان حذف. پوزش.

بهمن فلاحی ۲۰ آبان ۱۴۰۲، ۱۱:۲۹

سلام،

ویرایش شد.

بسیار عالی. موفق باشید.

محسن موحد ۲۰ آبان ۱۴۰۲، ۲۲:۰۰