تا اینجا نوشته و صفحه را شناختیم. اما اگر میخواهید سایتتان بخشهایی مثل نمونهکار، تستimonials، رویداد یا محصول داشته باشد، نوع محتوای سفارشی (Custom Post Type) راه درست است.
ثبت نوع محتوای سفارشی
کافی است تابع register_post_type را روی اکشن init صدا بزنید. مهمترین پارامترها labels برای نامها و supports برای امکانات است.
<?php
function academy_register_portfolio() {
$args = array(
'labels' => array(
'name' => 'نمونهکارها',
'singular_name' => 'نمونهکار',
'add_new_item' => 'افزودن نمونهکار جدید',
),
'public' => true,
'has_archive' => true,
'menu_icon' => 'dashicons-portfolio',
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'show_in_rest' => true,
'rewrite' => array( 'slug' => 'portfolio' ),
);
register_post_type( 'portfolio', $args );
}
add_action( 'init', 'academy_register_portfolio' );
توضیح پارامترهای کلیدی
public— آیا در سایت و جستجو دیده شودhas_archive— صفحه بایگانی برای این نوع محتوا ساخته شودsupports— کدام امکانات فعال باشد؛ بدونthumbnailتصویر شاخص کار نمیکندshow_in_rest— اگرtrueباشد، ویرایشگر بلوکی وردپرس در دسترس قرار میگیردrewrite— ساختار پیوند دائمی این بخش
افزودن دستهبندی اختصاصی
<?php
function academy_register_taxonomy() {
register_taxonomy( 'portfolio_cat',
'portfolio',
array(
'labels' => array(
'name' => 'دستههای نمونهکار',
),
'hierarchical' => true,
'show_in_rest' => true,
)
);
}
add_action( 'init', 'academy_register_taxonomy' );
نمایش در قالب
<?php
$query = new WP_Query( array(
'post_type' => 'portfolio',
'posts_per_page' => ۹,
) );
if ( $query->have_posts() ) :
while ( $query->have_posts() ) :
$query->the_post(); ?>
<h۳><?php the_title(); ?></h۳>
<?php the_post_thumbnail( 'medium' ); ?>
<?php endwhile;
endif;
wp_reset_postdata();
توجه کنید که پس از پایان حلقه حتماً wp_reset_postdata() را صدا بزنید، وگرنه حلقه اصلی وردپرس بههم میریزد.
نوع محتوای سفارشی قدرت واقعی وردپرس را نشان میدهد: میتوانید ساختار محتوایی هر وبسایتی را بسازید، بدون اینکه حتی یک خط کد اضافهتر بنویسید.
