ترفندهای فایل functions.php وردپرس؛ کاربردی و امن

ترفندهای فایل functions.php وردپرس؛ کاربردی و امن

با فایل functions.php می‌تونید رفتار قالب، پیشخوان، نوشته‌ها، تصاویر و خوراک RSS سایتتون رو تغییر بدید. البته همین فایل حساسه و حتی یک خط کد اشتباه ممکنه سایت رو با خطای بحرانی روبه‌رو کنه. برای همین قرار نیست فقط چند کد رو کپی کنیم؛ اول روش امن اضافه‌کردن کد و راه برگشت از خطا رو یاد می‌گیرید، بعد سراغ نمونه‌های کاربردی می‌ریم.

قبل از شروع، یادتون باشه functions.php همیشه بهترین جا برای نگهداری کد نیست. تغییرهایی که به ظاهر سایت وابسته‌ان بهتره داخل چایلدتم، یعنی قالب فرزندی، باشن. قابلیت‌هایی هم که باید بعد از عوض‌کردن قالب باقی بمونن، جای مناسب‌تری مثل افزونه اختصاصی یا Code Snippets دارن.

آنچه در این مقاله می‌خوانید

فایل functions.php وردپرس چیه و چه کاری انجام می‌ده؟

functions.php یکی از فایل‌های قالب وردپرسه. وقتی قالب فعال باشه، وردپرس این فایل رو بارگذاری می‌کنه تا تنظیمات و امکانات موردنیاز قالب اجرا بشن. توسعه‌دهنده قالب می‌تونه با کمک اون جایگاه فهرست، اندازه تصاویر، ناحیه ابزارک و قابلیت‌های مشابه رو ثبت کنه.

تفاوت فایل functions.php با افزونه وردپرس

هر دو می‌تونن کد PHP اجرا کنن، ولی زمان و شرایط اجراشون یکی نیست. functions.php به قالب فعال وابسته‌ست، درحالی‌که افزونه جدا از قالب کار می‌کنه. پس تغییرهای مربوط به ظاهر یا ساختار قالب معمولاً جای بهتری در چایلدتم دارن، ولی قابلیتی مثل ساخت کد کوتاه بهتره داخل افزونه اختصاصی یا Code Snippets قرار بگیره.

افزودن کد سفارشی به وردپرس بدون خرابی سایت
افزودن کد سفارشی به وردپرس بدون خرابی سایت

چه کدهایی به قالب وابسته هستن؟

  • ثبت جایگاه فهرست برای قالب کلاسیک
  • تعریف ناحیه ابزارک و سایدبار
  • تعریف اندازه تصویری که همون قالب ازش استفاده می‌کنه
  • تغییر خروجی بخش‌هایی که مستقیم به فایل‌های قالب وصل هستن

بعد از تغییر قالب چه اتفاقی برای کدها می‌افته؟

فایل‌های قالب قبلی معمولاً پاک نمی‌شن، ولی دیگه اجرا هم نمی‌شن. در نتیجه، قابلیت‌هایی که داخل functions.php اون قالب ساخته بودید از دسترس خارج می‌شن. انتقال همه کدها به قالب جدید هم لزوماً کار درستی نیست؛ اول باید ببینید هر کد واقعاً به قالب وابسته‌ست یا باید جای دیگه‌ای نگهداری بشه.

قبل از اضافه کردن کد به functions.php این نکته‌ها رو جدی بگیرید

  • اول نسخه پشتیبان بگیرید: از فایل‌ها و پایگاه داده سایت بکاپ داشته باشید و مطمئن بشید روش برگردوندنش رو بلدید.
  • قالب اصلی رو مستقیم ویرایش نکنید: با به‌روزرسانی قالب، تغییرهایی که مستقیم انجام دادید ممکنه بازنویسی بشن.
  • برای تغییرهای وابسته به قالب از چایلدتم کمک بگیرید: چایلدتم یا قالب فرزندی، تغییرهای شما رو جدا از فایل‌های اصلی قالب نگه می‌داره.
  • قابلیت‌های مستقل رو جدا نگه دارید: برای کدهایی که باید بعد از تغییر قالب هم اجرا بشن، افزونه اختصاصی یا Code Snippets انتخاب مناسب‌تریه.
  • اول روی سایت آزمایشی بررسی کنید: سایت آزمایشی یا Staging یک نسخه غیرعمومی از سایتتونه که می‌تونید تغییرها رو بدون آسیب‌زدن به سایت اصلی روی اون امتحان کنید.
  • تگ پایانی PHP رو اضافه نکنید: اگه فایل با <?php شروع شده، لازم نیست آخر قطعه‌کد ?> بنویسید.
