Thực tế thì taxonomy trong wordpress không support nơi lưu dữ liệu cho các field mở rộng giống như post meta trong post type. Vì vậy để thêm các field mở rộng cho taxonomy chúng ta có 2 lựa chọn, 1 là lưu trong wp_option, 2 là tạo thêm table trong data để lưu. Ngay sau đây tôi sẽ chia sẽ cách làm mời anh chị theo dõi nhé:
1. Trường hợp 1 tạo một table để lưu dữ liệu mở rộng
1.1 Table của chúng ta sẽ phải có 2 thành phần đó là id, term_id (chứa term_id) và các field mở rộng tùy theo yêu cầu từng dự án. Ở đây tôi tạo một table có 6 fields
1.2 Code thêm các thành phần field mở rộng của form: có 2 nơi để add vào 1 là form add new của taxonomy và form edit của taxonomy
1 2 3 4 5 6 7 8 |
function add_meta_taxonomy(){ $screen=get_current_screen(); //add into edit of taxonomy add_action( $screen->taxonomy.'_edit_form','add_meta_taxonomy_form', 11, 1 ); //add into new of taxonomy add_action( $screen->taxonomy.'_add_form_fields','add_meta_taxonomy_form', 9, 1 ); } add_action( 'admin_head', 'add_meta_taxonomy'); |
1.3 Code Lưu dữ liệu mới vào table riêng của dự án
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function fcwordpress_create_term( $term_id, $tt_id, $taxonomy ) { global $wpdb; $tax_meta_title = !empty($_POST['tax_meta_title']) ? $_POST['tax_meta_title'] : ''; $tax_meta_description = !empty($_POST['tax_meta_description']) ? $_POST['tax_meta_description'] : ''; $tax_meta_keywords = !empty($_POST['tax_meta_keywords']) ? $_POST['tax_meta_keywords'] : ''; $tax_noindex = !empty($_POST['tax_noindex']) ? $_POST['tax_noindex'] : '0'; $check=$wpdb->get_results("SELECT * FROM `".$wpdb->prefix."eupro_seo` where `term_id` = '{$term_id}'"); if($check): $sql="UPDATE `".$wpdb->prefix."eupro_seo` SET `tax_meta_title` = '{$tax_meta_title}', `tax_meta_description` = '{$tax_meta_description}', `tax_meta_keywords` = '{$tax_meta_keywords}', `tax_noindex` = '{$tax_noindex}' WHERE `term_id` = '{$term_id}';"; else: $sql="INSERT INTO `".$wpdb->prefix."eupro_seo` ( `term_id`, `tax_meta_title`, `tax_meta_description`, `tax_meta_keywords`, `tax_noindex`) VALUES ( '{$term_id}', '{$_POST['tax_meta_title']}', '{$_POST['tax_meta_description']}', '{$_POST['tax_meta_keywords']}', '{$_POST['tax_noindex']}')"; endif; $wpdb->query($sql); } add_action( 'create_term', 'fcwordpress_create_term' 99, 3 ); |
1.4 Code cập nhật dữ liệu vào table riêng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function fcwordpress_update_term( $term_id, $tt_id, $taxonomy ) { global $wpdb; $tax_meta_title = !empty($_POST['tax_meta_title']) ? $_POST['tax_meta_title'] : ''; $tax_meta_description = !empty($_POST['tax_meta_description']) ? $_POST['tax_meta_description'] : ''; $tax_meta_keywords = !empty($_POST['tax_meta_keywords']) ? $_POST['tax_meta_keywords'] : ''; $tax_noindex = !empty($_POST['tax_noindex']) ? $_POST['tax_noindex'] : '0'; $check=$wpdb->get_results("SELECT * FROM `".$wpdb->prefix."eupro_seo` where `term_id` = '{$term_id}'"); if($check): $sql="UPDATE `".$wpdb->prefix."eupro_seo` SET `tax_meta_title` = '{$tax_meta_title}', `tax_meta_description` = '{$tax_meta_description}', `tax_meta_keywords` = '{$tax_meta_keywords}', `tax_noindex` = '{$tax_noindex}' WHERE `term_id` = '{$term_id}';"; else: $sql="INSERT INTO `".$wpdb->prefix."eupro_seo` ( `term_id`, `tax_meta_title`, `tax_meta_description`, `tax_meta_keywords`, `tax_noindex`) VALUES ( '{$term_id}', '{$_POST['tax_meta_title']}', '{$_POST['tax_meta_description']}', '{$_POST['tax_meta_keywords']}', '{$_POST['tax_noindex']}')"; endif; $wpdb->query($sql); } add_action( 'edit_term', 'fcwordpress_update_term', 99, 3 ); |
1.5 Code xóa dữ liệu từ table riêng
1 2 3 4 5 |
function fcwordpress_delete_term( $term, $tt_id, $taxonomy, $deleted_term, $object_ids) { global $wpdb; $wpdb->query("DELETE FROM `".$wpdb->prefix."eupro_seo` WHERE `term_id` = '{$term}'"); } add_action( 'delete_term','fcwordpress_delete_term', 99, 5 ); |
1.6 Code đầy đủ để anh chị copy về tham khảo và làm cho dự án của mình
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 |
function add_meta_taxonomy(){ $screen=get_current_screen(); //add into edit of taxonomy add_action( $screen->taxonomy.'_edit_form','add_meta_taxonomy_form', 11, 1 ); //add into new of taxonomy add_action( $screen->taxonomy.'_add_form_fields','add_meta_taxonomy_form', 9, 1 ); } add_action( 'admin_head', 'add_meta_taxonomy'); function fcwordpress_create_term( $term_id, $tt_id, $taxonomy ) { global $wpdb; $tax_meta_title = !empty($_POST['tax_meta_title']) ? $_POST['tax_meta_title'] : ''; $tax_meta_description = !empty($_POST['tax_meta_description']) ? $_POST['tax_meta_description'] : ''; $tax_meta_keywords = !empty($_POST['tax_meta_keywords']) ? $_POST['tax_meta_keywords'] : ''; $tax_noindex = !empty($_POST['tax_noindex']) ? $_POST['tax_noindex'] : '0'; $check=$wpdb->get_results("SELECT * FROM `".$wpdb->prefix."eupro_seo` where `term_id` = '{$term_id}'"); if($check): $sql="UPDATE `".$wpdb->prefix."eupro_seo` SET `tax_meta_title` = '{$tax_meta_title}', `tax_meta_description` = '{$tax_meta_description}', `tax_meta_keywords` = '{$tax_meta_keywords}', `tax_noindex` = '{$tax_noindex}' WHERE `term_id` = '{$term_id}';"; else: $sql="INSERT INTO `".$wpdb->prefix."eupro_seo` ( `term_id`, `tax_meta_title`, `tax_meta_description`, `tax_meta_keywords`, `tax_noindex`) VALUES ( '{$term_id}', '{$_POST['tax_meta_title']}', '{$_POST['tax_meta_description']}', '{$_POST['tax_meta_keywords']}', '{$_POST['tax_noindex']}')"; endif; $wpdb->query($sql); } add_action( 'create_term', 'fcwordpress_create_term' 99, 3 ); function fcwordpress_update_term( $term_id, $tt_id, $taxonomy ) { global $wpdb; $tax_meta_title = !empty($_POST['tax_meta_title']) ? $_POST['tax_meta_title'] : ''; $tax_meta_description = !empty($_POST['tax_meta_description']) ? $_POST['tax_meta_description'] : ''; $tax_meta_keywords = !empty($_POST['tax_meta_keywords']) ? $_POST['tax_meta_keywords'] : ''; $tax_noindex = !empty($_POST['tax_noindex']) ? $_POST['tax_noindex'] : '0'; $check=$wpdb->get_results("SELECT * FROM `".$wpdb->prefix."eupro_seo` where `term_id` = '{$term_id}'"); if($check): $sql="UPDATE `".$wpdb->prefix."eupro_seo` SET `tax_meta_title` = '{$tax_meta_title}', `tax_meta_description` = '{$tax_meta_description}', `tax_meta_keywords` = '{$tax_meta_keywords}', `tax_noindex` = '{$tax_noindex}' WHERE `term_id` = '{$term_id}';"; else: $sql="INSERT INTO `".$wpdb->prefix."eupro_seo` ( `term_id`, `tax_meta_title`, `tax_meta_description`, `tax_meta_keywords`, `tax_noindex`) VALUES ( '{$term_id}', '{$_POST['tax_meta_title']}', '{$_POST['tax_meta_description']}', '{$_POST['tax_meta_keywords']}', '{$_POST['tax_noindex']}')"; endif; $wpdb->query($sql); } add_action( 'edit_term', 'fcwordpress_update_term', 99, 3 ); function fcwordpress_delete_term( $term, $tt_id, $taxonomy, $deleted_term, $object_ids) { global $wpdb; $wpdb->query("DELETE FROM `".$wpdb->prefix."eupro_seo` WHERE `term_id` = '{$term}'"); } add_action( 'delete_term','fcwordpress_delete_term', 99, 5 ); |
2. Trường hợp 2 chúng ta lưu vào wp_options: thì các bước giống như trên trừ các công việc lưu vào option thì có vẻ đơn giản hơn nhiều. Tôi sẽ không trình bày từng bước nữa mà đưa cho anh chị code tổng hợp luôn, để anh chị copy về tham khảo
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 |
function add_meta_taxonomy(){ $screen=get_current_screen(); //add into edit of taxonomy add_action( $screen->taxonomy.'_edit_form','add_meta_taxonomy_form', 11, 1 ); //add into new of taxonomy add_action( $screen->taxonomy.'_add_form_fields','add_meta_taxonomy_form', 9, 1 ); } add_action( 'admin_head', 'add_meta_taxonomy'); function fcwordpress_create_term( $term_id, $tt_id, $taxonomy ) { global $wpdb; $tax_meta_title = !empty($_POST['tax_meta_title']) ? $_POST['tax_meta_title'] : ''; $tax_meta_description = !empty($_POST['tax_meta_description']) ? $_POST['tax_meta_description'] : ''; $tax_meta_keywords = !empty($_POST['tax_meta_keywords']) ? $_POST['tax_meta_keywords'] : ''; $tax_noindex = !empty($_POST['tax_noindex']) ? $_POST['tax_noindex'] : '0'; update_option($term_id."_tax_meta_title",$tax_meta_title); update_option($term_id."_tax_meta_description",$tax_meta_description); update_option($term_id."_tax_meta_keywords",$tax_meta_keywords); update_option($term_id."_tax_noindex",$tax_noindex); } add_action( 'create_term', 'fcwordpress_create_term' 99, 3 ); function fcwordpress_update_term( $term_id, $tt_id, $taxonomy ) { global $wpdb; $tax_meta_title = !empty($_POST['tax_meta_title']) ? $_POST['tax_meta_title'] : ''; $tax_meta_description = !empty($_POST['tax_meta_description']) ? $_POST['tax_meta_description'] : ''; $tax_meta_keywords = !empty($_POST['tax_meta_keywords']) ? $_POST['tax_meta_keywords'] : ''; $tax_noindex = !empty($_POST['tax_noindex']) ? $_POST['tax_noindex'] : '0'; update_option($term_id."_tax_meta_title",$tax_meta_title); update_option($term_id."_tax_meta_description",$tax_meta_description); update_option($term_id."_tax_meta_keywords",$tax_meta_keywords); update_option($term_id."_tax_noindex",$tax_noindex); } add_action( 'edit_term', 'fcwordpress_update_term', 99, 3 ); function fcwordpress_delete_term( $term, $tt_id, $taxonomy, $deleted_term, $object_ids) { global $wpdb; $wpdb->query("DELETE FROM `".$wpdb->prefix."eupro_seo` WHERE `term_id` = '{$term}'"); } add_action( 'delete_term','fcwordpress_delete_term', 99, 5 ); |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress