() translation by (you can also view the original English article)
ওয়ার্ডপ্রেস কাস্টমাইজ করা অনেক সহজ। এটা বানানোই এমনভাবে হয়েছিল যেন সহজে কাস্টমাইজ করা সম্ভব হয়। এই টিউটোরিয়ালে আমরা দেখবো কিভাবে ওয়ার্ডপ্রেসের কাস্টম পোষ্ট টাইপ ফিচার নিয়ে কাজ করতে হয়।
কাস্টম পোষ্ট টাইপ আসলে কি?
ধরেন আপনার ব্লগে আপনি মুভি রিভিউ এর জন্য একটি আলাদা সেকশন রাখতে চান। কাস্টম পোষ্ট টাইপ ব্যবহার করে, আপনি পেজ বা পোস্টের মত নতুন আইটেম তৈরি করে নিতে পারবেন, যেটায় ভিন্ন একটা ডাটা সেট থাকবে। এটার জন্য একটা আলাদা অ্যাডমিনিস্ট্রেশন মেন্যু, ডেডিকেটেড এডিটিং পেজ ও কাস্টম ট্যাক্সোনমি থাকবে।
Posts, Pages, Attachments এর পাশাপাশি কাস্টম পোষ্ট টাইমের আলাদা করে অ্যাডমিনিস্ট্রেটিভ অপশন থাকবে। কাস্টম পোষ্ট টাইপে যে কোন রকম ইনফরমেশন স্টোর করা যায়। এর জন্য ডেডিকেটেড এডিটর, মিদিয়া আপলোডার ও ওয়ার্ডপ্রেস টেবিল স্ট্রাকচার থাকে। ওয়ার্ডপ্রেস এপিআই দিয়ে কাস্টম পোষ্ট টাইপ তৈরি করলে, সেটার থিম ও টেমপ্লেটের সাথে কাজ করতে সুবিধা হয়। কাস্টম পোষ্ট টাইপ এসইও ফ্রেন্ডলি হয়, এর পারমালিংকের কারণে।



