Thêm trường vào danh mục / phân loại WordPress

Gần đây tôi đã có một nhu cầu để lưu trữ một số thông tin thêm siêu về mỗi thể loại / phân loại tùy chỉnh trong WordPress. Về cơ bản, tôi chỉ cần thêm một trường bổ sung. Nó chỉ là một vấn đề đơn giản của việc tìm kiếm các móc phù hợp và tạo một plugin meta danh mục đơn giản. Chúng tôi không làm nhiều việc bổ sung thêm các danh mục mới, chúng tôi chủ yếu chỉ cần lưu trữ một số thông tin bổ sung về các danh mục hiện có, vì vậy tôi chỉ cần nối vào biểu mẫu chỉnh sửa.

Tôi cũng muốn điều này hoạt động mà không cần sử dụng bất kỳ bảng tùy chỉnh nào, nhưng thực sự không có nơi nào tốt để lưu trữ thông tin về loại này trong các bảng WordPress mặc định. Tôi quyết định rằng bảng wp_options sẽ phù hợp nhất kể từ khi nó đi xuống nó, hầu hết các trang web sẽ không có nhiều hơn một vài trăm loại. Không có đủ thông tin được lưu trữ ở phía chúng tôi để điều này gây ra sự cố.

 add_action ('category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edit_category', 'taxonomy_meta_form'); 

Hành động đầu tiên móc trong thể loại / phân loại hình thức chỉnh sửa. Nó hiển thị biểu mẫu chúng ta đã tạo và xuất từ ​​hàm có tên taxonomy_meta_form_fields . Hành động thứ hai gọi taxonomy_meta_form khi biểu mẫu danh mục thực sự được chỉnh sửa.

Toàn bộ mã

 add_action ('category_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edit_category', 'taxonomy_meta_form'); function taxonomy_meta_form () {if (! current_user_can ('manage_options')) // đảm bảo người dùng có quyền truy cập thích hợp; if ($ _ POST ['extra_title']) {$ extra_title = sanitize_text_field ($ _ POST ['extra_title']); // đảm bảo không có gì độc hại $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ cat_ID = (int) $ _ POST ['tag_ID']; $ extra_titles [$ cat_ID] = $ extra_title; // cập nhật giá trị cho update_option ID của danh mục này ('extra_taxonomy_titles', $ extra_titles); // lưu trữ mảng, WP xử lý tuần tự}} function taxonomy_meta_form_fields ($ tag) {$ cat_ID = $ tag-> term_id; $ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_title = $ extra_titles [$ cat_ID]; ?> 

Hooking vào phân loại tùy chỉnh

 add_action ('TAXONOMYNAME_edit_form_fields', 'taxonomy_meta_form_fields'); add_action ('edited_TAXONOMYNAME', 'taxonomy_meta_form'); 

Để thực hiện hành động tương tự này, nhưng đối với các nguyên tắc phân loại tùy chỉnh, đó là một vấn đề đơn giản về việc thay đổi móc hành động. Chỉ cần thay thế TAXONOMYNAME ở trên bằng slug được liên kết với phân loại tùy chỉnh của bạn.

Hiển thị thông tin

Để lấy thông tin được lưu trữ cho chúng tôi trên giao diện người dùng, tôi khuyên bạn nên tạo một hàm đơn giản để lưu trữ trong tệp functions.php của chủ đề của bạn:

 function tj_extra_title ($ id) {$ extra_titles = get_option ('extra_taxonomy_titles'); $ extra_titles = unserialize ($ extra_titles); $ extra_title = $ extra_titles [$ id]; return $ extra_title; } 

Sau đó, nó có thể được gọi từ một trang mẫu như sau:

 $ extra_title = tj_extra_title ($ category-> term_id); // thay thế id bằng bất kỳ biến nào thích hợp cho ngữ cảnh của bạn echo $ extra_title; 

Xem mã trên github. Đặt câu hỏi bên dưới.

Xem Thêm