درود
من یک مثال دیگر میزنم.
فرض کنیم یک وبسایت املاک داریم. فارغ از بخش وبلاگ به دلایلی میخواهیم گزینهای داشته باشیم تحت عنوان «راهنمای محلات». طبق نظر مدیر seo تصمیم بر این است که یک بخش کاستوم به سایت وردپرسی خودمان اضافه کنیم و این محتویات در ساختاری جداگانه از وبلاگ به نمایش گذاشته شود.
به صورت تمرینی و با ساختاری ساده این مورد را در یک پلاگین آوردهام:
<?php
/*
Plugin Name: Custom Post Type Plugin
Description: This plugin adds a custom post type for neighborhoods.
Version: 1.0
Author: bahman fallahi
*/
// Hook into the 'init' action
add_action( 'init', 'create_post_type' );
function create_post_type() {
// Set UI labels for Custom Post Type
$labels = array(
'name' => _x( 'Neighborhoods', 'Post Type General Name', 'twentythirteen' ),
'singular_name' => _x( 'Neighborhood', 'Post Type Singular Name', 'twentythirteen' ),
'menu_name' => __( 'Neighborhoods', 'twentythirteen' ),
'parent_item_colon' => __( 'Parent Neighborhood', 'twentythirteen' ),
'all_items' => __( 'All Neighborhoods', 'twentythirteen' ),
'view_item' => __( 'View Neighborhood', 'twentythirteen' ),
'add_new_item' => __( 'Add New Neighborhood', 'twentythirteen' ),
'add_new' => __( 'Add New', 'twentythirteen' ),
'edit_item' => __( 'Edit Neighborhood', 'twentythirteen' ),
'update_item' => __( 'Update Neighborhood', 'twentythirteen' ),
'search_items' => __( 'Search Neighborhood', 'twentythirteen' ),
'not_found' => __( 'Not Found', 'twentythirteen' ),
'not_found_in_trash' => __( 'Not found in Trash', 'twentythirteen' ),
);
// Set other options for Custom Post Type
$args = array(
'label' => __( 'neighborhoods', 'twentythirteen' ),
'description' => __( 'Neighborhood news and reviews', 'twentythirteen' ),
'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( 'category', 'post_tag' ), // Add support for categories and tags
/* 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( 'neighborhoods', $args );
// Register taxonomy for categories
register_taxonomy(
'category',
'neighborhoods',
array(
'label' => __( 'Categories' ),
'rewrite' => array( 'slug' => 'neighborhood-category' ),
'hierarchical' => true,
)
);
// Register taxonomy for tags
register_taxonomy(
'post_tag',
'neighborhoods',
array(
'label' => __( 'Tags' ),
'rewrite' => array( 'slug' => 'neighborhood-tag' ),
'hierarchical' => false,
)
);
// Add category and tag columns to admin table
add_filter( 'manage_neighborhoods_posts_columns', 'add_neighborhood_columns' );
add_action( 'manage_neighborhoods_posts_custom_column', 'display_neighborhood_columns', 10, 2 );
}
// Add category and tag columns
function add_neighborhood_columns( $columns ) {
$columns['category'] = __( 'Categories' );
$columns['tags'] = __( 'Tags' );
return $columns;
}
// Display category and tag values in the columns
function display_neighborhood_columns( $column, $post_id ) {
switch ( $column ) {
case 'category':
echo get_the_term_list( $post_id, 'category', '', ', ', '' );
break;
case 'tags':
echo get_the_term_list( $post_id, 'post_tag', '', ', ', '' );
break;
}
}
یک توضیح اضافه در خصوص فانکشن display_neighborhood_columns (امیدوارم خطا نکرده باشم):
به طور پیشفرض، وردپرس ستونهای استانداردی مانند «عنوان»، «نویسنده»، «دستهها»، «برچسبها»، «تاریخ» و غیره را برای انواع پستهای استاندارد مانند «پست» و «صفحه» نمایش میدهد. وقتی یک نوع پست سفارشی با طبقه بندیهای سفارشی ایجاد میکنید، وردپرس به طور خودکار تشخیص نمیدهد که ممکن است بخواهید آن دسته بندیها را در ستونهای مدیریت نمایش دهید. اینجاست که سفارشی کردن ستونهای مدیریت ضروری میشود.