گاهی اوقات که کاربران در وب سایت ما نظر (Comment) ثبت می کنند ممکن است از کلمات نامناسب استفاده کنند و اگر نمایش نظرات بدون تایید مدیر باشد ممکن است نمایش این مطالب در سایت باعث فیلتر شدن سایت ما شود.

برای اینکه مطمئن شویم که کاربران از کلمات نامناسب استفاده نمی کنند یک راه آن است که شما خود نظرات را تایید کنید و راه دیگر استفاده کردن از یک فیلتر برای حذف یا جایگزینی بعضی از لغات به جای لغات دیگر باشد.

یا اینکه شما می خواهید در متن های که منتشر می کنید وقتی کلمه خاصی را بکار می برید این کلمه شکل و حالت دیگری را به خود بگیرد. مثلا هر وقت که وردپرس را می نویسید می خواهید به سایت wordpress.org  متصل شود.

برای اینکار شما می توانید یک افزونه دانلود و نصب کنید یا اینکه خود دست به کار شوید و یک افزونه طراحی کنید. با ما همراه باشید تا یاد بگیرید چطور می توانید یک افزونه برای فیلتر کلمات طراحی کنید.

بخش اول: معرفی افزونه و کارایی آن

برای اینکه یک برنامه بنویسید باید ابتدا صورت مسئله را مشخص کنید، مسئله ما این است که پلاگینی را طراحی کنیم که بتواند به درخواست ما تعدادی کلمات را فیلتر کند یا با کلمه دیگر جایگزین کند. خب شروع کنیم!

ایجاد ساختار پلاگین

ابتدا باید ساختار پلاگین خود را ایجاد کنید. برای انجام اینکار به پوشه plugins بروید و یک دایرکتوری درون آن با نام دلخواه خود ایجاد کنید. من نام filter_content  را انتخاب می کنم.

در دایرکتوری filter_content  یک فایل با فرمت php می سازیم من نام فایل را words_filters.php می گذارم. همانطور که می دانید برای هر افزونه شما باید یک شناسنامه داشته باشید تا به هسته وردپرس بگویید که این پلاگین چیست و چکاری انجام می دهد.

در صورتی که با ساختار یک پلاگین آشنا نیستید می توانید مقاله آشنایی با ساختار پلاگین های وردپرس را مطالعه نمایید.

من اطلاعات زیر را به عنوان شناسنامه پلاگینم در نظر می گیرم.

/*
Plugin Name: Filter Content 
Plugin URI: http://wphashtag.com/plugins/filter_content/
Description: این یک پلاگین ساده برای فیلتر کردن کلمات دلخواه مدیر می باشد.
Author: #وردپرس
Version: 1.0.0
Author URI: http://wphastag.com
*/

خب! بعد از ساختن شناسنامه اگر صفحه پلاگین ها را باز کنید خواهید دید که پلاگین شما در این بخش قرار گرفته است ولی هنوز فعال نیست و در صورتی که فعال کنید هم کاری انجام نمی دهد.


برای اینکه پلاگین شروع به فیلتر کردن کلمات کند باید مراحل زیر را انجام دهیم.

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

توضیح کد:

در ابتدای شروع کدنویسی پلاگین برای بالا بردن امنیت ، کد بالا را در ابتدا درج کنید. این کد باعث می شود که هکرها نتوانند فایل پلاگین شما را به صورت مستقیم در url وارد نمایید و کد را خارج از وردپرس اجرا کنند.

کد فیلتر کلمات

function wf_filter_words($content){
    $word = 'وردپرس';
    $replace = 'WP';
    $content = preg_replace("/{$word}/",$replace, $content);
    return $content;
}
add_filter('the_content','wf_filter_words');

توضیح کد:

برای اینکه بتوانید محتوا را فیلتر کنید باید از فیلتر the_content  استفاده کنید. در کد بالا این فیلتر در add_filter فراخوانی شده است.

add_filter('the_content','wf_filter_words');

در add_filter ابتدا فیلتر the_content فراخوانی شده است و بعد از آن تابع wf_filter_words را فراخوانی کرده ایم.

در تابع wf_filter_words یک آرگومان به نام content ارسال کردیم در واقع این آرگومان همان محتوایی است که از طریق add_filter ارسال کرده ایم.

متغیر word کلمه ای است که می خواهیم فیلتر بر روی آن اعمال شود و متغیر replace کلمه جایگزین می باشد.

حالا می رسیم به بخش اصلی کد، با استفاده از تابع preg_replace ابتدا کلمه داخل متغیر word در متن $content جستجو و سپس کلمه replace به جای آن می نشیند و در متغیر $content ذخیره می شود. و در نهایت توسط دستور return به add_filter بازگشت داده شده و خروجی در صفحه نمایش می یابد.

اطلاعات بیشتر درباره تابع preg_replace

خب به همین سادگی توانستید یک افزونه را ایجاد کنید.

تا به اینجای کار فقط یک کلمه را در متن توانستید فیلتر کنید حالا اگر بخواهید به جای وردپرس تنها یک لینک را جایگزین کنید کافی است در replace عبارت مد نظرتان را وارد کنید. مثلا می خواهیم هر جا کلمه وردپرس در متن بود به یک آدرس مشخص متصل شود.

متغیر replace را به شکل زیر مقداردهی می کنیم.

$replace = '< a title="آموزش وردپرس"
 href=" https://wphashtag.com/wordpress" target="_blank" rel="noopener">وردپرس</ a>';

حالا هر جایی از متن داخل سایت شما کلمه وردپرس آماده باشد به آدرسی که مشخص کرده اید لینک داده می شود.

همانطور که دیدید شما می توانید به سادگی هر کلمه ای که می خواهید جایگزین کنید. تا به اینجای کار دیدید که فقط یک کلمه را توانستیم تغییر دهیم. حالا اگر چند تغییر بخواهیم اعمال کنید کافی است از آرایه به جای یک متغیر استفاده کنید.

برای آشنایی با آرایه ها مقاله ی آرایه ها در PHP را مطالعه کنید.

function wf_filter_words($content){
    $words = array('وردپرس','دنیا','شروع');
    $replaces = array('$','#','@');
    for($i=0; $i<count($words); $i++){
        $content = preg_replace("/{$words[$i]}/",$replaces[$i], $content);
    }
    return $content; 
}

در این کد دو آرایه را جایگزین کردیم و با یک حلقه for همان مراحل قبلی را پیاده سازی کردیم. دقت کنید این کد بر روی محتوا اثر می گذارد در صورتی که می خواهید این کد بر روی عناوین هم تاثیر بگذارد کافی است فیلتر the_title را فراخوانی کنیم.

add_filter('the_title','wf_filter_words');