ثبت‌نام ورود

ساخت قالب اختصاصی برای خطای 403 و 401 در وردپرس

قالب اختصاصی برای خطای 403
قالب اختصاصی برای خطای 403

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

همانطور که در دوره ۰ تا ۱۰۰ طراحی سایت با وردپرس یاد گرفتیم، برای ساخت قالب اختصاصی خطای ۴۰۴ در وردپرس، می‌توانیم یک فایل 404.php در قالب سایت‌مان ایجاد کنیم. سپس هر کدی که می‌خواهیم را در این فایل بنویسیم و در نهایت به عنوان مثال چنین قالبی برای خطای 404 ایجاد کنیم:

صفحه اختصاصی خطای ۴۰۴ در وردپرس
صفحه اختصاصی خطای ۴۰۴ در وردپرس

اما برای خطای ۴۰۳ این روش جوابگو نیست. چرا‌که خطای ۴۰۳ از سمت سرور فراخوانی می‌شود و قالب این صفحه هم از سمت سرور نمایش داده می‌شود. به این شکل:

خطای ۴۰۳
خطای ۴۰۳

در هر صورت همیشه راهی برای انجام کارها در وردپرس هست. چرا که وردپرس قابلیت درج هر نوع کد PHP را دارد. پس ببینیم چطور می‌توان صفحات سفارشی 403 و 401 را در وردپرس ایجاد کرد.

ساخت چایلدتم برای قالب

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

ساخت قالب اختصاصی برای خطای 403

حالا وارد پوشه قالب یا پوشه چایلدتم قالب می‌شویم. سپس فایلی با نام زیر ایجاد می‌کنیم.

403.php

این فایل محتویات صفحه خطای ۴۰۳ را ذخیره خواهد کرد. مثلا در این فایل می‌توانیم بنویسیم: خوش آمدی اما به اینجا دسترسی نداری!

البته راه بهتری هم هست. این‌که فایل 404 را کپی کرده و با نام 403 ذخیره کنیم.

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

401.php

ویرایش فایل functions.php

حالا به مرحله اصلی رسیدیم. کافیست وارد فایل functions.php قالب سایت‌تان شوید. سپس این کدها را در این فایل اضافه کنید. کدها باید در انتهای فایل فانشکن قبل از ?> اضافه شوند.

function mihanwp_custom_error_pages()
{
    global $wp_query;
 
    if(isset($_REQUEST['status']) && $_REQUEST['status'] == 403)
    {
        $wp_query->is_404 = FALSE;
        $wp_query->is_page = TRUE;
        $wp_query->is_singular = TRUE;
        $wp_query->is_single = FALSE;
        $wp_query->is_home = FALSE;
        $wp_query->is_archive = FALSE;
        $wp_query->is_category = FALSE;
        add_filter('wp_title','mihanwp_custom_error_title',65000,2);
        add_filter('body_class','mihanwp_custom_error_class');
        status_header(403);
        get_template_part('403');
        exit;
    }
 
    if(isset($_REQUEST['status']) && $_REQUEST['status'] == 401)
    {
        $wp_query->is_404 = FALSE;
        $wp_query->is_page = TRUE;
        $wp_query->is_singular = TRUE;
        $wp_query->is_single = FALSE;
        $wp_query->is_home = FALSE;
        $wp_query->is_archive = FALSE;
        $wp_query->is_category = FALSE;
        add_filter('wp_title','mihanwp_custom_error_title',65000,2);
        add_filter('body_class','mihanwp_custom_error_class');
        status_header(401);
        get_template_part('401');
        exit;
    }
}
 
function mihanwp_custom_error_title($title='',$sep='')
{
    if(isset($_REQUEST['status']) && $_REQUEST['status'] == 403)
        return "Forbidden ".$sep." ".get_bloginfo('name');
 
    if(isset($_REQUEST['status']) && $_REQUEST['status'] == 401)
        return "Unauthorized ".$sep." ".get_bloginfo('name');
}
 
function mihanwp_custom_error_class($classes)
{
    if(isset($_REQUEST['status']) && $_REQUEST['status'] == 403)
    {
        $classes[]="error403";
        return $classes;
    }
 
    if(isset($_REQUEST['status']) && $_REQUEST['status'] == 401)
    {
        $classes[]="error401";
        return $classes;
    }
}
 
add_action('wp','mihanwp_custom_error_pages');

به همین راحتی! حالا کافیست یکی از صفحات سایت خود که با خطای ۴۰۳ مواجه است را مشاهده کنید.

خطا به شکل کدهایی که در فایل 403 ذخیره کرده‌اید نمایش داده خواهد شد.

موفق باشید.

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام میهن وردپرس عضو شوید.

نظر شما در این‌باره چیست؟

  1. U17441 ۱۲ آبان ۱۳۹۹

    سلام
    با چه افزونه ای تیتر های مطالبتونو سمت چپ سایدبار نشون می دید؟