صفحه افزودن کد php در افزونه Code Snippets
صفحه افزودن کد php در افزونه Code Snippets

کدهای این مقاله نمونه‌های پایه هستن. نتیجه اجرای هرکدوم ممکنه به قالب، افزونه‌ها و نسخه PHP هاستتون بستگی داشته باشه. پس نمونه‌ها رو یکی‌یکی روی سایت آزمایشی امتحان کنید.

چطور به فایل functions.php دسترسی پیدا کنید؟

دسترسی از طریق هاست یا FTP

در فایل منیجر هاست به پوشه wp-content/themes برید، پوشه چایلدتم فعال رو باز کنید و فایل functions.php رو پیدا کنید. اگه از FTP، یعنی روشی برای انتقال فایل بین کامپیوتر و هاست، استفاده می‌کنید باز هم باید همین مسیر رو باز کنید. قبل از هر تغییری، یک نسخه از فایل فعلی دانلود کنید.

فایل functions.php وردپرس در فولدر چایلد تم
فایل functions.php وردپرس در فولدر چایلد تم

دسترسی از داخل پیشخوان وردپرس

اگه ویرایشگر پرونده پوسته روی سایتتون فعال باشه، گزینه «نمایش ← ویرایشگر پرونده پوسته» رو می‌بینید. این روش برای افراد مبتدی انتخاب خوبی نیست؛ چون یک خطای نحوی ممکنه دسترسی به پیشخوان رو هم قطع کنه. ویرایش از فایل منیجر یا استفاده از Code Snippets معمولاً راه برگشت راحت‌تری داره.

دسترسی از داخل پیشخوان وردپرس به ویرایشگر قالب وردپرس
دسترسی از داخل پیشخوان وردپرس به ویرایشگر قالب وردپرس

روش پیشنهادی برای اضافه کردن کد بدون ویرایش فایل

برای بیشتر کدهایی که به قالب وابسته نیستن، از روش آموزش افزودن توابع سفارشی با Code Snippets کمک بگیرید. هر قابلیت رو در یک قطعه‌کد جدا بذارید، یک اسم واضح براش انتخاب کنید و بعد از آزمایش فعالش کنید. داخل Code Snippets هم معمولاً نباید تگ آغازین <?php رو بنویسید.

اگه بعد از افزودن کد سایت خراب شد، چطور برش گردونید؟

رفع خطای بحرانی از طریق فایل منیجر هاست

اگه آخرین تغییرتون داخل functions.php بوده، فایل رو از طریق هاست باز کنید و همون قطعه‌کد رو بردارید. اگه پیدا کردن ابتدا و انتهای کد براتون سخته، نسخه سالمی رو که قبل از ویرایش دانلود کرده بودید برگردونید. بدون اینکه کدهای دیگه رو بشناسید، چیزی از فایل حذف نکنید.

غیرفعال کردن قطعه‌کد مشکل‌دار

اگه کد رو با Code Snippets اضافه کردید و هنوز پیشخوان باز می‌شه، همون قطعه‌کد رو غیرفعال کنید. اگه پیشخوان بالا نمیاد، می‌تونید از روش بازیابی خود افزونه یا تغییر نام پوشه افزونه در هاست کمک بگیرید. یادتون باشه تغییر نام پوشه، کل افزونه و همه قطعه‌کدهای داخل اون رو موقتاً متوقف می‌کنه.

غیرفعال کردن اسنیپت‌ها یا کدهای خراب
غیرفعال کردن اسنیپت‌ها یا کدهای خراب

بررسی گزارش خطا بدون نمایش خطا به بازدیدکننده

برای پیدا کردن علت مشکل می‌تونید ثبت گزارش خطای وردپرس رو موقتاً روشن کنید، ولی بهتره خطاها روی صفحه عمومی سایت نمایش داده نشن. گزارش خطا معمولاً در فایل wp-content/debug.log ذخیره می‌شه. چون این فایل ممکنه اطلاعات فنی حساسی داشته باشه، بعد از عیب‌یابی حالت اشکال‌زدایی رو خاموش کنید و فایل گزارش رو در دسترس عموم نذارید.

