وباکا

آموزش تخصصی برنامه نویسی وب

بخش چهارم – آموزش کامل ساخت نوع پست (post type )سفارشی در وردپرس

در وردپرس بطور پیش فرض دو نوع پست وجود دارد پست ها(نوشته ها) و برگه ها، در این قسمت آموزش می دهیم که خودتان انواع پست های سفارشی دیگری به وردپرس اضافه کنید. برای اضافه کردن نوع پست سفارشی (post type) به وردپرس می توانید کدهایی در پوسته وردپرس اضافه کنید یا افزونه جداگانه ای برای این کار ایجاد کنید . 

اضافه کردن نوع پست جدید

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

روش دوم و حرفه ای تر ساخت یک post type با کدنویسی در وردپرس است. در این روش خودمان با روشی که برای ساخت افزونه ها وجود دارد اقدام به ساخت post type سفارشی برای نیاز خودمان می کنیم.

در اینجا روش دوم برای ساخت post type دلخواه را در وردپرس آموزش می دهیم. برای ساخت post type جدید می توانید دستورات لازم را در فایل functions.php از پوسته بنویسید یا در یکی از افزونه های موجود و یا هم افزونه جدیدی برای این کار ایجاد کنید. در این آموزش تمامی دستورات در فایل functions.php از پوسته مورد استفاده در وردپرس قرار می گیرد.

پس ابتدا دستورات زیر باید نوشته شوند :
function create_posttype() {
register_post_type( 'movies',
array( 'labels' => array(
'name' => 'Movies',
'singular_name' =>'Movie'
),'public' => true,
'has_archive' => true,
'rewrite' => array('slug' => 'movies'),
)
);
}
// Hooking up our function to theme setup
add_action( 'init', 'create_posttype' );function custom_post_type() {
// Set UI labels for Custom Post Type
$labels = array(
'name'=> 'Movies',
'singular_name' => 'Movie'
,'menu_name' =>'Movies',
'parent_item_colon' => 'Parent Movie',
'all_items' => 'All Movies',
'view_item' => 'View Movie',
'add_new_item' => 'Add New Movie',
'add_new' => 'Add New',
'edit_item' => 'Edit Movie',
'update_item' => 'Update Movie',
'search_items' => 'Search Movie',
'not_found' =>'Not Found',
'not_found_in_trash' => 'Not found in Trash',
);

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

 

در ادامه تابعی که جزئیات و امکانات نوع پست را دارد قلاب می کنیم:
// Set other options for Custom Post Type
$args = array(
'label' =>'movies',
'description' =>'Movie news and reviews',
'labels' => $labels,
// Features this CPT supports in Post Editor
'supports' => array( 'title', 'editor', 'excerpt', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields' ),
// You can associate this CPT with a taxonomy or custom taxonomy.
'taxonomies' => array( 'genres' ),
/* A hierarchical CPT is like Pages and can have
* Parent and child items. A non-hierarchical CPT
* is like Posts.
*/
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => 5,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'page',
);// Registering your Custom Post Type
register_post_type( 'movies', $args );}/* Hook into the 'init' action so that the function
* Containing our post type registration is not
* unnecessarily executed.
*/add_action( 'init', 'custom_post_type', 0 );

با استفاده از کد فوق ویژگی های زیادی به نوع پست (post type) داده شده است.

همچنین به این نوع پست سفارشی یک دسته بندی بنام genres اختصاص داده ایم. همچنین توجه کنید که بخش hierarchical را مقدار false  داده ایم اگر می خواهید نوع پست جدید شما مثل برگه ها عمل کنید به این خاصیت مقدار true بدهید.

نمایش انواع پست های سفارشی در سایت

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

نمایش نوع پست سفارشی با استفاده از الگوی آرشیو پیش فرض

ابتدا شما می تونید به سادگی به قسمت Appearance>Menus وردپرس رفته و یک لینک دلخواه برای نوع پست جدید را اضافه کنید. اگر از لینک های دائمی استفاده می کنید باید لینک را بصورت زیر بنویسید:

http://example.com/movies

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

http://example.com/?post_type=movies

به جای example.com باید اسم سایت خودتان را بنویسید و به جای کلمه movies باید نام پست تایپ خودتان نوشته شود. منو را ذخیره کرده و سپس سایت را باز کرده به صفحه اول بروید اگر در منوی سایت گزینه جدید را دیدید روی آن کلیک کنید. تا صفحه آرشیو مربوط به پست تایپ جدید شما با کمک صفحه archive.php موجود در پوسته وردپرس نمایش داده شود.

 

نمایش پست تایپ های جدید در صفحه اول سایت

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

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', 'movies' ) );
return $query;
}

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

 

پرس و جوی پست ها برای انواع پست سفارشی

اگر با کدنویسی میانه خوبی دارید و می خواهید پرس و جوهایی در پوسته اضافه کنید ، می توانید با اجرای یک پرس و جو بصورت زیر لیست پست های مربوط به یک پست تایپ دلخواه را از بانک اطلاعاتی خوانده و نمایش دهید:
<?php
$args = array( 'post_type' => 'movies', 'posts_per_page' => 10 );
$the_query = new WP_Query( $args );if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php
endwhile;
wp_reset_postdata(); ?>
<?php else: ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

در این کد، ابتدا در تابع WP_Query() نوع پست و تعداد پست ها در صفحه در بصورت پارامتر تعیین کرده ایم و سپس پرس و جو را روی بانک اطلاعاتی اجرا کرده و نتایج را طی یک حلقه تکرار نمایش داده ایم.

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

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

آیا می خواهید پست های اخیر در نوع پست جدیدتان را نشان دهید ؟

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

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

 

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فهرست مطالب