آموزش امن قرار دادن کد PHP در ابزارک و بخشهای قالب وردپرس
- افزونه وردپرس
- بروزرسانی شده در

اگه میخواید نتیجه یک کد PHP رو در سایدبار، فوتر یا بخش دیگهای از سایت وردپرسی نشون بدید، بهتره کد رو مستقیماً داخل ابزارک نذارید. روش امنتر اینه که کد PHP رو داخل یک افزونه اختصاصی کوچک قرار بدید، خروجیش رو به شورتکد تبدیل کنید و بعد شورتکد رو در محل دلخواه بذارید.
در این آموزش همه مراحل رو از ساخت فایل افزونه تا فعالکردن شورتکد و نمایش اون در قالبهای کلاسیک و بلوکی با هم انجام میدیم. در آخر هم خطاهای رایج و نکات امنیتی مهم رو بررسی میکنیم تا حتی اگه قبلاً کدنویسی نکردید، مسیر براتون روشن باشه.
آنچه در این مقاله میخوانید
آیا میشه کد PHP رو مستقیماً در ابزارک وردپرس اجرا کرد؟
ابزارکها و بلوکهای محتوایی پیشفرض وردپرس، کد PHP رو در سمت سرور اجرا نمیکنن. برای مثال، بلوک HTML سفارشی برای نوشتن HTML ساخته شده و PHP داخل اون اجرا نمیشه. بعضی افزونهها ممکنه چنین قابلیتی اضافه کنن، ولی اجرای کد دلخواه از داخل پیشخوان سطح دسترسی حساسی ایجاد میکنه.
برای قرار دادن کد PHP در ابزارک وردپرس، کد باید اول در بخش قابلاعتمادی از سمت سرور اجرا بشه. بعد میتونید نتیجه آماده اون رو با یک شورتکد در ابزارک یا بخش دلخواه قالب نشون بدید.
چرا اجرای مستقیم کد PHP داخل ابزارک امن نیست؟
PHP به فایلها، پایگاه داده و امکانات مدیریتی وردپرس دسترسی داره. پس یک خطای کوچک یا کد مخرب میتونه سایتتون رو از دسترس خارج کنه، اطلاعات حساس رو نمایش بده یا راهی برای نفوذ بسازه.
افزونههایی که اجازه اجرای کد PHP دلخواه رو از داخل ابزارک یا پیشخوان میدن، سطح دسترسی خیلی حساسی ایجاد میکنن. به همین دلیل، بهتره قابلیت موردنیازتون رو در یک افزونه اختصاصی محدود و قابلبررسی بنویسید. راهنمای رسمی ساخت افزونه وردپرس ساختار پایه این روش رو توضیح میده.
روش امن چیه؟ ساخت شورتکد و نمایش خروجی اون
شورتکد یک عبارت کوتاه مثل [mihanwp_site_info] هست که وردپرس اون رو با خروجی یک تابع مشخص عوض میکنه. کد PHP داخل افزونه اجرا میشه و ابزارک فقط نتیجه نهایی رو نشون میده.
این روش مدیریت کد رو راحتتر میکنه و با عوضکردن قالب هم قابلیتتون باقی میمونه. البته امنبودن نتیجه به خود کدی بستگی داره که داخل افزونه مینویسید.
قبل از قرار دادن کد PHP در وردپرس چه کارهایی انجام بدید؟
- از سایتتون نسخه پشتیبان بگیرید: از فایلها و پایگاه داده یک نسخه سالم داشته باشید تا اگه مشکلی پیش اومد، بتونید سایت رو برگردونید.
- تغییرات رو اول در محیط آزمایشی امتحان کنید: محیط آزمایشی یا Staging یک کپی جدا از سایت اصلیه که بازدیدکنندهها اون رو نمیبینن. کد رو اول همونجا فعال کنید.
- کدهای ناشناس رو روی سایت اجرا نکنید: کدی که منبع و کارکردش رو نمیدونید، ممکنه امنیت یا اطلاعات سایتتون رو به خطر بندازه.
هشدار: فایل افزونه رو مستقیماً روی سایت اصلی ویرایش نکنید. یک اشتباه کوچک در کد PHP ممکنه دسترسی به پیشخوان یا صفحههای سایت رو قطع کنه. اول نسخه پشتیبان بگیرید، کد رو در محیط آزمایشی بررسی کنید و مطمئن بشید راه برگشت دارید.
همچنین بهتره به فایلهای سایت از راه فایلمنیجر هاست یا SFTP دسترسی داشته باشید. SFTP روش امن انتقال و مدیریت فایلهای سروره. اگه افزونه باعث خطا شد، با این دسترسی میتونید پوشه اون رو تغییر نام بدید و غیرفعالش کنید.
ساخت افزونه اختصاصی برای کد PHP
برای این آموزش یک افزونه خیلی کوچک میسازیم که نام و توضیح کوتاه سایتتون رو نمایش میده. این مثال ورودیای از کاربر دریافت نمیکنه و برای یادگرفتن ساختار شورتکد مناسبه.
پوشه و فایل افزونه رو کجا بسازید؟
وارد فایلمنیجر هاست بشید و پوشه نصب وردپرس رو باز کنید. بعد به مسیر wp-content/plugins برید و داخل اون پوشهای با نام mihanwp-widget-shortcode بسازید.
داخل این پوشه یک فایل با نام mihanwp-widget-shortcode.php بسازید. پسوند فایل باید دقیقاً .php باشه.
اطلاعات اولیه افزونه رو چطور اضافه کنید؟
فایل ساختهشده رو برای ویرایش باز کنید و کد زیر رو داخل اون بذارید. بخش ابتدایی کد، نام و نسخه افزونه رو به وردپرس معرفی میکنه. شرط بعدی هم جلوی اجرای مستقیم فایل بیرون از وردپرس رو میگیره.
<?php/** * Plugin Name: MihanWP Widget Shortcode * Description: Displays safe site information through a shortcode. * Version: 1.0.0 */if ( ! defined( 'ABSPATH' ) ) { exit;}کد PHP موردنظرتون رو داخل افزونه قرار بدید
حالا باید تابعی بسازید که خروجی موردنظرتون رو آماده کنه. کد کامل زیر رو جایگزین تمام محتوای فایل کنید. اگه کد قبلی رو نگه میدارید، فقط بخش تابع و خط add_shortcode رو بعد از شرط امنیتی اضافه کنید.
<?php/** * Plugin Name: MihanWP Widget Shortcode * Description: Displays safe site information through a shortcode. * Version: 1.0.0 */if ( ! defined( 'ABSPATH' ) ) { exit;}function mihanwp_render_site_info_shortcode() { $site_name = get_bloginfo( 'name' ); $site_description = get_bloginfo( 'description' ); $output = '<div class="mihanwp-site-info">'; $output .= '<strong>' . esc_html( $site_name ) . '</strong>'; if ( $site_description ) { $output .= '<p>' . esc_html( $site_description ) . '</p>'; } $output .= '</div>'; return $output;}add_shortcode( 'mihanwp_site_info', 'mihanwp_render_site_info_shortcode' );بعد از قراردادن کد، فایل رو ذخیره کنید. حواستون باشه قبل از <?php فاصله یا متن اضافهای نباشه. در پایان فایل هم نیازی به نوشتن ?> ندارید.
تبدیل خروجی کد PHP به شورتکد
شورتکد چیه و چه کاری انجام میده؟
شورتکد بین محتوای سایت و تابع PHP ارتباط میسازه. وقتی وردپرس عبارت [mihanwp_site_info] رو در یک محل پشتیبانیشده پیدا میکنه، تابع مربوط به اون رو اجرا میکنه و خروجی تابع رو جای عبارت میذاره.
نام شورتکد باید تا جای ممکن اختصاصی باشه تا با قالب یا افزونه دیگهای تداخل پیدا نکنه. برای همین در این مثال از پیشوند mihanwp_ استفاده کردیم.
یک شورتکد ساده چطور ساخته میشه؟
تابع mihanwp_render_site_info_shortcode خروجی رو میسازه و اون رو با return برمیگردونه. خط زیر هم نام شورتکد رو به اون تابع وصل میکنه:
add_shortcode( 'mihanwp_site_info', 'mihanwp_render_site_info_shortcode' );تابع شورتکد بهتره خروجی رو برگردونه و از echo استفاده نکنه. استفاده از echo ممکنه نتیجه رو در جای اشتباهی از صفحه نشون بده.
چطور خروجی کد رو امن کنید؟
هر دادهای که قراره داخل صفحه نمایش داده بشه، باید متناسب با محل استفاده امن بشه. به این کار Escaping یا امنکردن خروجی میگن؛ یعنی کاراکترهای خطرناک طوری تبدیل میشن که مرورگر اونها رو بهعنوان کد اجرایی در نظر نگیره. راهنمای رسمی امنکردن خروجی در وردپرس تابع مناسب برای هر نوع خروجی رو معرفی میکنه.
در مثال ما، تابع esc_html() نام و توضیح سایت رو برای نمایش بهصورت متن امن میکنه. برای آدرسها معمولاً esc_url() و برای مقدار ویژگیهای HTML معمولاً esc_attr() کاربرد داره.
اگه شورتکدتون ورودی دریافت میکنه، اول ورودی رو بررسی و پاکسازی کنید. پاکسازی یا Sanitization یعنی داده نامعتبر و بخشهای ناخواسته قبل از پردازش حذف یا اصلاح بشن. نوع پاکسازی باید با نوع داده، مثل متن، عدد یا آدرس، هماهنگ باشه. برای انتخاب روش درست میتونید راهنمای رسمی پاکسازی داده در وردپرس رو ببینید.
افزونه اختصاصی رو چطور فعال کنید؟
وارد پیشخوان وردپرس بشید و از منوی «افزونهها» گزینه «افزونههای نصبشده» رو باز کنید. افزونه «MihanWP Widget Shortcode» رو پیدا کنید و روی «فعالکردن» بزنید.
اگه افزونه در فهرست دیده نمیشه، نام فایل، پسوند .php و محل پوشه رو دوباره بررسی کنید. فایل اصلی باید مستقیم داخل پوشه mihanwp-widget-shortcode باشه.
قبل از ادامه، افزونه و شورتکد رو روی نسخه فعلی وردپرس و PHP محیط آزمایشی امتحان کنید. باید مطمئن بشید افزونه بدون خطا فعال میشه و شورتکد نام و توضیح سایت رو درست نشون میده.
قرار دادن شورتکد در بخش ابزارکهای قالب کلاسیک
قالب کلاسیک معمولاً ناحیههایی مثل سایدبار و فوتر داره. میتونید این ناحیهها رو از صفحه ابزارکها مدیریت کنید.
در پیشخوان وردپرس به «نمایش ← ابزارکها» برید. ظاهر این صفحه ممکنه با توجه به نسخه وردپرس، قالب فعال و زبان پیشخوان کمی فرق داشته باشه.