ترفندهای فایل functions.php وردپرس برای مدیریت سایت

تغییر متن پایین پیشخوان وردپرس

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

PHP
function mihanwp_change_admin_footer_text( $text ) {    return 'مدیریت سایت با تیم شما';}add_filter( 'admin_footer_text', 'mihanwp_change_admin_footer_text' );

اضافه کردن ابزارک سفارشی به پیشخوان

ابزارک پیشخوان همون جعبه کوچیکیه که در صفحه «پیشخوان ← خانه» می‌بینید. می‌تونید یک راهنمای کوتاه یا اطلاعات تماس پشتیبانی رو داخل اون قرار بدید.

PHP
function mihanwp_register_dashboard_widget() {    wp_add_dashboard_widget(        'mihanwp_help_widget',        'راهنمای مدیریت سایت',        'mihanwp_render_dashboard_widget'    );}add_action( 'wp_dashboard_setup', 'mihanwp_register_dashboard_widget' );function mihanwp_render_dashboard_widget() {    echo '<p>برای دریافت راهنما با مدیر فنی سایت تماس بگیرید.</p>';}

حذف پنل خوش‌آمدگویی پیشخوان

اگه کاربران سایتتون به پنل خوش‌آمدگویی احتیاجی ندارن، این کد اون رو از صفحه اصلی پیشخوان برمی‌داره:

PHP
function mihanwp_remove_welcome_panel() {    remove_action( 'welcome_panel', 'wp_welcome_panel' );}add_action( 'wp_dashboard_setup', 'mihanwp_remove_welcome_panel' );

تغییر لوگوی نوار مدیریت وردپرس

برای شخصی‌تر کردن پنل مدیریت می‌تونید آموزش سفارشی‌کردن پنل مدیریت وردپرس رو ببینید. روش زیر آیکون وردپرس رو با تصویری از چایلدتم عوض می‌کنه. فایل لوگو رو با نام admin-logo.svg داخل پوشه images چایلدتم بذارید.

PHP
function mihanwp_admin_bar_logo_css() {    $logo_url = get_stylesheet_directory_uri() . '/images/admin-logo.svg';    echo '<style>#wpadminbar #wp-admin-bar-wp-logo > .ab-item .ab-icon:before{content:"";background:url(' . esc_url( $logo_url ) . ') center/20px 20px no-repeat;width:20px;height:20px;top:6px;}</style>';}add_action( 'admin_head', 'mihanwp_admin_bar_logo_css' );

اضافه کردن فیلدهای تکمیلی به پروفایل نویسنده

نمونه زیر یک فیلد برای نشانی شبکه اجتماعی به پروفایل کاربر اضافه می‌کنه. وردپرس مقدار واردشده رو پیش از ذخیره، به‌شکل نشانی اینترنتی پاک‌سازی می‌کنه.

PHP
function mihanwp_add_user_contact_method( $methods ) {    $methods['social_profile'] = 'نشانی پروفایل اجتماعی';    return $methods;}add_filter( 'user_contactmethods', 'mihanwp_add_user_contact_method' );function mihanwp_sanitize_social_profile( $value ) {    return esc_url_raw( $value );}add_filter( 'pre_user_social_profile', 'mihanwp_sanitize_social_profile' );

ترفندهای کاربردی برای نوشته‌ها و محتوای وردپرس

تغییر طول خلاصه نوشته‌ها

گزیده یا Excerpt همون خلاصه کوتاه نوشته‌ست. عددی که در کد زیر می‌بینید، تعداد تقریبی واژه‌های گزیده خودکار رو مشخص می‌کنه.

PHP
function mihanwp_excerpt_length( $length ) {    return 30;}add_filter( 'excerpt_length', 'mihanwp_excerpt_length', 999 );

تغییر متن ادامه مطلب

با این نمونه، نوشته انتهای گزیده خودکار به یک لینک واضح و قابل‌فهم تبدیل می‌شه:

PHP
function mihanwp_excerpt_more( $more ) {    return '… <a href="' . esc_url( get_permalink() ) . '">ادامه مطلب</a>';}add_filter( 'excerpt_more', 'mihanwp_excerpt_more' );

نمایش جعبه اطلاعات نویسنده زیر نوشته

