سایر بخش های سری آموزشی " ایجاد افزونه وردپرس "

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

  • single-{post_type}.php
  • archive-{post_type}.php

همانطور که مشاهده می کنید، در نام گذاری فایل ها از {post_type} استفاده کردیم. به جای آن باید نامی را که در تابع register_post_type() نوشته بودید را جایگزین کنید. برای درک بهتر موضوع از همان مثال جلسه قبلی استفاده می کنیم.

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

  • single-acme_product.php
  • archive-acme_product.php

 

کوئری برای پست تایپ ها

در هریک از فایل های پوسته وردپرس که نیاز به نمایش پست تایپ ها باشد می توانید با استفاده از کوئری مخصوص به آن نوشته های موجود در پست تایپ را نمایش دهید.  برای این منظور از post_type به عنوان آرگمان WP_Query استفاده می شود:

$args = array( 'post_type' => 'product', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
    the_title();
    echo '<div class="entry-content">';
    the_content();
    echo '</div>';
endwhile;

کد بالا از طریق یک حلقه (loop) ده پست آخر ارسال شده در پست تایپ محصولات را نمایش می دهد.

 

افزودن پست تایپ ها به کوئری اصلی

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

برای انجام این کار از اکشن pre_get_posts استفاده می شود. به کدهای زیر توجه کنید:

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );
 
function add_my_post_types_to_query( $query ) {
    if ( is_home() && $query->is_main_query() )
        $query->set( 'post_type', array( 'post', 'page', 'product' ) );
    return $query;
}

کدهای بالا همانطور که باید متوجه شده باشید، علاوه بر اینکه نوشته ها و برگه های را نمایش می دهد، شامل نوشته های پست تایپ محصولات نیز می شود.