কেন কাস্টম পোষ্ট টাইপ ব্যবহার করবেন?
কাস্টম পোষ্ট টাইপ ব্যবহার করে একেক রকম পোষ্ট একত্রে একেক ক্যাটাগরিতে ভাগ করে রাখা যায়। অন্য রকম পোষ্ট রেগুলার পোষ্ট থেকে আলাদা করে রাখা যায়। সহজ, তাই না!
একটি কাস্টম পোষ্ট টাইপ প্লাগিন তৈরি করা
এখন মুভি রিভিউ এর জন্য আমরা একটি কাস্টম পোষ্ট টাইপ প্লাগিন তৈরি করব। চলুন শুরু করি।
১ম ধাপঃ প্লাগিন ডায়রেক্টরি
ওয়ার্ডপ্রেস প্লাগিন ডায়রেক্টরিতে যান, Movie-Reviews নামে একটি ফোল্ডার তৈরি করুন।
২য় ধাপঃ পিএইচপি ফাইল তৈরি
Movie-Reviews.php নামে একটি ফাইল তৈরি করুন
৩য় ধাপঃ হেডার অ্যাড করুন
ফাইল ওপেন করে হেডার কোড অ্যাড করুন
1 |
|
2 |
<?php
|
3 |
/*
|
4 |
Plugin Name: Movie Reviews
|
5 |
Plugin URI: https://wp.tutsplus.com/
|
6 |
Description: Declares a plugin that will create a custom post type displaying movie reviews.
|
7 |
Version: 1.0
|
8 |
Author: Soumitra Chakraborty
|
9 |
Author URI: http://wp.tutsplus.com/
|
10 |
License: GPLv2
|
11 |
*/
|
12 |
?>
|
৪র্থ ধাপঃ কাস্টম ফাংশন রেজিস্টার করুন
পিএইচপি ক্লোজিং ট্যাগের আগে create_movie_review
ফাংশন ডিক্লেয়ার করুন।
1 |
|
2 |
add_action( 'init', 'create_movie_review' ); |
৫ম ধাপঃ ফাংশন ইমপ্লিমেন্ট করা
create_movie_review
ফাংশন ইমপ্লিমেন্ট করুন
1 |
|
2 |
function create_movie_review() { |
3 |
register_post_type( 'movie_reviews', |
4 |
array( |
5 |
'labels' => array( |
6 |
'name' => 'Movie Reviews', |
7 |
'singular_name' => 'Movie Review', |
8 |
'add_new' => 'Add New', |
9 |
'add_new_item' => 'Add New Movie Review', |
10 |
'edit' => 'Edit', |
11 |
'edit_item' => 'Edit Movie Review', |
12 |
'new_item' => 'New Movie Review', |
13 |
'view' => 'View', |
14 |
'view_item' => 'View Movie Review', |
15 |
'search_items' => 'Search Movie Reviews', |
16 |
'not_found' => 'No Movie Reviews found', |
17 |
'not_found_in_trash' => 'No Movie Reviews found in Trash', |
18 |
'parent' => 'Parent Movie Review' |
19 |
),
|
20 |
|
21 |
'public' => true, |
22 |
'menu_position' => 15, |
23 |
'supports' => array( 'title', 'editor', 'comments', 'thumbnail', 'custom-fields' ), |
24 |
'taxonomies' => array( '' ), |
25 |
'menu_icon' => plugins_url( 'images/image.png', __FILE__ ), |
26 |
'has_archive' => true |
27 |
)
|
28 |
);
|
29 |
}
|
register_post_type
ফাংশন নিজে থেকেই অনেক কিন্তু করে দেয়। এরপর ওয়ার্ডপ্রেস অ্যাডমিন এরিয়াতে কাস্টম পোষ্টের জন্য আলাদা এরিয়া দেখা যাবে। এই ফাংশনে দুটি আর্গুমেন্ট আছে। একটা name
, আগেরটা হচ্ছে একটা এরে, যেখানে কাস্টম পোষ্টের প্রপার্টি ডিফাইন করা হয়েছে। এটি আরেকটি এরে, যেখানে টেক্সট স্ট্রিং ডিসপ্লে করার জন্য বিভিন্ন লেবেল স্টোর করা আছে। যেমন, name
, নামের জন্য, edit
এবং view
হচ্ছে যথাক্রমে Edit এবং View বাটন শো করার জন্য। বাকিটা দেখলেই বুঝতে পারবেন বলে আশা করি।
পরের আর্গুমেন্টেঃ
-
'public' => true
অ্যাডমিন প্যানেলে ও ফ্রন্টেন্ডে কাস্টম পোষ্টের ভিজিবিলিটি সেট করে। -
'menu_position' => 15
নির্ধারণ করে কাস্টম পোষ্ট টাইপের মেন্যু পজিশন কি হবে। -
'supports' => array( 'title', 'editor', 'comments', 'thumbnail', 'custom-fields' )
ডিসপ্লে ফিচার নির্ধারণ করে। -
'taxonomies' => array( '' )
কাস্টম ট্যাক্সোনমি ঠিক করে। এখানে এটা ডিফাইন করা নেই। -
'menu_icon' => plugins_url( 'images/image.png', __FILE__ )
অ্যাডমিন মেন্যু আইকন ডিসপ্লে করে। -
'has_archive' => true
কাস্টম পোষ্ট টাইপ আর্কাউভিং এনেবল করে।
WordPress Codex register_post_type
page চেক করুন, সেখানে কাস্টম পোষ্ট টাইপের ব্যাপারে আরও বিস্তারিত লেখা আছে।
৬ষ্ঠ ধাপঃ কাস্টম পোষ্ট টাইপ আইকন
16x16 px আইকন ইমেজ প্লাগিন ফোল্ডারে সেভ করুন। এটা ড্যাশবোর্ডে কাস্টম পোষ্ট টাইপের আইকন হিসেবে দেখা যাবে।
৭ম ধাপঃ প্লাগিন অ্যাক্টিভেট করুন
প্লাগিন অ্যাক্টিভেট করুন, আপনার কাস্টম পোষ্ট টাইপ রেডি।