این کد، نام، تصویر و توضیح کوتاه نویسنده رو فقط زیر صفحه تکی نوشته نشون می‌ده. اطلاعات خروجی هم قبل از نمایش امن‌سازی می‌شن.

PHP
function mihanwp_append_author_box( $content ) {    if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {        return $content;    }    $author_id = (int) get_the_author_meta( 'ID' );    $name       = get_the_author_meta( 'display_name', $author_id );    $bio        = get_the_author_meta( 'description', $author_id );    if ( '' === $bio ) {        return $content;    }    $box  = '<aside class="mihanwp-author-box">';    $box .= get_avatar( $author_id, 80 );    $box .= '<h3>' . esc_html( $name ) . '</h3>';    $box .= '<p>' . esc_html( $bio ) . '</p>';    $box .= '</aside>';    return $content . $box;}add_filter( 'the_content', 'mihanwp_append_author_box' );

برای شکل و ظاهر این جعبه باید CSS هماهنگ با قالبتون بنویسید. فیلتر امنیتی توضیحات پروفایل رو هم حذف نکنید.

نمایش تعداد کاربران با کد کوتاه

کد کوتاه یا Shortcode یک عبارت داخل کروشه‌ست که خروجی پویا تولید می‌کنه. بعد از اضافه‌کردن کد زیر، عبارت [mihanwp_user_count] رو داخل نوشته یا برگه بذارید.

PHP
function mihanwp_user_count_shortcode() {    $counts = count_users();    return number_format_i18n( (int) $counts['total_users'] );}add_shortcode( 'mihanwp_user_count', 'mihanwp_user_count_shortcode' );

این قابلیت به ظاهر قالب وابسته نیست، پس بهتره اون رو داخل افزونه اختصاصی یا Code Snippets قرار بدید. اگه می‌خواید یک کد کوتاه رو مستقیم در فایل قالب اجرا کنید، آموزش نمایش شورت کد در قالب وردپرس هم کمکتون می‌کنه.

اضافه کردن کلاس‌های زوج و فرد به نوشته‌ها

کد زیر در هر چرخه نمایش نوشته‌ها، کلاس odd یا even رو به خروجی تابع post_class() اضافه می‌کنه:

PHP
function mihanwp_odd_even_post_class( $classes ) {    static $index = 0;    $classes[] = ( 0 === $index % 2 ) ? 'odd' : 'even';    $index++;    return $classes;}add_filter( 'post_class', 'mihanwp_odd_even_post_class' );

ترفندهای تصاویر و رسانه در وردپرس

تعریف اندازه سفارشی برای تصاویر

این نمونه یک اندازه تصویر با عرض ۶۰۰ و ارتفاع ۴۰۰ پیکسل می‌سازه. مقدار true یعنی وردپرس تصویر رو برش می‌ده تا به همین نسبت برسه.

PHP
function mihanwp_register_image_sizes() {    add_image_size( 'mihanwp-card', 600, 400, true );}add_action( 'after_setup_theme', 'mihanwp_register_image_sizes' );

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

جلوگیری از لینک شدن خودکار تصاویر

این تنظیم، گزینه پیش‌فرض لینک تصاویر تازه رو روی «هیچ‌کدام» می‌ذاره. تصویرهایی که قبلاً اضافه کردید تغییری نمی‌کنن.

PHP
function mihanwp_disable_default_image_link() {    if ( 'none' !== get_option( 'image_default_link_type' ) ) {        update_option( 'image_default_link_type', 'none' );    }}add_action( 'admin_init', 'mihanwp_disable_default_image_link' );

لینک کردن خودکار تصویر شاخص به نوشته

اگه قالب کلاسیکتون تصویر شاخص رو در فهرست نوشته‌ها بدون لینک نشون می‌ده، این فیلتر می‌تونه تصویر رو به صفحه همون نوشته وصل کنه:

PHP
function mihanwp_link_post_thumbnail( $html, $post_id ) {    if ( is_singular() || '' === $html ) {        return $html;    }    return '<a href="' . esc_url( get_permalink( $post_id ) ) . '">' . $html . '</a>';}add_filter( 'post_thumbnail_html', 'mihanwp_link_post_thumbnail', 10, 2 );

مدیریت فرمت‌های مجاز برای بارگذاری فایل

