Làm sao để quản lý media attachments tốt hơn?

Với những trang web có số lượng file upload lớn đặc biệt là file hình cho các bài viết thì đã nảy sinh ra 1 vấn đề đó là quản lý. Cách thường dùng là các bạn đặt tên cho phù hợp với file để search và sử dụng bộ lọc theo ngày hay theo tác giả đã được cung cấp mặc định bởi wordpress để lọc. Nhưng những tính năng đó còn chưa tốt cho việc quản lý. Giả sử mình muốn lọc theo loại file hay theo danh mục bài viết, … thì nó vẫn chưa đáp ứng được. Do đó hôm nay mình sẽ hướng dẫn các bạn viết thêm một số tính năng phân loại để giúp cho việc quản lý tốt hơn.

attachment-wordpres

Media Attachment

Để thêm 1 taxonomy có sẵn như category, tag hay bất kỳ taxonomy nào đã được đăng ký đến 1 post type, các bạn dùng hàm register_taxonomy_for_object_type với 2 tham số truyền vào lần lượt là taxonomy và post type.

Cú pháp như sau:

1
<?php register_taxonomy_for_object_type( $taxonomy, $object_type ); ?>

Vậy để thêm category và tag của các bài viết vào phần ta làm như sau:

Category:

1
2
3
4
5
6
7
function dvd_add_categories_to_attachments() {
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'dvd_add_categories_to_attachments' );

Tag:

1
2
3
4
5
6
7
function dvd_add_tags_to_attachments() {
register_taxonomy_for_object_type( 'post_tag', 'attachment' );
}
add_action( 'init' , 'dvd_add_tags_to_attachments' );

Mở phần quản lý media lên để xem kết quả nào.

 

Bây giờ các bạn đã có thể cập nhật chuyên mục hay tag cho các file bằng cách edit file.

trang edit khi đã thêm category và tag

Edit attachment

Ở trên mình đang dùng taxonomy có sẵn để phân loại. Bây giờ mình sẽ thêm 1 taxonomy mới để phân loại. Giả sử như mình thêm taxnomy dùng để phân loại theo loại file. Cách làm tương tự như các bạn đăng ký 1 taxnomy thôi.

01
02
03
04
05
06
07
08
09
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
function dvd_add_media_taxonomy() {
$labels = array(
'name'              => 'Types',
'singular_name'     => 'Types',
'search_items'      => 'Search Types',
'all_items'         => 'All Types',
'parent_item'       => 'Parent Types',
'parent_item_colon' => 'Parent Types:',
'edit_item'         => 'Edit Types',
'update_item'       => 'Update Types',
'add_new_item'      => 'Add New Types',
'new_item_name'     => 'New Types Name',
'menu_name'         => 'Types'
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'query_var' => 'true',
'rewrite' => 'true',
'show_admin_column' => 'true'
);
register_taxonomy( 'media_type', 'attachment', $args );
}
add_action( 'init', 'dvd_add_media_taxonomy' );

Đây là kết quả sau khi mình đã cập nhật:

thêm custom taxonomy vào media

Thêm custom taxonomy vào media attachment

Đơn giản phải không nào. Tương tự các bạn có thể thêm nhiều taxonomy khác nhau tùy theo nhu cầu phân loại của các bạn.

Muốn lọc theo term của taxonomy nào thì chỉ cần chọn vào term của taxonomy đó. Nhưng lọc theo kiểu này vẫn chưa sát vì chỉ mới lọc được duy nhất 1 taxonomy. Trường hợp muốn lọc theo nhiều taxonomy thì sao? Rất đơn giản chỉ cần làm theo vài bước hướng dẫn tiếp theo của mình bạn sẽ hiểu được cách giải quyết.

Đầu tiên mình sẽ dùng 1 action có tên restrict_manage_posts để thêm 2 select box vào cùng hàng với bulk actions. 2 select box này mình sẽ hiển thị tất cả các term của taxonomy mình cần hiển thị. Ở đây mình sẽ hiển thị category và custom taxonomy đã đăng ký ở trên là Types. Đây là code:

01
02
03
04
05
06
07
08
09
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
function dvd_add_extra_media_filter() {
$screen = get_current_screen();
if ( 'upload' == $screen->id ) {
$tax1 = "category";
$tax2 = "media_type";
$tax1_selected = isset($_GET[$tax1]) ? $_GET[$tax1] : "";
$tax2_selected = isset($_GET[$tax2]) ? $_GET[$tax2] : "";
wp_dropdown_categories(array(
'show_option_all' => 'All categories',
'taxonomy' => $tax1,
'name' => $tax1,
'hide_empty' => false,
'orderby' => 'name',
'selected' => $tax1_selected
));
wp_dropdown_categories(array(
'show_option_all' => 'All types',
'taxonomy' => $tax2,
'name' => $tax2,
'hide_empty' => false,
'orderby' => 'name',
'selected' => $tax2_selected
));
}
}
add_action( 'restrict_manage_posts', 'dvd_add_extra_media_filter');

Giải thích: mình kiểm tra screen hiện tại có phải là upload không vì mình chỉ muốn hiển thị 2 select box này ở trang upload sau đó dùng wp_dropdown_categories để show các term của taxonomy tương ứng.

Tiếp theo mình sẽ dùng action có tên parse_query để tùy chỉnh query cho phù hợp khi lọc theo categories và types.

01
02
03
04
05
06
07
08
09
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
function dvd_custom_media_query($query) {
global $pagenow; //biến lưu trang hiện tại
$tax1 = "category";
$tax2 = "media_type";
//tên 2 taxonomy trên select box
$tax_query = array();  //mảng lưu các tham số taxonomy dùng để truyền vào query
$q_vars = &$query->query_vars; //tham chiếu đến đến mảng query_vars
if (is_admin() && $pagenow == "upload.php" && isset($q_vars["post_type"]) && $q_vars["post_type"] == "attachment" && isset($_GET[$tax1]) && is_numeric($_GET[$tax1]) && $_GET[$tax1] != 0) { //kiểm tra thông tin hợp lệ và thiết lập thêm tham số taxonomy cho query
$tax1_query = array();
$tax1_query["taxonomy"] = $tax1;
$tax1_query["field"] = "id";
$tax1_query["terms"] = $_GET[$tax1];
$tax_query[] = $tax1_query;
}
if (is_admin() && $pagenow == "upload.php" && isset($q_vars["post_type"]) && $q_vars["post_type"] == "attachment" && isset($_GET[$tax2]) && is_numeric($_GET[$tax2]) && $_GET[$tax2] != 0) {
$tax2_query = array();
$tax2_query["taxonomy"] = $tax2;
$tax2_query["field"] = "id";
$tax2_query["terms"] = $_GET[$tax2];
$tax_query[] = $tax2_query;
}
$query->set("tax_query", $tax_query);
}
add_filter('parse_query', 'dvd_custom_media_query');

Ok, vậy là xong rồi. Bây giờ kiểm tra kết quả thôi.

 

Kết quả lọc với nhiều taxonomy

Lời kết

Vậy là mình đã hướng dẫn xong cho các bạn cách thêm category, tag và custom taxonomy vào media attachments. Các bạn có thể tùy biến, tạo các taxnonomy phân loại phù hợp với website của các bạn. Hy vọng qua bài viết này có thể giúp các bạn của mình tốt hơn.

Related posts:

Leave a Reply

Your email address will not be published. Required fields are marked *