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 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
Đâ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ấnNế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ì
- 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ạyget_post_by_event
vào đúng thời điểm - 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 - Đ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
- 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ởimeta_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 độngWP_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