Wordpress sắp xếp bài viết theo trường tùy chỉnh

Nếu bạn đang tìm cách lọc các bài đăng WordPress của mình bằng cách sử dụng WP_Query[] theo một trường meta tùy chỉnh cụ thể trong khi sắp xếp [theo thứ tự] một trường tùy chỉnh khác, thì đây là một cách tiện lợi để thực hiện việc đó, sử dụng lớp meta_query của WordPress

Lọc & Sắp xếp

Sử dụng meta_query, chúng tôi có thể lọc các bài đăng xuống chỉ những bài đáp ứng các tiêu chí chúng tôi đặt trong trường tùy chỉnh trong khi vẫn cho phép các bài đăng tự sắp xếp theo bất kỳ thứ gì mà WordPress hỗ trợ hoặc theo một trường tùy chỉnh khác mà chúng tôi chọn

Giải pháp của chúng tôi

Trong ví dụ bên dưới, trường meta mà chúng tôi muốn lọc các bài đăng của mình bằng cách sử dụng so sánh trong meta_query của chúng tôi, là. filter_meta_field. Các bài đăng phải khớp với giá trị được cung cấp trongfilter_value trên trườngfilter_meta_field toán tử so sánh của chúng tôi, trong trường hợp của chúng tôi là. = [bằng]

Trường meta mà chúng tôi muốn sắp xếp các bài đăng của mình trong ví dụ này là. sort_meta_field, sử dụng meta_value_num [giả sử giá trị trường là một số] và sắp xếp Tăng dần [thấp đến cao]

Bạn có thể đã làm việc trên một chủ đề Wordpress, nhưng bạn có thể phải tạo một 'trường tùy chỉnh', một trường bổ sung chứa thông tin liên quan đến một bài viết, danh mục, thẻ hoặc bất kỳ thực thể Wordpress nào khác. Bạn có thể tạo các loại trường tùy chỉnh khác nhau và trường bạn sẽ xem hôm nay là Ngày, được liên kết với một bài báo

Và trên hết là cách sử dụng nó để sắp xếp bài viết của chúng tôi

Trường ngày tùy chỉnh

Trường tùy chỉnh là siêu dữ liệu liên quan đến bài viết, trang, v.v. Bạn có thể thêm bao nhiêu siêu dữ liệu tùy thích và những siêu dữ liệu này có thể chứa rất nhiều loại thông tin. Một chuỗi ký tự, một con số, ngày tháng, thời gian…

Bạn có thể xem các trường tùy chỉnh của một bài viết bằng cách cuộn xuống menu “Tùy chọn màn hình” ở trên cùng, sau đó chọn “Trường tùy chỉnh”. Giờ đây, bạn có thể xem ở cuối bài viết tất cả siêu dữ liệu của bài viết và bạn cũng có thể thêm siêu dữ liệu

Tùy chọn màn hình

Để đơn giản hóa bài viết, tôi đã sử dụng plugin Advanced Custom Fields PRO PRO [Phiên bản không PRO cũng tốt cho trường hợp của chúng tôi]. Plugin này cho phép bạn nhanh chóng tạo các trường cho từng bài viết mà không cần phải thêm khóa siêu dữ liệu vào mỗi bài viết mới

Trường hợp sử dụng — Tạo chủ đề

Đây là tình hình. Bạn quản lý việc tạo một trang Wordpress cho một tổ chức X. X sẽ thường xuyên đăng các bài viết về các sự kiện Meetup mà nhân viên tổ chức. Tất cả các sự kiện này đều có ngày diễn ra. Do đó, mục tiêu là có một trang Blog sẽ liệt kê tất cả các bài báo và sắp xếp chúng không phải theo ngày viết các bài báo này mà theo ngày diễn ra sự kiện mà mỗi bài viết tương ứng.

Để làm được điều đó, chúng ta phải bắt đầu từ một chủ đề mới, bởi vì nó sẽ yêu cầu viết một số mã PHP. Tôi sẽ không đi sâu vào việc tạo ra một chủ đề, có đủ tài liệu về chủ đề này

