SHET28

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

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

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

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

قالب جداگانه برای نوشته چه کاربردی داره؟

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

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

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

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

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

بررسی منوی نمایش برای تشخیص قالب بلوکی یا کلاسیک
بررسی منوی نمایش برای تشخیص قالب بلوکی یا کلاسیک

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

ساخت قالب جدا برای نوشته در قالب بلوکی

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

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

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

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

ساخت و طراحی قالب جدید

در صفحه قالب‌ها، گزینه افزودن قالب جدید رو بزنید. اگه وردپرس گزینه ساخت «قالب سفارشی» رو نشون می‌ده، یک اسم واضح مثل «مقاله ویژه» براش انتخاب کنید. حالا بلوک‌هایی مثل «عنوان نوشته»، «تصویر شاخص»، «محتوای نوشته»، «نام نویسنده» و «نظرات» رو با توجه به چیدمانی که می‌خواید اضافه کنید.

حواستون به بلوک «محتوای نوشته» باشه؛ چون متن اصلی مقاله با همین بلوک نمایش داده می‌شه. اگه اون رو حذف کنید، محتوای نوشته در سایت دیده نمی‌شه. وقتی چیدمان آماده شد، دکمه «ذخیره» رو بزنید و مطمئن بشید خود قالب هم در فهرست موارد ذخیره‌شده انتخاب شده.

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

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

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

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

ساخت قالب جدا برای نوشته در قالب کلاسیک

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

وردپرس از نسخه ۴.۷ به بعد اجازه می‌ده قالب سفارشی نوشته رو با سربرگ Template Post Type ثبت کنید. برای شروع، داخل پوشه قالب فرزند یک فایل با نام featured-article.php بسازید و کد زیر رو اول اون قرار بدید:

<?php
/**
 * Template Name: Featured Article
 * Template Post Type: post
 */

get_header();
?>

عبارت Template Name همون اسمیه که در صفحه ویرایش نوشته می‌بینید. مقدار post هم به وردپرس می‌گه این قالب برای نوشته‌ها ساخته شده. اگه همین قالب رو برای برگه یا یک نوع نوشته سفارشی هم می‌خواید، می‌تونید نام اون نوع محتوا رو به فهرست اضافه کنید.

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

بعد از بارگذاری فایل، نوشته موردنظرتون رو در ویرایشگر باز کنید. در پنل تنظیمات نوشته، بخش «قالب» رو پیدا کنید و «Featured Article» رو انتخاب کنید. اگه هنوز با بخش‌های مختلف این صفحه آشنا نیستید، آموزش تنظیمات ویرایش نوشته در وردپرس جای گزینه‌های اصلی رو بهتون نشون می‌ده.

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

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

single-post-{post-slug}.php

به‌جای {post-slug} نامک نوشته رو بذارید. نامک همون بخش کوتاه آدرس نوشته هست. مثلاً اگه آدرس نوشته با special-offer تموم می‌شه، نام فایل باید این باشه:

single-post-special-offer.php

وردپرس اول این فایل اختصاصی رو بررسی می‌کنه. اگه پیداش نکنه، سراغ single-post.php، بعد single.php و در آخر قالب‌های عمومی‌تر می‌ره. برای یک یا چند نوشته مشخص، این روش از نوشتن فیلتر PHP ساده‌تره. جزئیات ترتیب انتخاب فایل‌ها هم در مستندات رسمی قالب نوشته تکی وردپرس اومده.

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

وردپرس موقع انتخاب قالب نوشته تکی، فایل مربوط به دسته‌بندی رو خودکار بررسی نمی‌کنه. پس اگه می‌خواید همه نوشته‌های یک دسته ظاهر مشترکی داشته باشن، باید یک فیلتر کوتاه اضافه کنید. برای دیدن توضیحات بیشتر این روش، مقاله ساخت قالب Single.php جداگانه برای هر دسته‌بندی در وردپرس هم به کارتون میاد.

داخل قالب فرزند پوشه‌ای با نام single بسازید. بعد برای هر دسته، فایلی با الگوی single-cat-{slug}.php داخل اون بذارید. «نامک» یا Slug بخش کوتاه و انگلیسی آدرس دسته هست. مثلاً برای دسته‌ای با نامک news باید این فایل رو بسازید:

