SHET24

ساخت قالب Single.php جداگانه برای هر دسته‌بندی در وردپرس

ساخت قالب Single.php جداگانه برای هر دسته‌بندی در وردپرس

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

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

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

روش فایل single.php برای پوسته‌های کلاسیک و پوسته‌هایی مناسبه که قالب نوشته تکی رو با فایل PHP می‌سازن. اگه در بخش «نمایش» پیشخوان گزینه «ویرایشگر» رو می‌بینید، به احتمال زیاد پوسته‌تون بلوکیه. پوسته‌های بلوکی معمولاً قالب نوشته تکی رو با فایل templates/single.html و ویرایشگر سایت مدیریت می‌کنن.

برای اینکه مطمئن بشید، وارد بخش «نمایش» بشید و گزینه‌های اون رو نگاه کنید. اگه گزینه «ویرایشگر» اونجا هست، نشونه مهمیه که پوسته‌تون بلوکیه.

ویرایشگر قالب‌های بلوکی
ویرایشگر قالب‌های بلوکی

اگه پوسته‌تون کلاسیکه، مراحل بخش بعد رو دنبال کنید. اگه پوسته‌تون بلوکیه، مستقیم سراغ بخش «روش داخلی وردپرس در پوسته‌های بلوکی» برید.

قبل از تغییر فایل‌ها یک پوسته فرزند بسازید

فایل‌های پوسته اصلی رو مستقیم تغییر ندید، چون ممکنه با به‌روزرسانی پوسته همه تغییراتتون پاک بشن. بهتره کدها و فایل‌های تازه رو داخل پوسته فرزند بذارید تا به‌روزرسانی پوسته اصلی به کارتون آسیبی نزنه.

قبل از شروع، از فایل‌های سایتتون نسخه پشتیبان بگیرید. بعد با فایل‌منیجر هاست یا SFTP وارد پوشه پوسته فرزند بشید. SFTP یک روش امن برای دسترسی به فایل‌های هاسته. مسیر این پوشه معمولاً چیزی شبیه wp-content/themes/your-child-theme/ هست.

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

ساخت قالب Single.php جداگانه برای هر دسته‌بندی

فرض کنید دو دسته با نامک‌های vip و vip-2 دارید. نامک همون بخش کوتاهیه که در آدرس دسته دیده می‌شه. برای پیدا کردنش، از پیشخوان به «نوشته‌ها ← دسته‌ها» برید و ستون «نامک» رو ببینید.

پیدا کردن نامک دقیق دسته‌ها در پیشخوان وردپرس
پیدا کردن نامک دقیق دسته‌ها در پیشخوان وردپرس

حالا وارد پوشه پوسته فرزند بشید و فایل single.php پوسته اصلی رو به‌عنوان نقطه شروع کپی کنید. بعد دو نسخه از این فایل بسازید و اسمشون رو به شکل زیر بذارید:

  • single-cat-vip.php برای دسته vip
  • single-cat-vip-2.php برای دسته vip-2

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

ساخت قالب Single.php جداگانه برای هر دسته‌بندی
ساخت قالب Single.php جداگانه برای هر دسته‌بندی

اضافه کردن کد انتخاب خودکار قالب

فایل functions.php پوسته فرزند رو باز کنید و کد زیر رو در انتهای اون بذارید. اگه فایل با <?php شروع شده، این عبارت رو دوباره اضافه نکنید. در انتهای فایل هم نیازی به تگ ?> ندارید.

// Custom single templates by mihanwp.com
function mihanwp_category_single_template( $single_template ) {
    if ( in_category( 'vip' ) ) {
        $custom_template = locate_template( 'single-cat-vip.php' );
    } elseif ( in_category( 'vip-2' ) ) {
        $custom_template = locate_template( 'single-cat-vip-2.php' );
    } else {
        return $single_template;
    }

    if ( ! empty( $custom_template ) ) {
        return $custom_template;
    }

    return $single_template;
}
add_filter( 'single_template', 'mihanwp_category_single_template' );

تابع in_category() بررسی می‌کنه که نوشته در دسته موردنظر هست یا نه. تابع locate_template() هم اول دنبال فایل قالب در پوسته فرزند می‌گرده و بعد پوسته اصلی رو بررسی می‌کنه. اگه فایل سفارشی پیدا نشه، وردپرس همون قالب عادی نوشته تکی رو نشون می‌ده. پس نبودن فایل سفارشی نباید صفحه رو خراب کنه.

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