وردپرس نوع فایل‌ها رو با MIME type کنترل می‌کنه؛ یعنی یک شناسه فنی که فرمت فایل رو مشخص می‌کنه. فقط فرمتی رو مجاز کنید که واقعاً بهش احتیاج دارید. نمونه زیر بارگذاری فایل متنی CSV رو برای کاربری فعال می‌کنه که اجازه آپلود فایل داره:

PHP
function mihanwp_allow_csv_upload( $mimes ) {    $mimes['csv'] = 'text/csv';    return $mimes;}add_filter( 'upload_mimes', 'mihanwp_allow_csv_upload' );

چرا بارگذاری SVG بدون پاک‌سازی امن نیست؟

SVG فقط یک تصویر معمولی نیست و ممکنه محتوای فعال یا کد خطرناک داخلش داشته باشه. صرفاً اضافه‌کردن MIME این فرمت، فایل رو امن نمی‌کنه. اگه واقعاً به SVG احتیاج دارید، دسترسی بارگذاری رو محدود کنید و فایل‌ها رو با یک راهکار معتبر پاک‌سازی کنید. برای یک سایت مبتدی، تبدیل تصویر به WebP یا PNG معمولاً راه ساده‌تریه.

ترفندهای قالب و بخش‌های نمایشی سایت

ثبت جایگاه تازه برای فهرست در قالب کلاسیک

PHP
function mihanwp_register_menu_location() {    register_nav_menus(        array(            'footer-menu' => 'فهرست پایین سایت',        )    );}add_action( 'after_setup_theme', 'mihanwp_register_menu_location' );

ثبت جایگاه فقط اون رو به وردپرس معرفی می‌کنه. برای اینکه فهرست واقعاً نمایش داده بشه، توسعه‌دهنده قالب کلاسیک باید تابع wp_nav_menu() رو در جای مناسب فایل قالب بذاره.

ساخت ناحیه ابزارک یا سایدبار سفارشی در قالب کلاسیک

PHP
function mihanwp_register_sidebar() {    register_sidebar(        array(            'name'          => 'سایدبار نوشته‌ها',            'id'            => 'post-sidebar',            'description'   => 'ابزارک‌های کنار نوشته‌ها',            'before_widget' => '<section id="%1$s" class="widget %2$s">',            'after_widget'  => '</section>',            'before_title'  => '<h3 class="widget-title">',            'after_title'   => '</h3>',        )    );}add_action( 'widgets_init', 'mihanwp_register_sidebar' );

برای نمایش این ناحیه، فایل قالب باید dynamic_sidebar( 'post-sidebar' ) رو فراخوانی کنه. اگه با قراردادن PHP داخل قالب آشنا نیستید، راهنمای قرار دادن امن کد PHP در بخش‌های قالب رو بخونید.

نمایش سال کپی‌رایت به‌صورت خودکار

در قالب کلاسیک می‌تونید یک کد کوتاه بسازید و اون رو در بخش دلخواه نمایش بدید:

PHP
function mihanwp_current_year_shortcode() {    return esc_html( wp_date( 'Y' ) );}add_shortcode( 'mihanwp_year', 'mihanwp_current_year_shortcode' );

بعد از اون، [mihanwp_year] سال جاری رو براساس منطقه زمانی تنظیم‌شده در وردپرس نشون می‌ده.

تفاوت اجرای این تغییرها در قالب کلاسیک و قالب بلوکی

قالب کلاسیک بیشتر به فایل‌هایی مثل header.php، footer.php و sidebar.php تکیه داره. قالب بلوکی بخش‌های ظاهری سایت رو با الگوها و بلوک‌ها در ویرایشگر سایت می‌سازه. به همین دلیل، ثبت سایدبار یا جایگاه فهرست کلاسیک ممکنه در قالب بلوکی هیچ نتیجه قابل‌مشاهده‌ای نداشته باشه. قبل از اضافه‌کردن کد، نوع قالب و روش پیشنهادی همون قالب رو بررسی کنید.

ترفندهای RSS وردپرس

RSS یا خوراک سایت، یک نسخه ساخت‌یافته از مطالب تازه سایته که خبرخوان‌ها و بعضی سرویس‌ها اون رو دریافت می‌کنن.

اضافه کردن تصویر شاخص به خوراک RSS

