ওয়ার্ডপ্রেসের ট্যাক্সনমিতে ডিফল্ট ভাবে মেটাবক্স দেখানোর কোন সুবিধা নেই, কিন্তু মজার ব্যাপার হল ওয়ার্ডপ্রেস কোডিং স্ট্রাকচার এমন ভাবে করা যাতে আমরা নিজেরা ডাটাবেজে আলাদা টেবিল দিয়ে সহজে কাজটা সেরে নিতে পারি 🙂
স্পেসিফিক অবজেক্ট গুলো তে মেটা যোগ করার জন্যে ওয়ার্ডপ্রেস এ add_metadata নামে একটা ফাংশন আছে আমরা ওটা দিয়ে কাজ করব 🙂
চলুন ফাংশনটা একবার দেখে নিই https://github.com/WordPress/WordPress/blob/master/wp-includes/meta.php#L29
এই পেজের ৩৬ নাম্বার লাইনে দেখুন যে _get_meta_table নামে একটা ফাংশন দিয়ে মেটা টেবিল টাও নেওয়া হয়েছে, ফাংশন টা ওই পেজের ১১০৭ নাম্বার লাইনে আছে।
1 2 3 4 5 6 7 8 9 10 |
function _get_meta_table($type) { global $wpdb; $table_name = $type . 'meta'; if ( empty($wpdb->$table_name) ) return false; return $wpdb->$table_name; } |
এই ফাংশনে একটু খেয়াল করলে বুঝা যাবে যে মেটা টেবিল করার আগে টেবিল নেমের সাফিক্স অবশ্যই meta হতে হবে এবং ওটা $wpdb অবজেক্ট এর সাথে সেট করে দিতে হবে। আমাদের ট্যাক্সনমি মেটা টেবিলের নাম আমরা taxonomymeta ই দিচ্ছি। তাহলে চলুন আমরা ছোট একটা প্লাগিন বালিয়ে ফেলি যেটা একটিভ করলে taxonomymeta টেবিল টা ওয়ার্ডপ্রেস ডাটাবেজে যোগ হয়ে যাবে আর $wpdb অবজেক্টের সাথে taxonomymeta নাম টা পেজ ইনিশিয়েট এর সময় সেট হয়ে যাবে। taxonomymeta টেবিলের কলাম গুলো হবে অন্যান্য মেটা টেবিল ( পোস্ট, ইউজার, কমেন্ট ইত্যাদি ) কলাম গুলোর মতই, যেমন ঃ meta_id, taxonomy_id, meta_key, meta_value.
প্লাগিন এক্টিভেশনের সময় আমরা টেবিল টা তৈরি করব আর init হুকে আমরা $wpdb তে ট্যাক্সনমি টেবিলের নাম টা বলে দিব।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
<?php /** * Plugin Name: Name Of The Plugin * Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates * Description: A brief description of the Plugin. * Version: The Plugin's Version Number, e.g.: 1.0 * Author: Name Of The Plugin Author * Author URI: http://URI_Of_The_Plugin_Author * License: A "Slug" license name e.g. GPL2 */ function taxmeta_add_table(){ global $wpdb; $wpdb->taxonomymeta = "{$wpdb->prefix}taxonomymeta"; // টেবিল নেম সেট করে দিলাম } function taxmeta_activate(){ global $wpdb; $charset_collate = ''; if (!empty($wpdb->charset)) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if (!empty($wpdb->collate)) $charset_collate .= " COLLATE $wpdb->collate"; $tables = $wpdb->get_results("show tables like '{$wpdb->prefix}taxonomymeta'"); // টেবিল তৈরি করছি if (!count($tables)) { $wpdb->query("CREATE TABLE {$wpdb->prefix}taxonomymeta ( meta_id bigint(20) unsigned NOT NULL auto_increment, taxonomy_id bigint(20) unsigned NOT NULL default '0', meta_key varchar(255) default NULL, meta_value longtext, PRIMARY KEY (meta_id), KEY taxonomy_id (taxonomy_id), KEY meta_key (meta_key) ) $charset_collate;"); } } function taxmeta_deactivate() { global $wpdb; $tables = $wpdb->get_results("show tables like '{$wpdb->prefix}taxonomymeta'"); if (count($tables)) { $wpdb->query("DROP TABLE {$wpdb->prefix}taxonomymeta ;"); } } add_action('init', 'taxmeta_add_table'); register_activation_hook(__FILE__, 'taxmeta_activate'); register_deactivation_hook(__FILE__, 'taxmeta_deactivate'); |
এবার মেটাডাটা গুলা সেভ, আপডেট, ডিলিট করার জন্যে ফাংশন গুলা লিখে ফেলব।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// টার্ম মেটা সেভ করার জন্যে function add_term_meta($term_id, $meta_key, $meta_value, $unique = FALSE) { return add_metadata('taxonomy', $term_id, $meta_key, $meta_value, $unique); } // টার্ম মেটা ডিলিট করার জন্যে function delete_term_meta($term_id, $meta_key, $meta_value = '') { return delete_metadata('taxonomy', $term_id, $meta_key, $meta_value); } // টার্ম মেটাডাটা নেওয়ার জন্যে function get_term_meta($term_id, $key, $single = FALSE) { return get_metadata('taxonomy', $term_id, $key, $single); } // টার্ম মেটা আপডেট করার জন্যে function update_term_meta($term_id, $meta_key, $meta_value, $prev_value = '') { return update_metadata('taxonomy', $term_id, $meta_key, $meta_value, $prev_value); } |
এখন ট্যাক্সনমিতে আমরা মেটা ফর্ম ফিল্ড যোগ ও তা সেভ করব। ট্যাক্সনমি মেটা ফর্ম ফিল্ড যোগ ও সেভ করার জন্যে ওয়ার্ডপ্রেসের একশন হুক আছে। ধরুন আমাদের ট্যাক্সনমি নাম txname তাহলেঃ
1 2 3 4 5 6 7 |
add_action('txname_add_form_fields', 'taxonomy_metabox_add'); // ট্যাক্সনমিতে ফর্ম ফিল্ড যোগ করার জন্যে add_action('txname_edit_form_fields', 'taxonomy_metabox_edit'); // ট্যাক্সনমির ফর্ম ফিল্ড ডাটা এডিট করার জন্যে add_action("created_txname", 'save_taxonomy_metadata'); // ফর্ম ফিল্ড ডাটা তৈরি করার সময় সেভ করার জন্যে add_action("edited_txname", 'save_taxonomy_metadata'); // ফর্ম ফিল্ড ডাটা এডিট করার পর সেভ করার জন্যে |
একটা উদাহরণ দিলে ব্যাপার টা আরও ক্লিয়ার হবে ঃ ধরুন আমরা নির্দিষ্ট নাম্বার এর একটা রেঞ্জ ফিল্ড দিব তাহলেঃ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<?php function taxonomy_metabox_add($tag) { ?> <div class="form-field"> <label for="numrange"><?php _e('Range Filed: ', 'textdomain') ?></label> 0 <input type="range" name="numrange" id="numrange" value="2" min="1" max="10"> 10 <p class="description"><?php _e('Choose your number range.', 'textdomain'); ?></p> </div> <?php } function taxonomy_metabox_edit($tag) { ?> <tr class="form-field"> <th scope="row" valign="top"> <label for="publish"><?php _e('Range Filed: ', 'textdomain') ?></label> </th> <td> 0 <input type="range" name="numrange" id="numrange" value="<?php echo get_term_meta($tag->term_id, 'numrange', TRUE) ?>" min="1" max="10"> 10 <p class="description"><?php _e('Choose your number range.', 'textdomain'); ?></p> </td> </tr> <?php } function save_taxonomy_metadata($term_id) { if (isset($_POST[ 'numrange' ])) { $numrange = esc_attr($_POST[ 'numrange' ]); update_term_meta($term_id, 'numrange', $numrange); } } |
ফর্ম ফিল্ড এড করা আর এডিট করার html ভিন্ন এইজন্যে আলাদা ফাংশন করতে হয়েছে কিন্তু সেভ বা আপডেট করার জন্যে আমরা একটা ফাংশন ই ব্যাবহার করেছি 🙂
এখন আপনি চাইলে যেকোনো স্থানে ট্যাক্সনমির মেটা ডাটা ব্যবহার করতে পারেন, যেমন আমরা যদি রেঞ্জ ফিল্ড টার ডাটা ব্যবহার করতে চাই তাহলে get_term_meta(TERM_ID, ‘numrange’, TRUE); দিয়ে রেঞ্জ ফিল্ড এর ডাটা পাব। তবে যেহেতু get_term_meta আমাদের নিজেদের করা ফাংশন তাই ওটা ব্যবহারের আগে ফাংশন টা exists আছে কিনা তা চেক করে ব্যবহার উচিত 🙂
One thought on “ওয়ার্ডপ্রেস ট্যাক্সনমিতে মেটাবক্স সুবিধা যোগ করা”