اولویت دسته‌ها به ترتیب شرط‌ها بستگی داره. در نمونه بالا، دسته vip قبل از vip-2 اومده. پس اگه یک نوشته عضو هر دو دسته باشه، فایل single-cat-vip.php براش باز می‌شه. برای عوض کردن اولویت، فقط ترتیب شرط‌ها رو جابه‌جا کنید.

اضافه کردن دسته‌های بیشتر

برای هر دسته تازه، یک فایل قالب جدید بسازید و قبل از بخش else یک شرط elseif دیگه بذارید. حواستون باشه نامک دسته و اسم فایل دقیقاً با شرطی که می‌نویسید هماهنگ باشن.

} elseif ( in_category( 'news' ) ) {
    $custom_template = locate_template( 'single-cat-news.php' );

بعد فایل single-cat-news.php رو هم داخل پوشه پوسته فرزند بسازید. بهتره برای نامک‌ها از حروف انگلیسی، عدد و خط تیره استفاده کنید تا احتمال اشتباه کمتر بشه.

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

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

فهرست قالب‌های پوسته بلوکی در ویرایشگر سایت وردپرس
فهرست قالب‌های پوسته بلوکی در ویرایشگر سایت وردپرس

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

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

آزمایش قالب‌های دسته‌بندی

  1. یک نوشته آزمایشی بسازید و فقط دسته vip رو براش انتخاب کنید.
  2. نوشته رو باز کنید و ببینید تغییرات فایل single-cat-vip.php نمایش داده می‌شن یا نه.
  3. همین آزمایش رو برای دسته vip-2 تکرار کنید.
  4. یک نوشته بدون این دو دسته باز کنید و مطمئن بشید قالب عادی single.php نشون داده می‌شه.

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

پاک کردن کش افزونه رخش
پاک کردن کش افزونه رخش

جمع‌بندی

در پوسته‌های کلاسیک، با کمک پوسته فرزند، فیلتر single_template و توابع in_category() و locate_template() می‌تونید برای هر دسته یک قالب جدا داشته باشید. اگه پوسته‌تون بلوکیه، اول قابلیت داخلی ویرایشگر سایت رو امتحان کنید؛ چون خیلی از تغییرات ظاهری بدون PHP انجام می‌شن. فقط یادتون باشه که ویرایشگر سایت هنوز گزینه آماده‌ای برای انتخاب خودکار قالب بر اساس دسته نداره.

سوالات متداول

برای ساخت قالب جداگانه به افزونه نیاز داریم؟

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

می‌تونیم فایل‌ها رو داخل پوسته اصلی بذاریم؟

از نظر فنی می‌شه، ولی بهتره این کار رو نکنید. به‌روزرسانی پوسته اصلی ممکنه فایل‌ها و تغییراتتون رو پاک کنه، پس پوسته فرزند انتخاب امن‌تریه.

این کد روی پوسته بلوکی هم کار می‌کنه؟

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

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

  1. U34583۱۹ دی ۱۳۹۹

    با سلام و خسته نباشید خدمت شما .
    امکانش هست همین مثالی که زدید رو برای ایجاد صفحه سینگل خاص برای یک taxonomy بگید؟
    کل اینترنت رو زیر و رو کردم اما نشد که بشه .
    1 ماهه درگیرم سر این موضوع 🙁
    در رابطه با in_taxonomy هم که یکی از دوستان رو معرفی کرید سرچ کردم چیزی دستگیرم نشد.
    با سپاس

    • رضا راد۲۰ دی ۱۳۹۹

      درود بر شما بسیار ساده هست. مثلا اگر اسم taxnomoy شما film هست کافیه نام فایل رو taxonomy-film.php قرار بدید.

      • U34583۲۲ دی ۱۳۹۹

        این کار رو کردم الان ، قبلا هم انجام داده بودم جناب حسینی ،
        اما نمیخونه ازین فایل taxonomy-videos.php

        • رضا راد۲۲ دی ۱۳۹۹

          پاسخ کامنت بعدی رو مشاهده بفرمایید.

      • U34583۲۲ دی ۱۳۹۹

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

        • رضا راد۲۲ دی ۱۳۹۹

          از single-movie.php استفاده کنید. به جای movie نام پست تایپ دلخواه را وارد کنید

  2. U28456۱ تیر ۱۳۹۹

    سلام
    اگر اشتباه نکنم in_category فقط برای برسی دسته بندی های وردپرس بکار میرود برای دسته بندی های ووکامرس باید به چه شکل عمل کرد ؟

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

      سلام
      باید از in taxonomy استفاده شود

      • U28456۱ تیر ۱۳۹۹

        ممنون میشم کمی بیشتر توضیح بدید

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

          در گوگل عبارت in taoxonomy را جستجو کنید با ذکر مثال در wordpress.org توضیح داده شده است.

  3. U9570۱۷ آبان ۱۳۹۸

    سلام
    این کار رو میشه با edd یا ووکامرسم کرد؟
    برای قسمت صفحه محصولات

    • تیم پشتیبانیتیم پشتیبانی۱۸ آبان ۱۳۹۸

      با سلام و احترام
      بله امکانش هست

      • U9570۱۹ آبان ۱۳۹۸

        میشه توضیح بدین چه جوری میشه ؟

        • رضا راد۲۰ آبان ۱۳۹۸

          سلام . باید به این شکل استفاده شود.
          single-product.php
          یا
          single-download.php

          • U9570۲۰ آبان ۱۳۹۸

            استاد همین دو مورد که فرمودین رو باید کجا کدای بالا قرار بدم
            چون به جای کد single_template قرار میدم عمل نمیکنه چون انگار این علامت دش ( – ) نباید باشه

            • رضا راد۲۰ آبان ۱۳۹۸

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

              • U9570۲۰ آبان ۱۳۹۸

                استاد من منظورم دقیقا همین محتوایی هست که طراحی متفاوت داشته باشه
                من این سوال رو پرسیدم که آیا امکانش هست صفحات دانلود رو تو دسته بندی های مختلف طراحی مختلف براش قرار بدیم ؟
                دقیقا مثل همین دسته بندی برای نوشته ها
                شما الان توی این کدی که قرار دادین توضیخ دادین که اگر مطلب توی دسته بندی vip بود صفحه ای که اسمش single-cat-vip.php هست باز بشه
                آیا برای صفحات دانلود edd میشه این کارو کرد ؟ وگرنه ساخت برگه های دانلود رو انجام دادیم کلا

                • رضا راد۲۰ آبان ۱۳۹۸

                  برای اینکار همین کد مقاله رو استفاده کنید و به جای vip از نامک دسته بندی که توی EDD استفاده کردید استفاده کنید.

  4. U22956۱۳ مرداد ۱۳۹۸

    درود و احترام و تشکر بابت این آموزش عالی
    این کار برای پست ها هست
    برای برگه های وردپرس هم میفرمایید چطور میتونیم چند برگه متفاوت مثل page.php بسازیم
    چون اونجا دیگه بحث تگ یا دسته بنده وجود نداره

    • تیم پشتیبانیتیم پشتیبانی۱۳ مرداد ۱۳۹۸

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

  5. کاربر مهمان۴ فروردین ۱۳۹۸

    با سلام خدمت شما یک سؤال داشتم این category که گفتین دقیقاً منظورتون چی بوده یعنی باید فایل category-vip.php باشد یا این نام vip نامک اون دسته بندیه دقیقا نفهمیدم لطفا اگه میشه توضیح بدید ممنون.

    • رضا راد۵ فروردین ۱۳۹۸

      سلام category که ثابت هست. فقط vip با نام دسته بندی باید یکی باشه.

  6. U6469۴ فروردین ۱۳۹۸

    سلام
    آدرس بازیابی رمزعبور wp-login.php?action=lostpassword میباشد. چه طور میتونیم برای صفحه بازیابی رمزعبور یک صفحه اختصاصی بسازیم؟ فقط میخوام یک صفحه اختصاصی بسازم و یک شرت کد درونش قرار دهم.

    • رضا راد۴ فروردین ۱۳۹۸

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

  7. کاربر مهمان۱۷ دی ۱۳۹۷

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

  8. کاربر مهمان۱۶ دی ۱۳۹۷

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

    فقط اگر ممکنه بگید امکانش هست این اتفاق به واسطه تگ هم بیوفته ؟

    • رضا راد۱۶ دی ۱۳۹۷

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

  9. کاربر مهمان۱۵ دی ۱۳۹۷

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

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

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

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