Sau một thời gian thiết kế website wordpress , nhận thấy wordpress còn thiếu một số phẩn lọc theo taxonomy post type wordpress,bài viết này sẽ hướng dẫn code bổ sụng lọc (filter) post cho post type wordpress.
Tham khảo : Thiết kế website nhà hàng
Tạo post type wordpress :
Sau khi tạo post type wordpress ở đây là sản phẩm :
Bước 1 : Tạo Filter với dropdown select taxonomy
Bạn chỉ cần add vài dòng code sau cho hook restrict_manage_posts
[crayon]
add_filter(‘parse_query’, ‘tsm_convert_id_to_term_in_query’);
function tsm_convert_id_to_term_in_query($query) {
global $pagenow;
$post_type = ‘products’; // change to your post type
$taxonomy = ‘list-products’; // change to your taxonomy
$q_vars = &$query->query_vars;
if ( $pagenow == ‘edit.php’ && isset($q_vars[‘post_type’]) && $q_vars[‘post_type’] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
$term = get_term_by(‘id’, $q_vars[$taxonomy], $taxonomy);
$q_vars[$taxonomy] = $term->slug;
}
}
[/crayon]
với post type và taxonomy tương úng mà bạn tạo, sau khi add dòng code này bạn sẽ thấy
add_action(‘restrict_manage_posts’, ‘tsm_filter_post_type_by_taxonomy’);
function tsm_filter_post_type_by_taxonomy() {
global $typenow;
$post_type = ‘products’; // change to your post type
$taxonomy = ‘list-products’; // change to your taxonomy
if ($typenow == $post_type) {
$selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : ”;
$info_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
‘show_option_all’ => __(” {$info_taxonomy->label}”),
‘taxonomy’ => $taxonomy,
‘name’ => $taxonomy,
‘orderby’ => ‘name’,
‘selected’ => $selected,
‘show_count’ => true,
‘hide_empty’ => true,
));
};
}
[/crayon]
Tiếp theo bạn cần xử lí query với dòng code sau :
[crayon] add_filter(‘parse_query’, ‘tsm_convert_id_to_term_in_query’);function tsm_convert_id_to_term_in_query($query) {
global $pagenow;
$post_type = ‘products’; // change to your post type
$taxonomy = ‘list-products’; // change to your taxonomy
$q_vars = &$query->query_vars;
if ( $pagenow == ‘edit.php’ && isset($q_vars[‘post_type’]) && $q_vars[‘post_type’] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
$term = get_term_by(‘id’, $q_vars[$taxonomy], $taxonomy);
$q_vars[$taxonomy] = $term->slug;
}
}
[/crayon]
đây là toàn bộ source cocde trên , bạn copy file funcitons.php trong theme wordpress
[crayon]
add_action(‘restrict_manage_posts’, ‘tsm_filter_post_type_by_taxonomy’);
function tsm_filter_post_type_by_taxonomy() {
global $typenow;
$post_type = ‘products’; // change to your post type
$taxonomy = ‘list-products’; // change to your taxonomy
if ($typenow == $post_type) {
$selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : ”;
$info_taxonomy = get_taxonomy($taxonomy);
wp_dropdown_categories(array(
‘show_option_all’ => __(” {$info_taxonomy->label}”),
‘taxonomy’ => $taxonomy,
‘name’ => $taxonomy,
‘orderby’ => ‘name’,
‘selected’ => $selected,
‘show_count’ => true,
‘hide_empty’ => true,
));
};
}
/**
* Filter posts by taxonomy in admin
*/
add_filter(‘parse_query’, ‘tsm_convert_id_to_term_in_query’);
function tsm_convert_id_to_term_in_query($query) {
global $pagenow;
$post_type = ‘products’; // change to your post type
$taxonomy = ‘list-products’; // change to your taxonomy
$q_vars = &$query->query_vars;
if ( $pagenow == ‘edit.php’ && isset($q_vars[‘post_type’]) && $q_vars[‘post_type’] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
$term = get_term_by(‘id’, $q_vars[$taxonomy], $taxonomy);
$q_vars[$taxonomy] = $term->slug;
}
}
[/crayon]