WP_QUERY để thực hiện truy vấn

Nếu trước đây bạn đã tạo một chủ đề hoặc nếu bạn vừa nhấp vào một trong những liên kết tôi vừa cung cấp cho bạn, thông thường bạn sẽ có một thư mục chủ đề với tệp functions.php ở thư mục gốc. Tệp này có thể chứa toàn bộ các hành động cần lưu trước khi tải trang wordpress, thêm CSS hoặc JavaScript để tải vào trang web của bạn hoặc, trong trường hợp của chúng tôi, sửa đổi yêu cầu đối với nội dung của cơ sở dữ liệu trên trang web của chúng tôi

Wordpress có một đối tượng rất mạnh xử lý tất cả các truy vấn, được gọi là WP_QUERY. Bằng cách sửa đổi trực tiếp đối tượng này, bạn sẽ có thể sửa đổi cách Wordpress yêu cầu truy xuất bài viết của bạn

Bạn có những bài báo của mình, chúng rất đẹp, được viết tốt và khiến bạn muốn đến những sự kiện này. Bạn thậm chí đã dành thời gian để thêm một trường tùy chỉnh chứa ngày diễn ra sự kiện của bạn cho mỗi bài viết. Trường này có khóa. ”ngày_sự kiện”. Bây giờ chúng tôi sẽ thêm một hành động sẽ được thực hiện ngay trước khi truy xuất các mục

add_action[ 'pre_get_posts', 'get_post_by_event' ]; function get_post_by_event[ $query ] { if[ $query->is_main_query[] && !is_admin[] && is_home[] ] { $query->set[ 'meta_key', 'date_event' ]; $query->set[ 'orderby', 'meta_value' ]; $query->set[ 'order', 'ASC' ]; } }

Hãy từng bước xem mã này làm gì

  1. Trước hết, chúng tôi ghi lại hành động, được gọi là pre_get_posts và chúng tôi yêu cầu nó khởi chạy get_post_by_event vào đúng thời điểm
  2. Hàm get_post_by_event nhận tham số $query là một thể hiện của lớp WP_QUERY. Tham số này sẽ được sử dụng để sắp xếp các bài viết
  3. Điều kiện này cho phép xác minh rằng chúng tôi xử lý đúng yêu cầu, nhưng cũng để kiểm tra xem chúng tôi đang ở trang nào. Các chức năng này là nội bộ của Wordpress
  4. Chúng tôi sử dụng 3 lần phương pháp $query->set để sửa đổi truy vấn. Cái đầu tiên xác định khóa siêu dữ liệu cho truy vấn, ở đây 'date_event'. Lần thứ hai chúng tôi thay đổi thứ tự các bài báo sẽ được trả lại, bởi meta_value, tôi. e. theo giá trị key của từng bài viết

Và cuối cùng, chúng tôi thay đổi thứ tự để chúng tôi có các sự kiện từ gần đây nhất đến xa nhất, nhưng điều này không bắt buộc

WP_QUERY và các hành động

WP_QUERY là một đối tượng khá phức tạp để thành thạo [Tôi không giả vờ thành thạo nó hoàn toàn. ], nhưng một khi bạn đặt tay vào nó, bạn sẽ nhận ra nhiều khả năng mà nó mang lại. Theo hiểu biết tốt nhất của tôi, nó có thể tùy chỉnh như thể bạn có thể viết truy vấn SQL trực tiếp để truy xuất các bài báo

Bằng cách kết hợp đối tượng này với các hành động của Wordpress, các khả năng trở nên rất nhiều và tôi chỉ có thể mời bạn đọc tài liệu về danh sách các hành động có thể có để cung cấp cho bạn ý tưởng

Ban đầu được xuất bản tại ilphrin. com vào ngày 12 tháng 3 năm 2018

Nếu bài viết này làm bạn hứng thú, đừng quên vỗ tay và đăng ký mail của tôi để nhận những bài viết và tin tức mới nhất ngay trên https. //ilphrin. com

Chủ Đề