Cách lọc bài viết ở trang archive với custom fields và custom taxonomy
https://vi.fitwp.com/loc-bai-viet-trang-archive-custom-fields-taxonomy/
Cách lọc bài viết ở trang archive với custom fields và custom taxonomy
13/07/2020
Trong WordPress, ngoài việc dùng Tag và Category, bạn có thể dùng custom fields và custom taxonomy để tạo bộ lọc cho bài viết theo cách của riêng mình. Mình sẽ giới thiệu cho các bạn một cách làm khá đơn giản bằng việc dùng plugin Meta Box.Mục lục ẩn
Đây là một plugin miễn phí có trên WordPress.org cung cấp framework để tạo custom fields. Ngoài ra thì nó còn giúp bạn tạo custom taxonomy mà không cần phải code bằng tay.
Để tạo custom field bằng giao diện UI trực quan, bạn có thể mua extension Meta Box Builder. Nếu bạn là dân code thì có thể bỏ qua extension này để tiết kiệm chi phí. Tuy nhiên, có một cách khác vừa miễn phí vừa đơn giản, đó là sử dụng công cụ Online Generator.
Trong bài này, mình tạo bộ lọc cho trang bán sách gồm các tác giả và nhà xuất bản khác nhau. Trước hết, mình tạo một custom post type mới tên là Book để hiển thị các đầu sách. Nếu bạn chưa biết cách tạo thì có thể đọc bài viết tạo custom post type với plugin Meta Box.
Tạo bộ lọc theo custom taxonomy
Bước 1: Tạo custom taxonomy cho post type
Mình đã có một custom post type là Sách (book) và mình muốn tạo một custom taxonomy là Nhà xuất bản cho nó. Vào Meta Box > Taxonomies > Add New để tạo một taxonomy mới rồi điền thông tin và slug của taxonomy ở phần Basic Settings. Tiếp theo bạn chọn ô Book ở phần Assign to Post Type để taxonomy này được gán cho các sách.
Cuối cùng, chọn ô Hierarchical? để bạn có thể tick chọn các term trong taxonomy giống như chọn các category cho bài viết. Mình khuyến khích các bạn chọn phần này để các thao tác trở nên đơn giản hơn nhé.
Bên cạnh đó, bạn cũng có thể tham khảo thêm 1 cách tạo custom taxonomy khác tại đây.
Tiếp đến, mình sẽ tạo một số term trong các taxonomy vừa rồi. Bạn vào Book và tìm tên taxonomy bạn muốn (các taxonomy bạn tạo sẽ được liệt kê ở dưới phần Add New). Sau đó điền tên term, slug, và click vào ô Add New ở dưới cùng.
Bây giờ khi vào một post type của Book, bạn sẽ thấy các taxonomy và term vừa tạo được hiển thị ở cột bên phải rồi đấy. Bạn chỉ việc tick chọn term cho bài đăng đó thôi.
Bước 2: Hiển thị danh sách các taxonomy ra trang archive
Để hiển thị các taxonomy vừa tạo ra trang archive, các bạn mở file archive.php
và thêm đoạn code sau vào chỗ muốn hiển thị ở page:
Trong đó 'nha-xuat-ban'
là slug của taxonomy Nhà Xuất Bản mình vừa tạo. Bạn chỉ cần thay slug tương ứng của bạn vào phần này là được.
Thử mở trang archive Book ra, bạn sẽ thấy các term mình tạo hiện lên đây như sau:
Ví dụ như bấm vào NXB Trẻ sẽ có slug như sau: the-loai/tieu-thuyet/?getby=cat&cat=nxb-tre
Nhưng bạn chưa thể thực hiện việc lọc ngay bây giờ đâu. Hãy cùng chuyển sang bước 3 để thực hiện việc này.
Bước 3: Thực hiện việc lọc bằng custom taxonomy
Bây giờ bạn hãy thêm đoạn code sau vào file functions.php
:
Trong đó:
justread
là tên của theme mình đang dùng (bạn có thể tải Justread tại đây).'pre_get_posts'
là hook thực hiện trước khi bài viết được lấy ra.'nha-xuat-ban'
là slug của custom taxonomy.
Và đây là kết quả cuối cùng. Mình chỉ cần click vào term cần lọc là đã tìm được các bài viết thuộc term đó rồi.
Tạo bộ lọc dựa theo custom field
Bước 1: Tạo custom field để làm bộ lọc cho post type
Tương tự như trên, mình sẽ tạo 1 bộ lọc dựa vào custom fields cho các cuốn sách. Custom fields mình tạo ở đây là Tác giả.
Vào Meta Box > Custom Fields > Add New để tạo custom field mới. Ở tab Fields hãy chọn loại field là Text và điền thông tin đầy đủ. Các bạn hãy nhớ ID của field để điền vào code. Ở đây, mình tạo một custom field tên là Tác giả với ID là tac_gia
.
Ở tab Settings chọn post type là Book nhé.
Bước 2: Hiển thị danh sách các giá trị của custom field ra trang archive
Bạn cần phải thêm đoạn code sau vào file archive.php
, chọn nơi muốn giá trị của custom field được hiển thị.
Trong đó:
"tac_gia"
: là ID của custom field tạo ở bước 1.$wpdb->postmeta
: trỏ đến bảngwp_postmeta
của WordPress, là nơi chứa giá trị các custom field.
Ví dụ như bấm J.K.Rowling vào sẽ có link sau:
http://demo1.elightup.com/test-metabox/the-loai/tieu-thuyet/?getby=field&field=J.K.%20Rowling
Bước 3: Thực hiện việc lọc bằng custom field
Tương tự như ở phần lọc bằng custom taxonomy, bạn cần thêm code vào file function.php
để thực hiện hành động lọc bằng custom field.
Trong đó:
justread
là tên theme đang sử dụng.‘pre_get_posts'
là hook thực hiện trước khi bài viết được lấy ra.'tac_gia'
: là ID của custom field tạo ở bước 1.
Và đây là kết quả khi mình lọc các sách của tác giả J.K Rowling:
Last updated
Was this helpful?