single/single-cat-news.php

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

<?php
add_filter( 'single_template', 'mihanwp_custom_single_template' );

function mihanwp_custom_single_template( $template ) {
    if ( ! is_singular( 'post' ) ) {
        return $template;
    }

    $post = get_queried_object();

    if ( ! $post instanceof WP_Post ) {
        return $template;
    }

    $category_slugs = wp_get_post_categories(
        $post->ID,
        array( 'fields' => 'slugs' )
    );

    foreach ( $category_slugs as $category_slug ) {
        $category_template = locate_template(
            'single/single-cat-' . sanitize_file_name( $category_slug ) . '.php'
        );

        if ( $category_template ) {
            return $category_template;
        }
    }

    return $template;
}

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

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

ساخت قالب جدا بر اساس نویسنده

برای اینکه قالب بر اساس نویسنده به‌صورت خودکار انتخاب بشه، داخل همون پوشه single فایلی با الگوی single-author-{username}.php بسازید. بهتره در نام فایل از مقدار user_nicename نویسنده استفاده کنید؛ چون وردپرس این مقدار رو برای آدرس عمومی نویسنده نگه می‌داره.

کد زیر رو بعد از کد قبلی، داخل تابع و پیش از خط return $template; بذارید:

$author = get_userdata( (int) $post->post_author );

if ( $author ) {
    $author_template = locate_template(
        'single/single-author-' . sanitize_file_name( $author->user_nicename ) . '.php'
    );

    if ( $author_template ) {
        return $author_template;
    }
}

جای این بخش روی اولویت انتخاب قالب اثر می‌ذاره. اگه بررسی دسته‌بندی قبل از نویسنده انجام بشه، قالب دسته اولویت داره. اگه می‌خواید قالب نویسنده زودتر انتخاب بشه، بخش نویسنده رو قبل از حلقه دسته‌بندی بذارید.

نکات مهم قبل از ویرایش فایل‌های قالب

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

چرا قالب سفارشی نمایش داده نمی‌شه؟

  • قالب در فهرست دیده نمی‌شه: سربرگ فایل، مقدار Template Post Type: post و محل ذخیره فایل رو دوباره بررسی کنید.
  • صفحه سفید یا ناقصه: مطمئن بشید فایل کلاسیک حلقه وردپرس و توابع لازم مثل سربرگ و پابرگ رو داره.
  • متن نوشته در قالب بلوکی دیده نمی‌شه: بلوک «محتوای نوشته» رو دوباره به قالب اضافه کنید.
  • تغییرات دیده نمی‌شن: کش وردپرس، افزونه کش، مرورگر و شبکه توزیع محتوا رو پاک کنید.
  • بعد از به‌روزرسانی تغییرات پاک شدن: احتمالاً فایل‌ها داخل قالب اصلی بودن. اون‌ها رو به قالب فرزند منتقل کنید.
  • قالب دسته اشتباه انتخاب می‌شه: دسته‌های نوشته و ترتیب بررسی اون‌ها در کد رو کنترل کنید.

جمع‌بندی

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

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

پرسش‌های رایج

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

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

از کجا بفهمیم قالب وردپرس بلوکیه؟

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

آیا به‌روزرسانی قالب، فایل سفارشی نوشته رو پاک می‌کنه؟

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

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

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

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

  1. U343846۱۸ اردیبهشت ۱۴۰۳

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

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

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

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

      سلام باید به این کدها comments template رو اضافه کنید.

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

        سلامی دوباره ببخشید اما دقیقا منظورتون رو متوجه نشدم کدهای comments template که داخل خود صفحه single قالب وجود داره یا اینکه فایل comment رو لود کنم.

        • رضا راد۳ اردیبهشت ۱۳۹۸

          سلام فایل ‌comments.php

  3. کاربر مهمان۶ مرداد ۱۳۹۶

    از کد عکس گرفتید !!!
    این آموزش درسته بنظرت ؟
    عکس و بذارم ؟

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

      درود.

      کدها به جای تصاویر جایگزین شدند.

      • کاربر مهمان۱۰ اسفند ۱۳۹۹

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

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

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

  4. کاربر مهمان۷ تیر ۱۳۹۶

    ممنون . مطلب خیلی خوبی بود . دمتون گرم !

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

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

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