PHP
function mihanwp_add_thumbnail_to_feed( $content ) {    if ( is_feed() && has_post_thumbnail() ) {        $image = get_the_post_thumbnail( null, 'medium' );        return $image . $content;    }    return $content;}add_filter( 'the_excerpt_rss', 'mihanwp_add_thumbnail_to_feed' );add_filter( 'the_content_feed', 'mihanwp_add_thumbnail_to_feed' );

اضافه کردن متن دلخواه به انتهای مطالب RSS

PHP
function mihanwp_append_feed_note( $content ) {    if ( ! is_feed() ) {        return $content;    }    $note = '<p>این مطلب اولین‌بار در ' . esc_html( get_bloginfo( 'name' ) ) . ' منتشر شده.</p>';    return $content . $note;}add_filter( 'the_content_feed', 'mihanwp_append_feed_note' );

ایجاد تأخیر کوتاه در انتشار مطالب داخل RSS

این تأخیر کوتاه بهتون فرصت می‌ده اشتباه‌های فوری نوشته رو قبل از رسیدن مطلب به خبرخوان‌ها اصلاح کنید. عدد ۱۰ در نمونه زیر یعنی ده دقیقه:

PHP
function mihanwp_delay_feed_posts( $where, $query ) {    global $wpdb;    if ( ! $query->is_feed() ) {        return $where;    }    $delay_minutes = 10;    $cutoff = gmdate( 'Y-m-d H:i:s', time() - ( $delay_minutes * MINUTE_IN_SECONDS ) );    return $where . $wpdb->prepare( " AND {$wpdb->posts}.post_date_gmt <= %s", $cutoff );}add_filter( 'posts_where', 'mihanwp_delay_feed_posts', 10, 2 );

حذف یک دسته خاص از RSS

شناسه دسته موردنظرتون رو جای عدد ۵ بذارید. علامت منفی به وردپرس می‌گه اون دسته رو از خوراک کنار بذاره.

PHP
function mihanwp_exclude_category_from_feed( $query ) {    if ( ! is_admin() && $query->is_main_query() && $query->is_feed() ) {        $query->set( 'cat', '-5' );    }}add_action( 'pre_get_posts', 'mihanwp_exclude_category_from_feed' );

غیرفعال کردن RSS فقط وقتی واقعاً بهش نیاز ندارید

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

ترفندهای امنیتی functions.php که باید با احتیاط استفاده کنید

نمایش پیام عمومی برای خطاهای ورود

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

PHP
function mihanwp_generic_login_error() {    return 'اطلاعات ورود درست نیست. نام کاربری، ایمیل یا رمز عبورتون رو دوباره بررسی کنید.';}add_filter( 'login_errors', 'mihanwp_generic_login_error' );

محدود کردن ورود با ایمیل و بررسی تأثیرش روی کاربران

وردپرس به‌صورت پیش‌فرض اجازه ورود با نام کاربری یا ایمیل رو می‌ده. حذف ورود با ایمیل لزوماً امنیت قابل‌توجهی ایجاد نمی‌کنه و ممکنه کاربران رو گیج کنه. بهتره اول سراغ رمزهای قوی، ورود دومرحله‌ای، محدودکردن تلاش‌های ناموفق و به‌روزرسانی منظم برید. اگه با درنظرگرفتن این اثرها باز هم می‌خواید ورود با ایمیل رو متوقف کنید، کد زیر فیلتر مربوط رو برمی‌داره:

PHP
remove_filter( 'authenticate', 'wp_authenticate_email_password', 20 );

مدیریت XML-RPC بر اساس نیاز سایت

XML-RPC راهی برای ارتباط بعضی برنامه‌ها و سرویس‌های بیرونی با وردپرسه. خاموش‌کردن کامل اون ممکنه اتصال ابزارهای وابسته رو قطع کنه. اگه بررسی کردید و مطمئن شدید سایتتون هیچ وابستگی‌ای به اون نداره، این فیلتر احراز هویت XML-RPC رو غیرفعال می‌کنه:

PHP
add_filter( 'xmlrpc_enabled', '__return_false' );

چرا مخفی کردن نسخه وردپرس جای به‌روزرسانی رو نمی‌گیره؟

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