৮ম ধাপঃ নতুন আইটেম অ্যাড করা
Add New ক্লিক করে কাস্টম পোষ্ট এডিটরে যান। মুভির নাম, রিভিউ ও ইমেজ দিন।
৯ম ধাপঃ পাবলিশ
পাবলিশ করে View Movie Review লিংকে ক্লিক করুন।
কাস্টম পোষ্ট টাইপের মেটা বক্স ফিল্ড অ্যাড করা।
মেটা বক্স ফিল্ড দিয়ে কাস্টম পোষ্ট টাইপের জন্য দরকারি ফিল্ড পোস্টে অ্যাড করা যায়, ডিফক্ট কাস্টম ফিল্ড ব্যবহার করা ছাড়াই।
১ম ধাপঃ কাস্টম ফাংশন রেজিস্ট্রেশন
Movie-Reviews.php ফাইল ওপেন করে নিচের কোড অ্যাড করুন। এটি অ্যাডমিন ইন্টারফেসের জন্য একটি ফাংশন রেজিস্টার করে।
1 |
|
2 |
add_action( 'admin_init', 'my_admin' ); |
২য় ধাপঃ কাস্টম ফাংশন ইমপ্লিমেন্ট করা
movie_reviews
কাস্টম পোষ্ট টাইপের জন্য my_admin
ফাংশন রেজিস্টার করুন।
1 |
|
2 |
function my_admin() { |
3 |
add_meta_box( 'movie_review_meta_box', |
4 |
'Movie Review Details', |
5 |
'display_movie_review_meta_box', |
6 |
'movie_reviews', 'normal', 'high' |
7 |
);
|
8 |
}
|
add_meta_box
ফাংশন কাস্টম পোষ্ট টাইপের জন্য মেটা বক্স রেজিস্টার করে। কোন অ্যাট্রিবিউট কি কাজ করেঃ
-
movie_review_meta_box
ব্যবহারে একটি HTMLid
দরকার হয়। -
Movie Review Details
মেটা বক্সের হেডিং এ ভিজিবল থাকে। -
display_movie_review_meta_box
একটা কলব্যাক বা মেটা বক্সের কন্টেন্ট রেন্ডার করে। -
movie_reviews
হচ্ছে কাস্টম পোষ্ট টাইপের নাম, যেখানে মেটা বক্স শো হবে। - normal পেজের ওই পার্ট ডিফাইন করে যেখানে এডিট সেকশন শো করবে।
-
high
বক্স ভিজিবিলিট এর প্রায়োরিটি ডিফাইন করে।
৩য় ধাপঃ display_movie_review_meta_box
ইমপ্লিমেন্ট করা
1 |
|
2 |
<?php
|
3 |
function display_movie_review_meta_box( $movie_review ) { |
4 |
// Retrieve current name of the Director and Movie Rating based on review ID
|
5 |
$movie_director = esc_html( get_post_meta( $movie_review->ID, 'movie_director', true ) ); |
6 |
$movie_rating = intval( get_post_meta( $movie_review->ID, 'movie_rating', true ) ); |
7 |
?>
|
8 |
<table>
|
9 |
<tr>
|
10 |
<td style="width: 100%">Movie Director</td> |
11 |
<td><input type="text" size="80" name="movie_review_director_name" value="<?php echo $movie_director; ?>" /></td> |
12 |
</tr>
|
13 |
<tr>
|
14 |
<td style="width: 150px">Movie Rating</td> |
15 |
<td>
|
16 |
<select style="width: 100px" name="movie_review_rating"> |
17 |
<?php
|
18 |
// Generate all items of drop-down list
|
19 |
for ( $rating = 5; $rating >= 1; $rating -- ) { |
20 |
?>
|
21 |
<option value="<?php echo $rating; ?>" <?php echo selected( $rating, $movie_rating ); ?>> |
22 |
<?php echo $rating; ?> stars <?php } ?> |
23 |
</select>
|
24 |
</td>
|
25 |
</tr>
|
26 |
</table>
|
27 |
<?php
|
28 |
}
|
29 |
?>
|
এই কোড মেটা বক্সের কন্টেন্ট রেন্ডার করে। এই ভ্যারিয়েবলে, মুভি রিভিউ এর কোন কন্টেন্ট এডিটরে শো হবে, তা স্টোর করা থাকে। post ID দিয়ে ডাটাবেস থেকে কন্টেন্ট ফেচ করে তা স্ক্রিনে দেখানো হয়। get_post_meta
এ নতুন এট্রি অ্যাড করলে সেটা একটি খালি স্ট্রিং ফেচ করে তা ডিসপ্লে করে।
৪র্থ ধাপঃ সেভ পোস্ট ফাংশন রেজিস্টার করা
1 |
|
2 |
add_action( 'save_post', 'add_movie_review_fields', 10, 2 ); |
যখন ডাটাবেসে একটা পোষ্ট সেভ হয়, তখন এই ফাংশন কল করা হয়।
৫ম ধাপঃ add_movie_review_fields
ইমপ্লিমেন্ট করা
1 |
|
2 |
function add_movie_review_fields( $movie_review_id, $movie_review ) { |
3 |
// Check post type for movie reviews
|
4 |
if ( $movie_review->post_type == 'movie_reviews' ) { |
5 |
// Store data in post meta table if present in post data
|
6 |
if ( isset( $_POST['movie_review_director_name'] ) && $_POST['movie_review_director_name'] != '' ) { |
7 |
update_post_meta( $movie_review_id, 'movie_director', $_POST['movie_review_director_name'] ); |
8 |
}
|
9 |
if ( isset( $_POST['movie_review_rating'] ) && $_POST['movie_review_rating'] != '' ) { |
10 |
update_post_meta( $movie_review_id, 'movie_rating', $_POST['movie_review_rating'] ); |
11 |
}
|
12 |
}
|
13 |
}
|
অ্যাডমিন প্যানেল থেকে পোষ্ট সেভ বা ডিলিট করলে এই ফাংশন কল হয়। পোষ্ট ডাটা চেক করে তার সাথে এই ফাংশন মেটা বক্স এসাইন করে দেয়।
৬ষ্ঠ ধাপঃ ডিফল্ট কাস্টম ফিল্ড অপশন ডিসেবল করা
কাস্টম পোষ্ট টাইপ তৈরি করার সময় আমরা create_movie_review
ফাংশন রেজিস্টার করেছি। supports
এরে থেকে custom-fields
ইলিমেন্ট ডিলিট করে দিন, এটা আর লাগবে না। Movie Reviews এডিটরে যান, Movie Author এবং Movie Rating নামে দুটি ফিল্ড মেটা বক্সে দেখতে পাবেন। এভাবে আপনি অন্য ইলিমেন্টও অ্যাড করতে পারেন।