ناحیه موردنظرتون، مثل سایدبار یا فوتر، رو باز کنید و با دکمه افزودن بلوک، بلوک «شورتکد» رو اضافه کنید.

عبارت [mihanwp_site_info] رو وارد کنید، تغییرات رو ذخیره کنید و نتیجه رو در صفحه سایت ببینید.
اگه سایتتون رابط قدیمی ابزارکها رو نشون میده و بلوک شورتکد در دسترس نیست، یک ابزارک «متن» اضافه کنید و شورتکد رو داخل اون بذارید. این حالت بیشتر در نصبهایی دیده میشه که رابط کلاسیک ابزارکها رو نگه داشتهان.
قرار دادن شورتکد در قالبهای بلوکی وردپرس
قالب بلوکی بهجای ناحیههای سنتی ابزارک، اجازه میده بخشهای مختلف سایت مثل سربرگ، پابرگ و قالب نوشته رو با بلوکها ویرایش کنید. در این قالبها ممکنه گزینه «ابزارکها» رو زیر منوی نمایش نبینید.
- در پیشخوان به «نمایش ← ویرایشگر» برید.
- بخش موردنظرتون رو باز کنید. اسم گزینهها ممکنه با توجه به نسخه وردپرس و قالب فعال «طراحی»، «الگوها»، «قالبها» یا عنوانی نزدیک به اینها باشه. بعد بخشی مثل پابرگ یا قالب نوشته رو انتخاب کنید.
- با دکمه افزودن بلوک، بلوک «شورتکد» رو اضافه کنید و
[mihanwp_site_info]رو داخل اون بنویسید. بعد تغییرات رو ذخیره کنید.
قبل از ذخیره، دقت کنید که تغییر یک قالب یا بخش قالب ممکنه روی چند صفحه اثر بذاره. نتیجه رو هم در دسکتاپ و هم در موبایل بررسی کنید.
اگه شورتکد اجرا نشد چه چیزهایی رو بررسی کنید؟
نمایش متن شورتکد بهجای نتیجه
اول مطمئن بشید افزونه اختصاصی فعاله و نام شورتکد رو دقیقاً بهشکل [mihanwp_site_info] نوشتید. شورتکد رو داخل بلوک «شورتکد» بذارید؛ بلوک «کد» یا «HTML سفارشی» برای اجرای اون ساخته نشده.
اگه افزونه فعاله ولی هنوز متن خام دیده میشه، احتمال داره محلی که انتخاب کردید شورتکد رو پردازش نکنه. برای آزمایش، شورتکد رو موقتاً داخل یک برگه و بلوک شورتکد قرار بدید.
نمایش صفحه سفید یا خطای جدی وردپرس
این مشکل معمولاً از خطای نگارشی PHP میاد؛ مثلاً یک نقطهویرگول، کوتیشن یا پرانتز جا افتاده. پیام خطا یا ایمیل فنی وردپرس رو بررسی کنید و کد رو با نسخه سالم مقایسه کنید.
اگه به پیشخوان دسترسی ندارید، وارد فایلمنیجر هاست بشید و نام پوشه mihanwp-widget-shortcode رو موقتاً تغییر بدید. وردپرس افزونه رو غیرفعال میکنه و بعد میتونید خطا رو در محیط آزمایشی برطرف کنید.
نمایش ندادن ناحیه ابزارک در قالب
همه قالبها سایدبار یا ناحیه ابزارک ندارن. اگه گزینه «نمایش ← ابزارکها» دیده نمیشه، احتمالاً قالب بلوکی دارید و باید از «نمایش ← ویرایشگر» کمک بگیرید. همچنین ممکنه قالب کلاسیک شما هیچ ناحیه ابزارکی برای بخش موردنظرتون ثبت نکرده باشه.
بررسی تداخل قالب و افزونهها
اگه شورتکد داخل یک برگه کار میکنه ولی در محل دیگه نتیجه نمیده، کش سایت و مرورگر رو پاک کنید. بعد در محیط آزمایشی، تداخل قالب و افزونهها رو بررسی کنید. افزونهها رو یکییکی غیرفعال کنید و هر بار نتیجه رو ببینید تا عامل مشکل مشخص بشه.
این آزمایش رو روی سایت اصلی و در ساعت پربازدید انجام ندید؛ چون غیرفعالکردن افزونهها ممکنه بخشی از امکانات سایت رو موقتاً قطع کنه.
نکات امنیتی مهم برای اجرای کد PHP در وردپرس
- دسترسی ویرایش کد رو محدود کنید: فقط افراد قابلاعتماد باید به فایلمنیجر، SFTP و مدیریت افزونهها دسترسی داشته باشن.
- ورودیها رو بررسی و پاکسازی کنید: هیچ دادهای رو فقط بهخاطر اینکه از فرم، آدرس صفحه یا تنظیمات سایت اومده، امن فرض نکنید.
- خروجی رو متناسب با محل نمایش امن کنید: برای متن، آدرس و ویژگی HTML از تابع مناسب وردپرس کمک بگیرید.
- کد رو داخل فایلهای قالب اصلی قرار ندید: با بهروزرسانی قالب ممکنه تغییراتتون پاک بشن. افزونه اختصاصی باعث میشه کد از ظاهر سایت جدا بمونه.
اگه مجبورید کد مربوط به ظاهر قالب رو تغییر بدید، اول ساختار و کاربرد فایلها رو بشناسید. مقاله ترفندهای فایل functions.php وردپرس برای آشنایی بیشتر با این فایل کمکتون میکنه؛ ولی برای قابلیت مستقلی مثل شورتکد، افزونه اختصاصی انتخاب مرتبتریه.
جمعبندی روش امن قرار دادن کد PHP در ابزارک وردپرس
برای قرار دادن کد PHP در ابزارک وردپرس، PHP رو مستقیماً داخل ابزارک یا بلوک HTML ننویسید. کد رو در یک افزونه اختصاصی کوچک قرار بدید، خروجی اون رو با شورتکد برگردونید و شورتکد رو در بلوک مخصوص خودش بذارید.
قبل از فعالکردن افزونه، نسخه پشتیبان بگیرید و کد رو در محیط آزمایشی امتحان کنید. ورودیها رو پاکسازی کنید، خروجی رو امن کنید و فقط کدی رو اجرا کنید که دقیقاً میدونید چه کاری انجام میده. با این روش، قابلیتتون هم قابلکنترلتر میمونه و هم با تغییر قالب از بین نمیره.
سؤالهای متداول
آیا میشه PHP رو داخل بلوک HTML سفارشی نوشت؟
نه. بلوک HTML سفارشی پیشفرض وردپرس، PHP رو در سمت سرور اجرا نمیکنه. کد PHP رو داخل افزونه اختصاصی بذارید و نتیجه اون رو با شورتکد نمایش بدید.
آیا برای اجرای PHP در ابزارک به افزونه نیاز داریم؟
برای روش این آموزش بله؛ ولی لازم نیست افزونه اجرای مستقیم PHP نصب کنید. میتونید یک افزونه اختصاصی کوچک بسازید که فقط کد موردنیازتون و شورتکد مربوط به اون رو داره.
شورتکد در قالبهای کلاسیک و بلوکی کار میکنه؟
بله، اگه محل انتخابشده بلوک شورتکد رو پشتیبانی کنه. در قالب کلاسیک معمولاً میتونید اون رو از بخش «نمایش ← ابزارکها» اضافه کنید. در قالب بلوکی هم میتونید بلوک شورتکد رو از بخش «نمایش ← ویرایشگر» داخل قالب یا بخش موردنظرتون بذارید.
چرا نباید کد PHP ناشناس رو روی سایت اصلی اجرا کنیم؟
کد PHP به بخشهای حساس سایت دسترسی داره و یک کد ناشناس ممکنه اطلاعات رو تغییر بده، بدافزار اضافه کنه یا سایت رو از دسترس خارج کنه. فقط کدی رو اجرا کنید که منبع و کارکردش رو میشناسید و اول اون رو در محیط آزمایشی بررسی کنید.

سلام و عرض ادب
می خوام یک ابزارک به ستون کناری اضافه کنم که تمام پست های مربوط به دسته آموزشی که کاربر در حال مطالعه هست را نمایش دهد و پستی که کاربر در حال حاضر درحال مطالعه آن است هم مشخص باشد…نمیدونم تونستم منظورمو منتقل کنم یا نه…
آیا افزونه ای است که بتونم با اون این ابزارک رو به سایدبار صفحات پست هام اضافه کنم یا نیاز به کدنویسی داره؟
تشکر
سلام بله متوجه منظور شما شدیم. برای اینکار باید php بنویسید و از دسته بندی current category اخرین پستها را نمایش دهید. خیر متاسفانه افزونه ندارد.