کدهایی که بهتره داخل functions.php قرار نگیرن

  • ساخت حساب مدیر با نام کاربری و رمز ثابت: اطلاعات ورود داخل فایل باقی می‌مونه و تکرار اجرای کد هم خطرناکه. برای بازیابی دسترسی از روش‌های رسمی وردپرس یا هاست کمک بگیرید.
  • تغییر دائمی آدرس سایت با اجرای مکرر update_option: این کار با هر درخواست، پایگاه داده رو درگیر می‌کنه و یک اشتباه در نشانی ممکنه دسترسی به سایت رو مختل کنه.
  • آپلود SVG بدون پاک‌سازی: اضافه‌کردن پسوند و MIME به‌تنهایی جلوی محتوای مخرب رو نمی‌گیره.
  • حذف فیلترهای امنیتی محتوای پروفایل: حذف KSES، یعنی فیلتر کنترل HTML، ممکنه اجازه ذخیره کد ناامن رو بده.
  • کدهای قدیمی ناسازگار با PHP جدید: تابع‌های حذف‌شده، کوتیشن ناقص یا نام اشتباه تابع می‌تونن خطای بحرانی ایجاد کنن.
  • قابلیت‌های مستقل از قالب: کد کوتاه، نوع نوشته سفارشی و منطق اصلی سایت نباید با عوض‌شدن قالب از دسترس خارج بشن.

چطور کیفیت و امنیت هر قطعه‌کد رو بررسی کنید؟

  1. هدف دقیق کد رو مشخص کنید: تا وقتی نمی‌دونید نتیجه کد چیه، اون رو روی سایت اجرا نکنید.
  2. منبع و تاریخ کد رو بررسی کنید: کدی که سال‌ها به‌روز نشده ممکنه با وردپرس یا PHP سایتتون هماهنگ نباشه.
  3. سازگاری رو بسنجید: نسخه وردپرس، PHP، قالب و افزونه‌های مرتبط رو در نظر بگیرید.
  4. ورودی و خروجی رو امن‌سازی کنید: اطلاعات ورودی باید بررسی و پاک‌سازی بشن. خروجی هم باید متناسب با جایی که نمایش داده می‌شه امن‌سازی بشه.
  5. روی سایت آزمایشی اجرا کنید: هر بار فقط یک قطعه‌کد رو فعال کنید تا اگه مشکلی پیش اومد، علتش روشن بمونه.
  6. نتیجه رو بررسی کنید: گزارش خطا، پیشخوان، صفحه عمومی، فرم‌ها، کش و بخشی رو که کد تغییر داده آزمایش کنید.

اگه دقیقاً نمی‌دونید یک کد چه کاری انجام می‌ده، اجرا نکردنش انتخاب امن‌تریه. برای تغییرهای مهم یا کدهایی که اطلاعات کاربران رو پردازش می‌کنن هم بهتره از یک توسعه‌دهنده وردپرس کمک بگیرید.

جمع‌بندی ترفندهای فایل functions.php وردپرس

ترفندهای فایل functions.php وردپرس می‌تونن تغییرهای کوچیک و کاربردی زیادی در سایت ایجاد کنن، ولی محل نگهداری کد به‌اندازه خود کد مهمه. تغییر وابسته به قالب رو داخل چایلدتم بذارید و قابلیت مستقل رو به افزونه اختصاصی یا Code Snippets بسپارید.

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

سؤال‌های رایج درباره فایل functions.php وردپرس

فایل functions.php وردپرس کجاست؟

این فایل معمولاً داخل پوشه قالب و در مسیر wp-content/themes/نام-قالب/functions.php قرار داره. اگه از چایلدتم استفاده می‌کنید، فایل چایلدتم رو ویرایش کنید و سراغ فایل قالب اصلی نرید.

چرا بعد از ویرایش functions.php سایت با خطای بحرانی روبه‌رو می‌شه؟

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

استفاده از Code Snippets بهتره یا چایلدتم؟

برای قابلیتی که به ظاهر سایت وابسته نیست، Code Snippets یا افزونه اختصاصی معمولاً انتخاب بهتریه. اگه تغییر به فایل‌ها یا امکانات قالب وابسته‌ست، چایلدتم جای مناسب‌تریه.

آیا با تغییر قالب، کدهای functions.php پاک می‌شن؟

فایل‌های قالب قبلی معمولاً پاک نمی‌شن، ولی چون قالب دیگه فعال نیست، کدهای functions.php اون هم اجرا نمی‌شن. قابلیت‌هایی رو که باید همیشه باقی بمونن داخل افزونه اختصاصی یا Code Snippets نگه دارید.