কাস্টম পোষ্ট টাইপের জন্য একটি ডেডিকেটেড টেমপ্লেট তৈরি করা
কাস্টম পোষ্টের ডাটা সঠিক ভাবে ডিসপ্লে করতে একটি কাস্টম পোস্ট এর টেমপ্লেট দরকার। এখন আমরা Movie Review কাস্টম পোষ্ট টাইপের জন্য একটা পোষ্ট টেমপ্লেট তৈরি করব।
১ম ধাপঃ একটা ডেডিকেটেড টেমপ্লেট ফোর্স করার জন্য একটি ফাংশন রেজিস্টার করা
Movie-Reviews.php ওপেন করে নিচের কোড অ্যাড করুন। এটা ওয়ার্ডপ্রেস অ্যাডমিন ইন্টারফেস ভিজিট করলে একটা ফাংশন কল করে।
1 |
|
2 |
add_filter( 'template_include', 'include_template_function', 1 ); |
২য় ধাপঃ ফাংশনটি ইমপ্লিমেন্ট করা
1 |
|
2 |
function include_template_function( $template_path ) { |
3 |
if ( get_post_type() == 'movie_reviews' ) { |
4 |
if ( is_single() ) { |
5 |
// checks if the file exists in the theme first,
|
6 |
// otherwise serve the file from the plugin
|
7 |
if ( $theme_file = locate_template( array ( 'single-movie_reviews.php' ) ) ) { |
8 |
$template_path = $theme_file; |
9 |
} else { |
10 |
$template_path = plugin_dir_path( __FILE__ ) . '/single-movie_reviews.php'; |
11 |
}
|
12 |
}
|
13 |
}
|
14 |
return $template_path; |
15 |
}
|
এই কোড single-(post-type-name).php টাইপের নাম থিম ডায়রেক্টরিতে সার্চ করে। কিছু না পেলে, প্লাগিন ডায়রেক্টরিতে কোন টেমপ্লেট আছে কিনা তা চেক করে। template_include
হুক ব্যবহার করে একটা স্পেসিফিক টেমপ্লেট এনফোর্স করা হত।
৩য় ধাপঃ সিঙ্গেল পেজ টেমপ্লেট ফাইল তৈরি করা
আগের পরিবর্তন প্লাগিন ফাইলে সেভ করে নিয়ে, single-movie_reviews.php নামের আরেকটি ফাইল তৈরি করুন এবং নিচের কোড তাতে বসিয়ে নিন।
1 |
|
2 |
<?php
|
3 |
/*Template Name: New Template
|
4 |
*/
|
5 |
|
6 |
get_header(); ?> |
7 |
<div id="primary"> |
8 |
<div id="content" role="main"> |
9 |
<?php
|
10 |
$mypost = array( 'post_type' => 'movie_reviews', ); |
11 |
$loop = new WP_Query( $mypost ); |
12 |
?>
|
13 |
<?php while ( $loop->have_posts() ) : $loop->the_post();?> |
14 |
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> |
15 |
<header class="entry-header"> |
16 |
|
17 |
<!-- Display featured image in right-aligned floating div -->
|
18 |
<div style="float: right; margin: 10px"> |
19 |
<?php the_post_thumbnail( array( 100, 100 ) ); ?> |
20 |
</div>
|
21 |
|
22 |
<!-- Display Title and Author Name -->
|
23 |
<strong>Title: </strong><?php the_title(); ?><br /> |
24 |
<strong>Director: </strong> |
25 |
<?php echo esc_html( get_post_meta( get_the_ID(), 'movie_director', true ) ); ?> |
26 |
<br /> |
27 |
|
28 |
<!-- Display yellow stars based on rating -->
|
29 |
<strong>Rating: </strong> |
30 |
<?php
|
31 |
$nb_stars = intval( get_post_meta( get_the_ID(), 'movie_rating', true ) ); |
32 |
for ( $star_counter = 1; $star_counter <= 5; $star_counter++ ) { |
33 |
if ( $star_counter <= $nb_stars ) { |
34 |
echo '<img src="' . plugins_url( 'Movie-Reviews/images/icon.png' ) . '" />'; |
35 |
} else { |
36 |
echo '<img src="' . plugins_url( 'Movie-Reviews/images/grey.png' ). '" />'; |
37 |
}
|
38 |
}
|
39 |
?>
|
40 |
</header>
|
41 |
|
42 |
<!-- Display movie review contents -->
|
43 |
<div class="entry-content"><?php the_content(); ?></div> |
44 |
</article>
|
45 |
|
46 |
<?php endwhile; ?> |
47 |
</div>
|
48 |
</div>
|
49 |
<?php wp_reset_query(); ?> |
50 |
<?php get_footer(); ?> |
এখানে আমরা একটা লুপ ব্যবহার করে একটা বেসিক পেজ টেমপ্লেট তৈরি করেছি। query_posts
ফাংশন এই লুপ ব্যবহার করে কাস্টম পোষ্ট গুলো শো করে। এটা একটা বেসিক লুপ, চাইলে এটা নিজের মত করে পরিবর্ধিত করে নিতে পারেন। সিএসএস দিয়ে ইলিমেন্টগুলো ঠিক মত ফরম্যাটও করে নিতে পারেন।
৪র্থ ধাপঃ ইমেজ
আইকনের জন্য প্লাগিন ফোল্ডারে 32x32 px সাইজের দুটি ছবি সেভ করে নিন। ইমেজ দুটাকে icon.png ও grey.png নাম দিন। শেষ, এখন মুভি রিভিউ এর সব পোস্ট তারিখ অনুযায়ী একটা পেজে ডিসপ্লে হবে।



পরবর্তী টিউটোরিয়ালে আমরা দেখবো কিভাবে আর্কাউভ পেজ, কাস্টম ট্যাক্সোনমি কাস্টম কলাম ইত্যাদি নিয়ে কাজ করতে হয়। আপনার কোণ সাজেশন থাকলে তা জানাতে পারেন।