آیا اضافه کردن کد به functions.php برای افراد مبتدی امنه؟

اگه کد رو نمی‌شناسید یا روش بازیابی سایت رو بلد نیستید، ویرایش مستقیم این فایل امن نیست. اول بکاپ بگیرید، روی سایت آزمایشی تمرین کنید و برای کدهای مستقل از قالب از Code Snippets کمک بگیرید.

نظر شما در این مورد چیه؟

  1. U356103۲۷ آذر ۱۴۰۳

    سلام
    من فایل فانکشن رو ادیت میکنم و تغییرات هم اعمال میشه ولی بعد چند وقت ، پاک میشه کدایی که اضافه کرده بودم. مشکل از کجاست ؟

  2. U334823۲۰ تیر ۱۴۰۳

    سلام من داشتم فایل functions.php قالب وودمارت سایت رو ویرایش می کردم که سایت با مشکل مواجه شد و الان ارور زیر نشون داده میشه:
    Parse error: syntax error, unexpected ‘hrNEOj7hJws7iNHKOZFfb’ (T_STRING) in /home/donyaye3/public_html/wp-content/themes/woodmart/functions.php on line 7
    یک خطای مهم در این وب سایت رخ داده است.
    چطور باید مشکل رو حل کنم. هاستینگ سایت پاسخگو نبود و خودم برنامه نویسی بلد نیستم. فکر می‌کنم خط ۷ این فایل ارور داره…

  3. U311198۸ بهمن ۱۴۰۰

    سلام
    من حالت دیباگ رو فعال کردم
    این ارور امد
    مشکل از کجاست و چطور باید برطرفش کنم

    Notice: تابع acf_get_value به طورنادرست فراخوانی شد. زمینه‌های سفارشی پیشرفته نسخه حرفه ای – We’ve detected one or more calls to retrieve ACF field values before ACF has been initialized. This is not supported and can result in malformed or missing data. Learn how to fix this. لطفاً برای اطلاعات بیشتر، اشکال زدایی در وردپرس را مشاهده کنید. (این پیام در نگارش 5.11.1 افزوده شده است.) in /home/karsito2……./domains/……../public_html/wp-includes/functions.php on line 5768

    • تیم پشتیبانیتیم پشتیبانی۱۰ بهمن ۱۴۰۰

      درود
      Warning‌ها و notice هادر وردپرس مشکل خاصی برای سایت شما ایجاد نمی‌کنند. در صورتی که سایت شما مشکل برنامه نویسی داشته باشد، ارور ۵۰۰ دریافت خواهید کرد. در نتیجه نگران این اخطار‌ها نباشید.

  4. U18766۱۲ اسفند ۱۳۹۹

    سلام وقت بخیر
    من میخوام به صفحه ورود تایید گوگل اضافه کنم، حالا نسخه 3 یا 2 خیلی فرق نداره، پیشنهاد شما چیه ؟ چه افزونه ای بهترین کار رو انجام میده، من نمیخام توی تمام صفحات کد google فراخوانی بشه، فقط میخام کدش توی صفحه ورود لود بشه و همونجا هم کاربر verfiy بشه، ممنونم از شما

    • رضا راد۱۲ اسفند ۱۳۹۹

      سلام متاسفانه اکثر افزونه‌ها کد رو در همه صفحات لود می‌کنند. باید این مورد رو بررسی کنید افزونه خاصی مد نظرم نیست. اما google recaptcha را نصب کنید.

  5. U30989۳۰ مهر ۱۳۹۹

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

    • تیم پشتیبانیتیم پشتیبانی۳۰ مهر ۱۳۹۹

      با سلام
      تفاوتی نداره کدهای افزونه رو توی فانکشن اضافه کنید

  6. U21054۱۰ فروردین ۱۳۹۹

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

    • تیم پشتیبانیتیم پشتیبانی۱۰ فروردین ۱۳۹۹

      با سلام و احترام
      سپاس فراوان از لطف و توجه شما کاربر گرامی
      امیدواریم که همیشه از خدمات ما راضی باشید
      پیروز باشید

  7. کاربر مهمان۳۱ اردیبهشت ۱۳۹۶

    ممنون، بسیار کاربردی بود. منتظر بخش دوم آموزش هستیم …

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

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.