Đối số WP_Query: Các trường tùy chỉnh. Chúng tôi sẽ nhận được tất cả các loại tệp đính kèm, ngoại trừ hình ảnh. #8 Sắp xếp theo nhiều metafield

Chọn các bản ghi từ cơ sở dữ liệu dựa trên các tiêu chí được chỉ định. Các hàm get_posts() và query_posts() cũng như tất cả các truy vấn khác liên quan đến việc chọn bài đăng từ bảng wp_posts đều hoạt động trên cơ sở WP_Query.

Ghi chú về bộ lọc

Bạn có thể sử dụng các bộ lọc sau để nhúng trực tiếp vào chính truy vấn SQL.

Quan trọng: nếu tham số được chỉ định thì tất cả các hook này sẽ không hoạt động!

Các bộ lọc được kích hoạt trước khi đặt yêu cầu phân trang:
  • - thay đổi SQL "Ở ĐÂU"
  • post_join - sửa đổi SQL "THAM GIA"
Các bộ lọc được kích hoạt sau khi đặt yêu cầu phân trang:
  • - thay đổi SQL "WHERE" trong quá trình phân trang
  • post_groupby - thay đổi SQL "NHÓM THEO"
  • post_join_paged - sửa đổi SQL "THAM GIA" trong quá trình phân trang
  • post_orderby - thay đổi SQL "ORDER BY"
  • post_distinct - thay đổi SQL "DISTINCTROW"
  • post_limits - thay đổi SQL "LIMIT"
  • post_fields - thay đổi các trường của bảng kết quả
  • post_mime_type (chuỗi/mảng)

    Kiểu ghi âm Mime. Chỉ được sử dụng cho tệp đính kèm - bài đăng có loại "đính kèm".

    Tùy chọn này sẽ chỉ hoạt động khi tùy chọn post_type = attachment và post_status = kế thừa. Những thứ kia. Chỉ các tệp đính kèm mới có thể có loại MIME.

    Chúng tôi sẽ chỉ nhận được hình ảnh thuộc bất kỳ loại nào

    $query = new WP_Query(array("post_mime_type" => "image", "post_type" => "attachment", "post_status" => "inherit",));

    Chúng tôi sẽ chỉ nhận được hình ảnh gif

    $query = new WP_Query(array("post_mime_type" => "image/gif", "post_type" => "attachment", "post_status" => "inherit",));

    Chúng tôi sẽ nhận được tất cả các loại tệp đính kèm, ngoại trừ hình ảnh

    $query = new WP_Query(array("post_mime_type" => array("application","text","video","audio"), "post_type" => "attachment", "post_status" => "inherit", ));

    Tùy chọn Trạng thái

    Truy xuất các bài đăng có trạng thái được chỉ định.

    Trạng thái bài đăng (chuỗi/mảng)

    Trạng thái bài đăng.

    Theo mặc định, xuất bản và nếu người dùng được ủy quyền, riêng tư cũng được thêm vào. Nếu yêu cầu được đưa ra từ phần quản trị viên, các loại trạng thái được bảo vệ cũng được thêm vào: tương lai, bản nháp và đang chờ xử lý. Tất cả các loại trạng thái:

    • xuất bản - bài đăng được xuất bản.
    • đang chờ xử lý - bài đăng đang được kiểm duyệt.
    • dự thảo - dự thảo.
    • tự động soạn thảo - bản nháp được lưu bởi chính WordPress (tự động lưu).
    • tương lai - bài viết theo kế hoạch.
    • bài viết riêng tư - cá nhân.
    • kế thừa - sửa đổi hoặc đính kèm.
    • rác - bài viết đã bị xóa(trong giỏ). Kể từ phiên bản 2.9.
    • bất kỳ - tất cả các trạng thái, ngoại trừ các trạng thái có tham số chỉ định loại trừ_from_search=true. Xem register_post_status() và get_post_stati() .

    Mặc định: "xuất bản"

    Bài viết theo trạng thái

    Chúng tôi sẽ chỉ nhận được bản nháp:

    $query = new WP_Query("post_status=draft");

    Chúng tôi sẽ nhận được bài viết từ trạng thái khác nhau:

    $query = new WP_Query(array("post_status" => array("đang chờ xử lý", "bản nháp", "tương lai")));

    Chúng tôi sẽ nhận được tất cả các loại đầu tư:

    $query = new WP_Query(array("post_status" => "any", "post_type" => "attachment"));

    Tùy chọn Ngày (lần)

    Hiển thị bài viết thuộc về Thời kỳ nhất định thời gian.

    Năm (con số) 4 chữ số của năm (2013) thángnum (con số) Số tháng (1 - 12) w (con số) Ngày trong tuần trong năm (từ 0 đến 53) (con số) Ngày trong tháng (1 - 31) giờ (con số) Giờ (0 - 23) phút (con số) Phút (0 - 60) giây (con số) Giây (0 - 60) m (con số) NămTháng (201306) date_query (mảng)

    Các tham số mà yêu cầu sẽ được cấu hình. Nó hoạt động dựa trên một lớp riêng biệt: WP_Date_Query.

    Tham số này được chỉ định dưới dạng một mảng, có thể chứa các mảng lồng nhau. Các tham số: cột, so sánh, quan hệ cho mảng chính hoạt động như các tham số mặc định cho các mảng lồng nhau (nếu có).

      cột - trường trong cơ sở dữ liệu cho truy vấn. Có lẽ:
      Ngay gưỉ
      post_date_gmt
      post_modified
      post_modified_gmt
      bình luận_ngày
      bình luận_ngày_gmt
      user_registered
      Mặc định: "post_date"

      so sánh - Toán tử so sánh cho tất cả các mảng lồng nhau theo mặc định. Có thể: Có thể: = , != , > , >= ,< , <= , IN , NOT IN , BETWEEN , NOT BETWEEN .
      Mặc định: "="

      quan hệ - toán tử nếu một số mảng có ngày được chỉ định:
      VÀ (xem xét đồng thời tất cả các mảng được chỉ định).
      HOẶC (nếu có kết quả khớp với ít nhất một mảng được chỉ định).
      Mặc định - HOẶC

      Các tùy chọn bên dưới nên được sử dụng trong các mảng lồng nhau. Họ xác định một truy vấn cho một ngày duy nhất.

      Ngoài ra tất cả các tham số bên dưới có thể được sử dụng trong mảng chính.

      • trước (chuỗi/mảng)- Ngày hồ sơ “cho đến” sẽ được nhận. Lấy một chuỗi mà hàm strtotime() sẽ hiểu: tất cả các định dạng có thể. Hoặc bạn có thể truyền một mảng với các chỉ mục: năm , tháng , ngày: array("year"=>"2015", "month"=>"5", "day"=>"28")

        sau đó (chuỗi/mảng)- Ngày nhận hồ sơ “sau”. Lấy một chuỗi mà hàm strtotime() sẽ hiểu: tất cả các định dạng có thể. Hoặc bạn có thể truyền một mảng với các chỉ mục: năm , tháng , ngày: array("year" => "2015", "month" => "5", "day" => "28")
        Liên quan đến thời gian hiện tại của trang web (không phải UTC).

        cột (đường kẻ)- xem ở trên, chỉ cho một ngày cụ thể. Mặc định: giá trị mảng trên cùng.

        so sánh (đường kẻ)- xem ở trên, chỉ cho một ngày cụ thể. Mặc định là "=".

        bao gồm (hợp lý)- đối số trước và sau được xử lý toàn diện nếu đúng. Mặc định: sai.

      • năm (số/mảng)- năm, ví dụ 2013
      • ngày trong năm (số/mảng)- số ngày trong năm, 1-366.
      • tháng (số/mảng)- tháng, 1-12
      • tuần (số/mảng)- tuần, 0-53
      • ngày (số/mảng)- ngày, 1-31
      • ngày trong tuần (số/mảng)- ngày trong tuần, 1-7, trong đó 1 là Chủ Nhật
      • ngày trong tuần_iso (số/mảng)- ngày trong tuần, 1-7, trong đó 1 là thứ Hai
      • giờ (số/mảng)- giờ, 0-23
      • phút (số/mảng)- phút, 0-60
      • thứ hai (số/mảng)- giây, 0-60

      Trong các tham số: năm , tháng , tuần , dayofyear , day , dayofweek , dayofweek_iso , giờ , phút , giây bạn có thể chỉ định một số giá trị, dưới dạng mảng, nếu tham số so sánh khớp.

    #1. Hãy lấy bài viết ngày hôm nay:

    $hôm nay = getdate(); $query = new WP_Query("year=" . $today["year"] . "&monthnum=" . $today["mon"] . "&day=" . $today["mday"]);

    #2. Hãy lấy bài viết của tuần trước:

    $ tuần = ngày("W"); $năm = ngày("Y"); $query = new WP_Query("year=" . $year . "&w=" . $week);

    #3. Hãy nhận bài viết cho ngày 20 tháng 12:

    $query = new WP_Query("monthnum=12&day=20");

    #4. Hãy lấy bài viết trong khoảng thời gian từ ngày 1 tháng 3 đến ngày 15 tháng 3 năm 2010:

    // Tạo nên tính năng mới sẽ thêm điều kiện Where vào hàm truy vấn filter_where($where = "") ( // từ ngày 1 tháng 3 đến ngày 15 tháng 3 năm 2010 $where .= " AND post_date >= "2010-03-01" AND post_date< "2010-03-16""; return $where; } add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); remove_filter("posts_where", "filter_where");

    Các truy vấn trên trả về các bài đăng trong một khoảng thời gian nhất định trong lịch sử: "Bài đăng trong X tháng, X ngày". Họ không thể nhận bài viết trong một khoảng thời gian tùy ý so với hiện tại. Do đó, các truy vấn như “Bài đăng trong 30 ngày qua” hoặc “Bài đăng cho Năm ngoái"không thể ở phiên bản cơ bản, đối với những truy vấn như vậy, bạn cần sử dụng bộ lọc "posts_where". Các ví dụ dưới đây cho thấy cách thực hiện việc này.

    #5. Hãy nhận các bài đăng trong 30 ngày qua:

    // Tạo một hàm mới sẽ thêm điều kiện Where vào hàm truy vấn filter_where($where = "") ( // trong 30 ngày qua $where .= " AND post_date > "" . date("Y-m-d", strtotime ("-30 ngày")) . """; return $where; ) add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); Remove_filter("posts_where", "filter_where");

    #6. Chúng tôi sẽ nhận các bài viết trong khoảng thời gian từ 30 đến 60 ngày trước thời điểm hiện tại:

    // Tạo một hàm mới sẽ thêm điều kiện Where vào hàm truy vấn filter_where($where = "") ( // từ 30 đến 60 ngày $where .= " AND post_date >= "" . date("Y-m-d", strtotime("- 60 ngày")) . """ . " VÀ post_date<= "" . date("Y-m-d", strtotime("-30 days")) . """; return $where; } add_filter("posts_where", "filter_where"); $query = new WP_Query($query_string); remove_filter("posts_where", "filter_where");

    Tham số "m" chỉ có thể được đặt trong danh sách bài viết trong bảng quản trị. Nó rất hữu ích khi bạn chọn từ danh sách thả xuống chọn lọc trong đó ngày được đặt thành YYYYmm.

    Ví dụ với tham số date_query

    #1. Chúng tôi nhận được bài viết từ 9 đến 17 giờ:

    $args = array("date_query" => array(array("hour" => 9, "so sánh" => ">=",), array("hour" => 17, "so sánh" => "<=",), array("dayofweek" =>mảng(2, 6), "so sánh" => " GIỮA",), "posts_per_page" =>

    #2. Chúng tôi sẽ nhận bài viết trong khoảng thời gian: từ ngày 1 tháng 1 đến ngày 28 tháng 2:

    Ngày có thể được chỉ định dưới dạng số hoặc chuỗi vì các đối số trước và sau được xử lý bởi hàm strtotime() của PHP, hàm này hiểu được chuỗi.

    $args = array("date_query" => array(array("after" => "Ngày 1 tháng 1 năm 2013", "trước" => array("năm" => 2013, "tháng" => 2, "ngày" => 28,), "bao gồm" => true,), "posts_per_page" => -1,); $query = WP_Query mới($args);

    #3. Hãy lấy các bài đăng được xuất bản một năm trước nhưng đã thay đổi vào tháng trước:

    $args = array("date_query" => array(array("column" => "post_date_gmt", "Before" => "1 năm trước",), array("column" => "post_modified_gmt", "after" => "1 tháng trước",),), "posts_per_page" => -1,); $query = WP_Query mới($args);

    #4. Hãy lấy các bài đăng trong 2 tuần qua bằng chuỗi "2 tuần trước":

    $query = new WP_Query(array("date_query" => array("after" => "2 tuần trước",),));

    #5. Hãy lấy các mục trong 2 tháng qua, được xuất bản vào các ngày trong tuần:

    $query = new WP_Query(array("date_query" => array("after" => "2 tháng trước", array("dayofweek" => array(1, 5), "so sánh" => "Giữa",) ,),));

    Đối số date_query cũng hoạt động với lớp WP_Comment_Query, vì vậy nó có thể được sử dụng theo cách tương tự trong hàm: get_comments() .

    Tùy chọn Thụt lề

    Bạn có thể đặt thụt lề từ bài đăng đầu tiên trong kết quả truy vấn. Ví dụ: một yêu cầu tiêu chuẩn trả về 6 bài đăng, nhưng nếu bạn thêm tham số offset=1 vào cùng một yêu cầu thì 5 bài đăng sẽ được trả về (bài đăng đầu tiên từ yêu cầu sẽ bị bỏ qua).

    Bù lại (con số) Có bao nhiêu bài viết từ kết quả truy vấn cần bỏ qua.

    Ví dụ sử dụng

    Hãy bỏ qua/một bài đăng đầu tiên (offset=1) và quay lại 5 bài tiếp theo:

    $query = new WP_Query("posts_per_page=5&offset=1");

    Tùy chọn Sắp xếp và đặt hàng

    Sắp xếp và thiết lập hướng sắp xếp.

    Tùy chọn sắp xếp sẽ không hoạt động nếu bạn chỉ định tham số field = ids, vì trong trường hợp này, yêu cầu sẽ không có trường để bạn có thể sắp xếp kết quả.

    Đặt hàng (đường kẻ)

    Hướng sắp xếp theo tham số orderby có thể là:

    • ASC - theo thứ tự từ nhỏ nhất đến lớn nhất (1, 2, 3; a, b, c).
    • DESC - theo thứ tự ngược lại, từ lớn nhất đến nhỏ nhất (3, 2, 1; c, b, a).
    đặt bởi (đường kẻ)

    Các trường mà bạn có thể sắp xếp bài viết. Có lẽ

    • không có - không sắp xếp, hiển thị như trong cơ sở dữ liệu. Tương đương với việc sắp xếp theo ID. Kể từ phiên bản 2.8.
    • ID - sắp xếp theo ID.
    • tác giả - sắp xếp theo ID tác giả.
    • tiêu đề - sắp xếp theo tiêu đề.
    • tên - theo tiêu đề của bài đăng (nhãn, sên bài).
    • ngày - sắp xếp theo ngày xuất bản.
    • đã sửa đổi - sắp xếp theo ngày sửa đổi.
    • loại - theo loại bài đăng (post_type). Từ phiên bản 4.0
    • parent - sắp xếp theo giá trị của trường cha.
    • Rand - thứ tự ngẫu nhiên.
    • RAND(x) - thứ tự ngẫu nhiên cho các giá trị số. Ở đây "x" là một số nguyên.
    • comment_count - sắp xếp theo số lượng bình luận. Kể từ phiên bản 2.9.
    • mức độ liên quan - theo điều kiện tìm kiếm (tham số s). Việc sắp xếp diễn ra theo thứ tự sau: 1) liệu toàn bộ câu có khớp hay không. 2) tất cả các thuật ngữ tìm kiếm trong tiêu đề bài viết. 3) bất kỳ từ nào trong truy vấn tìm kiếm trong tiêu đề bài viết. 4) câu hoàn chỉnh được tìm thấy trong nội dung bài viết.
    • menu_order - được sử dụng tiêu chuẩn cho các trang và tệp đính kèm. Số sê-ri được chỉ định trên trang chỉnh sửa bài đăng.
    • meta_value - theo giá trị của trường tùy chỉnh.

      Quan trọng: tham số meta_key cũng phải được xác định. Lưu ý: việc sắp xếp sẽ theo thứ tự bảng chữ cái và sẽ không logic nếu giá trị của các trường tùy ý là số (ví dụ: sẽ là 1, 3, 34, 4, 56, 6, v.v. chứ không phải 1, 3, 4, 6, 34, 56).

    • meta_value_num - sắp xếp theo các trường tùy chỉnh có giá trị là số. Kể từ phiên bản 2.8.
    • khóa mảng từ meta_query - trong trường hợp này, việc sắp xếp sẽ theo giá trị của trường tùy chỉnh được chỉ định trong mảng meta_query.
    • post__in - tính đến thứ tự của các ID được chỉ định trong tham số post__in. Tham số thứ tự bị bỏ qua.
    • post_name__in - tính đến thứ tự của các tên được chỉ định trong tham số post_name__in. Tham số thứ tự bị bỏ qua.
    • post_parent__in - tính đến thứ tự của các ID được chỉ định trong tham số post_parent__in. Tham số thứ tự bị bỏ qua.
    thứ tự = mảng()

    Kể từ WordPress 4.0, bạn có thể chỉ định một mảng orderby kết hợp cả hai tham số: orderby và order . Việc này được thực hiện để sắp xếp theo nhiều cột cùng lúc, cú pháp như sau:

    "orderby" => mảng("title" => "DESC", "menu_order" => "ASC")

    #1 Sắp xếp theo tiêu đề

    $query = new WP_Query(array("orderby" => "title", "order" => "DESC"));

    Sắp xếp theo thứ tự menu và sau đó theo tiêu đề

    $query = new WP_Query(array("orderby" => "menu_order title", "order" => "DESC"));

    #2 Hãy hiển thị một bài đăng ngẫu nhiên:

    $query = new WP_Query(array("orderby" => "Rand", "posts_per_page" => "1"));

    #3 Hãy sắp xếp bài viết theo số lượng bình luận:

    $query = new WP_Query(array("orderby" => "comment_count"));

    #4 Sắp xếp sản phẩm theo giá (giá trường tùy chỉnh):

    $query = new WP_Query(array("post_type" => "product", "orderby" => "meta_value", "meta_key" => "price"));

    #5 Sắp xếp nhiều lần

    Hãy hiển thị các bài đăng được sắp xếp theo hai trường: "title" và "menu_order" (tiêu đề là chính):

    $query = new WP_Query(array("post_type" => "page", "orderby" => "title menu_order", "order" => "ASC"));

    #6 Sắp xếp nhiều lần bằng cách sử dụng một mảng (từ phiên bản 4.0)

    Hãy sắp xếp các trang theo tiêu đề và số menu (menu_order) theo thứ tự khác nhau (ASC/DESC):

    $query = new WP_Query(array("orderby" => array("title" => "DESC", "menu_order" => "ASC")));

    #7 Sắp xếp theo “meta_value” cho loại bài đăng mới (post_type)

    Hãy hiển thị các bài đăng thuộc loại "my_custom_post_type" được sắp xếp theo khóa trường tùy chỉnh "age" và được lọc để chỉ những bài đăng có giá trị trường 3 và 4 mới được hiển thị:

    $args = array("post_type" => "my_custom_post_type", "meta_key" => "age", "orderby" => "meta_value_num", "order" => "ASC", "meta_query" => array(array( "key" => "tuổi", "giá trị" => mảng(3, 4), "so sánh" => "IN",))); $query = WP_Query mới($args);

    #8 Sắp xếp theo nhiều metafield

    Để sắp xếp kết quả theo hai siêu trường khác nhau, chẳng hạn như theo thành phố và sau đó theo tiểu bang, bạn cần chỉ định các khóa cho các mảng trong mảng meta_query và sau đó sử dụng các khóa đó trong tham số orderby:

    $query = new WP_Query([ "meta_query" => [ "relation" => "AND", "state_clause" => [ "key" => "state", "value" => "Wisconsin", ], "city_clause " => [ "key" => "thành phố", "so sánh" => "Tồn tại", ], ], "orderby" => [ "city_clause" => "ASC", "state_clause" => "DESC", ], ]);

    Tùy chọn Phân trang

    không phân trang (hợp lý) Vô hiệu hóa phân trang và hiển thị tất cả các bài viết trên một trang. bài đăng_per_page (con số)

    Số lượng bài viết trên một trang. Nếu bạn đặt -1 thì tất cả các bài viết sẽ được hiển thị (không phân trang).

    Kể từ phiên bản 2.1, nó thay thế tham số showposts. Đặt tùy chọn phân trang nếu phân trang không hoạt động sau khi sử dụng tùy chọn này.

    Lưu ý: nếu yêu cầu nằm trong phần nguồn cấp dữ liệu, WP sẽ ghi đè tham số này bằng tùy chọn post_per_rss. Để tác động đến việc hiển thị các bài đăng trong nguồn cấp dữ liệu, hãy sử dụng bộ lọc post_limits hoặc pre_option_posts_per_rss.

    Bài_per_archive_page (con số) Số lượng bài viết cho các trang lưu trữ: cho các trang thỏa mãn điều kiện is_archive() hoặc is_search(). Tùy chọn này ghi đè tùy chọn "posts_per_page" và "showposts". bù lại (con số) Có bao nhiêu bài đăng cần bỏ qua từ đầu vùng chọn (thụt lề trên cùng).
    Chú ý: Việc đặt tùy chọn này sẽ ghi đè/bỏ qua tùy chọn "phân trang" và ngắt phân trang (giải quyết vấn đề). phân trang (con số) Số trang phân trang. Hiển thị các bài đăng thường được hiển thị trên trang phân trang X. Ghi đè tham số trang post_per_page (con số) Số cho trang chủ tĩnh. Hiển thị các bài đăng thường được hiển thị trên trang phân trang X của trang tĩnh chính (trang trước). bỏ qua_sticky_posts (hợp lý)

    Bỏ qua bài viết dính hay không (đúng/sai). Từ phiên bản 3.1. Thay thế tham số caller_get_posts.

    Các bài viết dính sẽ không xuất hiện ở đầu danh sách nhưng không bị loại trừ và sẽ xuất hiện theo thứ tự bình thường.

    #1 Bài viết trên mỗi trang

    Chúng tôi nhận được 3 bài viết:

    $query = new WP_Query("posts_per_page=3");

    Hãy lấy tất cả các bài viết:

    $query = new WP_Query("posts_per_page=-1");

    Hãy lấy tất cả các bài viết và vô hiệu hóa phân trang:

    $query = new WP_Query("nopaging=true");

    #2 Phần đệm trên cùng

    Hãy nhận các bài đăng bắt đầu từ bài thứ tư (chúng ta sẽ bỏ qua 3 bài đầu tiên):

    $query = new WP_Query("offset=3"));

    Chúng tôi nhận được 5 bài viết theo sau ba bài viết đầu tiên:

    $query = new WP_Query(array("posts_per_page" => 5, "offset" => 3));

    #3 Bài viết từ phân trang trang 6

    $query = new WP_Query("paged=6");

    #4 Bài viết từ trang hiện tại

    Hãy lấy bài viết từ trang phân trang hiện tại. Hữu ích khi xây dựng phân trang tùy chỉnh:

    $query = new WP_Query([ "paged" => get_query_var("paged") ]);

    Hãy lấy các bài đăng từ trang hiện tại và đặt tham số paged thành 1 khi biến không được xác định trên trang phân trang đầu tiên:

    $paged = get_query_var("phân trang") ? get_query_var("phân trang") : 1; $query = new WP_Query([ "paged" => $paged ]);

    Sử dụng get_query_var("page") nếu bạn cần lấy số trang phân trang của trang đầu tĩnh của trang web - is_front_page() . Biến trang trong trường hợp này chứa số phân trang trên các trang loại bài đăng khi nội dung sử dụng thẻ phân trang .

    Xuất trang phân trang hiện tại trên trang chính tĩnh:

    $paged = get_query_var("trang") ?: 1; $query = new WP_Query([ "paged" => $paged ]);

    #5 Các mục dính (bài viết)

    # Tất cả các bài viết dính
    $sticky = get_option("sticky_posts"); $query = new WP_Query([ "post__in" => $sticky ]);
    # Chỉ có bài dính đầu tiên
    $sticky = get_option("sticky_posts"); $query = new WP_Query("p=" . $sticky);
    # Bài dính đầu tiên, nếu không có bài nào như vậy thì đăng bài cuối cùng
    $args = array("posts_per_page" => 1, "post__in" => get_option("sticky_posts"), "ignore_sticky_posts" => 1); $query = WP_Query mới($args);
    # Bài dính đầu tiên, nếu không có bài đó thì chúng tôi không hiển thị gì cả
    $sticky = get_option("sticky_posts"); if (! trống($sticky)) ( $query = new WP_Query(array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" => 1)); // tạo đầu ra... )
    #5 bài viết dính mới nhất
    $sticky = get_option("sticky_posts"); // tất cả các mục dính rsort($sticky); // sắp xếp - những cái mới ở đầu $sticky = array_slice($sticky, 0, 5); // lấy 5 $query = new WP_Query([ "post__in"=>$sticky, "ignore_sticky_posts"=>1 ]);

    #6 Ẩn bài viết dính

    Hãy loại trừ tất cả các bài đăng hấp dẫn khỏi truy vấn:

    $query = new WP_Query([ "post__not_in" => get_option("sticky_posts") ]);

    Hãy loại trừ các bài viết hấp dẫn khỏi danh mục. Nó sẽ trả về tất cả các bài viết trong chuyên mục, tuy nhiên các bài viết dính sẽ không lên trên mà sẽ hiển thị dưới dạng bài viết thông thường (theo ngày):

    $query = new WP_Query([ "ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6 ]);

    Hãy loại trừ các bài viết hấp dẫn khỏi danh mục. Sẽ trả lại tất cả các bài đăng trong danh mục, nhưng các bài đăng hấp dẫn sẽ bị loại trừ hoàn toàn. Chúng ta cũng hãy thêm một quy tắc ở đây để phân trang chính xác:

    $paged = get_query_var("phân trang") ?: 1; $sticky = get_option("sticky_posts"); $query = new WP_Query(array("cat" => 3, "ignore_sticky_posts" => 1, "post__not_in" => $sticky, "paged" => $paged));

    Tùy chọn Bình luận

    Dữ liệu bình luận bài đăng sẽ được thêm vào đối tượng WP_Query nếu đó là một bài đăng riêng biệt. Các tham số bên dưới cho biết cách nhận nhận xét trong những trường hợp như vậy.

    Bình luận_trạng thái (đường kẻ) Trạng thái bình luận. ping_status (con số) Trạng thái Ping. bình luận_per_page (con số) Số lượng bình luận nhận được trên một trang bình luận cá nhân. Tùy chọn mặc định: comments_per_page . đếm Bình luận (số/mảng)

    Số lượng bình luận một bài viết nên có. Từ phiên bản 4.9.

    • Nếu bạn chỉ định một số, nó sẽ nhận được các bài đăng có số lượng bình luận được chỉ định (toán tử tìm kiếm =).
    • Mảng cho phép bạn chỉ định một tùy chọn để so sánh số lượng bình luận. Bạn có thể chỉ định các tham số trong mảng:
      • giá trị (con số)- số lượng ý kiến ​​​​để so sánh.
      • so sánh (đường kẻ)- cách so sánh số lượng bình luận. Có thể: = , != , > , >= ,< , <= . По умолчанию: = .

    Tùy chọn Tìm kiếm

    S (đường kẻ) Cụm từ tìm kiếm. chính xác (hợp lý)đúng - tìm kiếm bằng cụm từ chính xác được chỉ định trong tham số s - không thêm % vào cuối cụm từ tìm kiếm trong truy vấn SQL.
    Mặc định: sai câu (đúng sai)đúng - tìm kiếm bằng cách sử dụng cụm từ tìm kiếm đầy đủ, đúng như vậy.
    sai - cụm từ tìm kiếm được chia thành các từ và việc tìm kiếm được thực hiện theo các từ trong cụm từ tìm kiếm.
    Mặc định: sai

    Bài viết được tìm thấy bằng cụm từ tìm kiếm:

    $query = new WP_Query("s=keyword");

    Tùy chọn Trả về các trường

    Đặt dữ liệu nào yêu cầu sẽ trả về.

    Lĩnh vực (chuỗi/mảng)

    Dữ liệu nào cần trả về. Theo mặc định, tất cả đều được trả về.

    • ids - sẽ trả về một mảng có ID bài đăng.
    • id=>parent - sẽ trả về một mảng kết hợp [ parent => ID, … ].
    • Việc chèn bất kỳ tham số nào khác sẽ trả về tất cả các trường (theo mặc định) - một mảng các đối tượng bài đăng.
    no_found_rows (hợp lý)đúng - không đếm số dòng được tìm thấy. Trong một số trường hợp, nó có thể tăng tốc yêu cầu.
    Mặc định: sai

    Tùy chọn Bộ nhớ đệm

    Không thêm dữ liệu vào bộ đệm khi thực hiện truy vấn.

    Cache_results (đúng sai) Có lưu thông tin bài viết vào bộ nhớ đệm hay không.
    Mặc định: đúng update_post_meta_cache (đúng sai) Có lưu trữ thông tin về dữ liệu meta bài viết hay không.
    Mặc định: đúng update_post_term_cache (đúng sai) Có lưu thông tin vào bộ nhớ đệm về việc liên kết bài đăng với các điều khoản và phân loại hay không.
    Mặc định: đúng lười_load_term_meta (đúng sai) Có tải từng phần siêu dữ liệu thuật ngữ hay không.
    sai - sẽ vô hiệu hóa việc lười tải siêu dữ liệu thuật ngữ và mỗi lệnh gọi tới get_term_meta() sẽ truy cập cơ sở dữ liệu.
    Mặc định: giá trị $update_post_term_cache

    #1 Chúng tôi sẽ hiển thị 50 bài đăng, nhưng sẽ không thêm thông tin về bài đăng vào bộ đệm:

    $query = new WP_Query(array("posts_per_page" => 50, "cache_results" => false));

    #2 Chúng tôi sẽ hiển thị 50 bài đăng, nhưng sẽ không thêm dữ liệu meta bài đăng vào bộ đệm

    $query = new WP_Query(array("posts_per_page" => 50, "update_post_meta_cache" => false));

    #3 Chúng tôi sẽ hiển thị 50 bài đăng, nhưng sẽ không thêm thông tin về các điều khoản của bài đăng vào bộ đệm

    $query = new WP_Query(array("posts_per_page" => 50, "update_post_term_cache" => false));

    Thông thường bạn không cần sử dụng các chức năng này - bộ đệm là cần thiết! Tuy nhiên, cách tiếp cận này có thể hữu ích trong một số trường hợp. Ví dụ: nếu chúng ta cần lấy danh sách tiêu đề bài đăng và không cần bất kỳ thông tin nào khác về bài đăng: không phải phân loại cũng như dữ liệu meta. Bằng cách không tải thông tin này, chúng tôi có thể tiết kiệm thời gian cho các truy vấn SQL không cần thiết.

    Lưu ý: Nếu plugin bộ nhớ đệm liên tục được sử dụng, tất cả các cờ này được đặt thành sai theo mặc định vì không cần phải làm mới bộ nhớ đệm mỗi khi trang được tải.

    Tùy chọn Bộ lọc (móc)

    ngăn chặn_filters (đúng sai)

    Nếu một số bộ lọc (móc) trong lớp WP_Query bị tắt. Việc bật tham số này sẽ vô hiệu hóa tất cả các bộ lọc sửa đổi truy vấn SQL như post_* hoặc comment_feed_* .

    đúng - vô hiệu hóa việc xử lý các hook sau:

    Bài viết_tìm kiếm bài đăng_search_orderby bài viết_where bài viết_tham gia bài đăng_where_paged bài viết_nhóm theo bài đăng_tham gia bài đăng_orderby bài viết_bài viết riêng biệt_limits bài viết_fields bài viết_clauses bài viết_where_request bài viết_groupby_request bài viết_join_request bài đăng_orderby_request bài đăng_distinct_request bài viết_fields_request post_limits_request bài viết_clauses_request bài viết_request bài viết_kết quả của_bài viết bình luận_ Feed_join comment_feed_where comment_feed_groupby comment_feed_orderby comment_feed_limits init() Kích hoạt một đối tượng, đặt tất cả các giá trị thuộc tính thành null, 0 hoặc false. Parse_query($query) Nhận các tham số truy vấn, phân tích chúng và đặt các thuộc tính cơ bản của lớp: $posts , $post_count , $post và $current_post . Parse_query_vars() Phân tích lại truy vấn cũ. get($query_var) Truy xuất một biến truy vấn theo tên. set($query_var, $value) Đặt biến truy vấn. Cho biết: tên của biến và giá trị của nó. &get_posts() Truy xuất các bài đăng cần thiết từ cơ sở dữ liệu. Đồng thời điền vào các thuộc tính $posts và $post_count. next_post() Được sử dụng trong vòng lặp. Di chuyển tới bài đăng tiếp theo trong mảng $posts. Đặt $current_post và $post . Phương thức này không đặt biến $post toàn cục nhưng ảnh hưởng đến một biến trong lớp. Trả về dữ liệu bài viết hiện tại (đối tượng). the_post() Được sử dụng trong vòng lặp. Chuyển đến bài đăng tiếp theo và thay đổi biến toàn cục $post . has_posts() Được sử dụng ngay trước vòng lặp. Kiểm tra xem có bài viết để hiển thị hay không. rewind_posts() Đặt lại các biến $current_post và $post. &query($query) Gọi các phương thức: pars_query() và get_posts() . Trả về kết quả của get_posts() . get_queried_object() Điền vào biến $queried_object nếu nó chưa được điền và trả về. get_queried_object_id() Điền vào biến $queried_object_id nếu nó chưa được điền và trả về nó. __construct($query = "") Hàm tạo của lớp. Nếu dữ liệu truy vấn được truyền, hãy gọi phương thức query() và chuyển dữ liệu tới nó.

init() Khởi tạo đối tượng, đặt tất cả các thuộc tính thành null, 0 hoặc sai. Parse_query($query) Lấy một chuỗi truy vấn xác định yêu cầu, phân tích nó và điền vào tất cả các thuộc tính ngoài $posts , $post_count , $post và $current_post . Parse_query_vars() Phân tích lại chuỗi truy vấn cũ. get($query_var) Nhận một biến truy vấn được đặt tên. set($query_var, $value) Đặt biến truy vấn được đặt tên thành một giá trị cụ thể. &get_posts() Tìm nạp và trả về các bài đăng được yêu cầu từ cơ sở dữ liệu. Đồng thời điền $posts và $post_count . Ghi chú:Điều này được gọi trong quá trình xây dựng nếu WP_Query được xây dựng bằng các đối số. Nó là không bình thường và không được gọi nhiều lần trên cùng một đối tượng truy vấn. Làm như vậy có thể dẫn đến một truy vấn bị hỏng. next_post() (được sử dụng khi ở ) Chuyển sang bài đăng tiếp theo trong $posts . Tăng $current_post và đặt $post thành đối tượng bài đăng hiện tại (mới) (lưu ý: điều này không đặt biến $post toàn cục, chỉ đặt biến đối tượng của đối tượng WP_Query.) Trả về đối tượng bài đăng hiện tại (Tính năng này không được dùng nữa, vui lòng sử dụng "next_post_link()") the_post() (được sử dụng khi ở ) Chuyển sang bài đăng tiếp theo và đặt biến $post toàn cục. has_posts() (được sử dụng khi ở trong , hoặc ngay trước Vòng lặp) Xác định xem chúng tôi có còn bài đăng nào được hiển thị hay không. Gọi rewind_posts() và trả về false nếu không còn bài đăng nào. Vì tua lại, bạn không thể dựa vào has_posts() còn sai. Nhìn thấy. rewind_posts() Đặt lại $current_post và $post . &query($query) Gọi Parse_query() và get_posts() . Trả về kết quả của get_posts() . get_queried_object() Đặt $queried_object nếu nó chưa được đặt và trả lại. get_queried_object_id() Đặt $queried_object_id nếu nó chưa được đặt và trả lại. WP_Query($query = "") (hàm tạo) Nếu bạn cung cấp một chuỗi truy vấn, hãy gọi query() với chuỗi đó.

Thông số

Thông số tác giả

Hiển thị các bài viết liên quan đến tác giả nhất định.

  • tác giả (int | sợi dây) - sử dụng id tác giả hoặc danh sách ID được phân tách bằng dấu phẩy.
  • tên tác giả (sợi dây) - sử dụng " user_nicename " - KHÔNG phải tên.
  • tác giả__in (mảng
  • tác giả__not_in (mảng) - sử dụng id tác giả (có sẵn từ ).

Hiển thị bài viết của một tác giả

Hiển thị bài viết theo tác giả, sử dụng id tác giả:

$query = new WP_Query(array("author" => 123));

Hiển thị bài viết theo tác giả, sử dụng tác giả " user_nicename ":

$query = new WP_Query(array("author_name" => "rami"));

Hiển thị bài viết của một số tác giả

Hiển thị bài viết từ một số tác giả cụ thể:

$query = new WP_Query(array("author" => "2,6,17,38"));

Loại trừ bài viết thuộc về một tác giả

Hiển thị tất cả bài viết ngoại trừ những tác phẩm từ một tác giả (số ít) bằng cách thêm tiền tố id của nó bằng dấu "-" (trừ):

$query = new WP_Query(array("author" => -12));

Xử lý nhiều tác giả

Hiển thị bài viết từ nhiều tác giả:

$query = new WP_Query(array("author__in" => array(2, 6)));

Bạn cũng có thể loại trừ nhiều tác giả theo cách này:

$query = new WP_Query(array("author__not_in" => array(2, 6)));

Thông số danh mục

Hiển thị các bài đăng được liên kết với các danh mục nhất định.

  • con mèo (int) - sử dụng id danh mục.
  • tên danh mục (sợi dây) - sử dụng sên danh mục.
  • danh mục__và (mảng) - sử dụng id danh mục.
  • danh mục__trong (mảng) - sử dụng id danh mục.
  • danh mục__không_trong (mảng) - sử dụng id danh mục.

Hiển thị bài viết cho một danh mục

Hiển thị các bài đăng có danh mục này (và bất kỳ bài đăng con nào thuộc danh mục đó), sử dụng id danh mục:

$query = new WP_Query(array("cat" => 4));

Hiển thị các bài đăng có danh mục này (và bất kỳ bài đăng con nào thuộc danh mục đó), sử dụng slug danh mục:

$query = new WP_Query(array("category_name" => "staff"));

Hiển thị các bài đăng có danh mục này (không phải con của danh mục đó), sử dụng id danh mục:

$query = new WP_Query(array("category__in" => 4));

Hiển thị bài viết từ một số danh mục

Hiển thị các bài đăng có các danh mục này, sử dụng id danh mục:

$query = new WP_Query(array("cat" => "2,6,17,38"));

Hiển thị các bài đăng có các danh mục này, sử dụng slug danh mục:

$query = new WP_Query(array("category_name" => "staff,news"));

Hiển thị các bài đăng có "tất cả" các danh mục sau:

$query = new WP_Query(array("category_name" => "staff+news"));

Loại trừ bài viết thuộc danh mục

Hiển thị tất cả bài viết ngoại trừ những người từ một danh mục bằng cách thêm tiền tố id của nó bằng dấu "-" (trừ).

$query = new WP_Query(array("cat" => "-12,-34,-56"));

Xử lý nhiều danh mục

Hiển thị các bài viết thuộc nhiều danh mục. Điều này hiển thị các bài đăng thuộc cả hai loại 2 và 6:

$query = new WP_Query(array("category__and" => array(2, 6)));

Để hiển thị các bài đăng từ danh mục 2 HOẶC 6, bạn có thể sử dụng cat như đã đề cập ở trên hoặc bằng cách sử dụng danh mục__in (lưu ý rằng điều này không hiển thị các bài đăng từ bất kỳ danh mục con nào thuộc các danh mục này):

$query = new WP_Query(array("category__in" => array(2, 6)));

Bạn cũng có thể loại trừ nhiều danh mục theo cách này:

$query = new WP_Query(array("category__not_in" => array(2, 6)));

Thông số thẻ

Hiển thị các bài đăng được liên kết với các thẻ nhất định.

  • nhãn (sợi dây) - sử dụng sên thẻ.
  • tag_id (int) - sử dụng id thẻ.
  • gắn thẻ__và (mảng) - sử dụng id thẻ.
  • gắn thẻ vào (mảng) - sử dụng id thẻ.
  • gắn thẻ__không_in (mảng) - sử dụng id thẻ.
  • tag_sên__và (mảng) - sử dụng sên thẻ.
  • tag_slug__in (mảng) - sử dụng sên thẻ.

Hiển thị bài viết cho một thẻ

Hiển thị các bài viết có thẻ này, sử dụng tag slug:

$query = new WP_Query(array("tag" => "cooking"));

Hiển thị các bài viết có thẻ này, sử dụng id thẻ:

$query = new WP_Query(array("tag_id" => 13));

Hiển thị bài viết từ một số thẻ

Hiển thị các bài đăng có "một trong hai" thẻ này:

$query = new WP_Query(array("tag" => "bánh mì,nướng"));

Ghi chú: Nếu WP_Query xác định rằng kết quả sẽ là số ít ( là đúng), nó sẽ bỏ qua tham số tax_query. Để sửa đổi tax_query , hãy sử dụng bộ lọc để thêm các câu lệnh SQL bắt buộc.

Lưu ý quan trọng: tax_query mất một mảngđối số truy vấn thuế mảng(phải mất một mảng mảng). Cấu trúc này cho phép bạn truy vấn nhiều nguyên tắc phân loại bằng cách sử dụng mối quan hệ tham số trong mảng đầu tiên (bên ngoài) để mô tả mối quan hệ boolean giữa các mảng phân loại.

Truy vấn phân loại đơn giản:

Trưng bày bài viếtđược gắn thẻ với bob, dưới mọi người phân loại tùy chỉnh:

$args = array("post_type" => "post", "tax_query" => array(array("taxonomy" => "people", "field" => "slug", "terms" => "bob", ),),); $query = WP_Query mới($args);

Xử lý nhiều phân loại:

Trưng bày bài viết từ một số nguyên tắc phân loại tùy chỉnh:

$args = array("post_type" => "post", "tax_query" => array("relation" => "AND", array("taxonomy" => "movie_genre", "field" => "sên", "terms" => array("action", "comedy"),), array("taxonomy" => "actor", "field" => "term_id", "terms" => array(103, 115, 206 ), "toán tử" => "KHÔNG VÀO",),),); $query = WP_Query mới($args);

Trưng bày bài viếtđó là trong trích dẫn danh mục HOẶC có trích dẫn :

$args = array("post_type" => "post", "tax_query" => array("relation" => "OR", array("taxonomy" => "category", "field" => "slug", "terms" => array("quotes"),), array("taxonomy" => "post_format", "field" => "slug", "terms" => array("post-format-quote"), ),),); $query = WP_Query mới($args);

Xử lý phân loại lồng nhau:

Các mệnh đề "tax_query" có thể được lồng vào nhau để tạo các truy vấn phức tạp hơn. Ví dụ: Hiển thị bài viếtđó là trong trích dẫn danh mục HOẶC cả hai đều có trích dẫnđịnh dạng bài đăng VÀ nằm trong khôn ngoan loại:

$args = array("post_type" => "post", "tax_query" => array("relation" => "OR", array("taxonomy" => "category", "field" => "slug", "terms" => array("quotes"),), array("relation" => "AND", array("taxonomy" => "post_format", "field" => "slug", "terms" => array("post-format-quote"),), array("taxonomy" => "category", "field" => "slug", "terms" => array("wisdom"),),),) ,); $query = WP_Query mới($args);

Tham số tìm kiếm

Hiển thị bài viết dựa trên tìm kiếm từ khóa.

  • S (sợi dây) - Tìm từ khóa.

Hiển thị bài viết dựa trên tìm kiếm từ khóa

Hiển thị các bài viết khớp với từ khóa tìm kiếm “từ khóa”:

$query = new WP_Query(array("s" => "keyword"));

Việc thêm một thuật ngữ có dấu gạch nối vào trước sẽ loại trừ các bài đăng phù hợp với thuật ngữ đó. Ví dụ: "pillow -sofa" sẽ trả về các bài đăng có chứa "pillow" chứ không phải "sofa" (có sẵn từ ).

Thông số bài đăng và trang

Hiển thị nội dung dựa trên thông số bài viết và trang. Hãy nhớ rằng post_type mặc định chỉ được đặt để hiển thị các bài đăng chứ không phải các trang.

  • P (int) - sử dụng id bài đăng. Loại bài đăng mặc định là bài đăng.
  • tên (sợi dây) - sử dụng bài sên.
  • tiêu đề (sợi dây) - sử dụng tiêu đề bài đăng (có sẵn với ).
  • trang_id (int) - sử dụng id trang.
  • tên trang (sợi dây) - sử dụng sên trang.
  • post_parent (int) - sử dụng id trang để chỉ trả về các trang con. Đặt thành 0 để chỉ trả về các mục cấp cao nhất.
  • post_parent__in (mảng) - sử dụng id bài đăng. Chỉ định bài đăng có cha mẹ nằm trong một mảng. (có sẵn kể từ đó)
  • post_parent__not_in (mảng) - sử dụng id bài đăng. Chỉ định các bài đăng có cha mẹ không nằm trong một mảng. Giống như post__in/post__not_in, các id có trong post_parent__in sẽ ghi đè các id được chỉ định trong post_parent__not_in (có sẵn kể từ đó)
  • đăng bài trong (mảng) - sử dụng id bài đăng. Chỉ định bài viết để lấy. CHÚ Ý Nếu bạn sử dụng các bài đăng hấp dẫn, chúng sẽ được đưa vào (được thêm vào trước!) trong các bài đăng bạn truy xuất dù muốn hay không. Để ngăn chặn hành vi này, hãy sử dụng.
  • đăng__không_in (mảng) - sử dụng id bài đăng. Chỉ định bài KHÔNG để lấy. Nếu điều này được sử dụng trong cùng một truy vấn với post__in, nó sẽ bị bỏ qua.
  • post_name__in (mảng) - sử dụng sên bài. Chỉ định bài viết để lấy. (có sẵn kể từ đó)
  • loại thư (sợi dây / mảng) - sử dụng các loại bài đăng. Truy xuất bài viết bằng , giá trị mặc định là " post ". Nếu "tax_query" được đặt cho một truy vấn thì giá trị mặc định sẽ trở thành "bất kỳ";
    • "bài" - một bài viết.
    • "trang" - một trang.
    • "sửa đổi" - một bản sửa đổi.
    • "đính kèm" - một tập tin đính kèm. Mặc dù WP_Query post_status mặc định là "xuất bản", các tệp đính kèm có post_status mặc định là "kế thừa". Điều này có nghĩa là sẽ không có tệp đính kèm nào được trả lại trừ khi bạn cũng đặt rõ ràng post_status thành "kế thừa" hoặc "bất kỳ". (Xem bên dưới)
    • " nav_menu_item " - một mục menu điều hướng
    • " bất kỳ " - truy xuất bất kỳ loại nào ngoại trừ các bản sửa đổi và loại có "loại trừ_from_search" được đặt thành đúng.
    • Loại bài đăng tùy chỉnh (ví dụ: phim)

Hiển thị bài viết theo loại

Chỉ hiển thị các trang:

$query = new WP_Query(array("post_type" => "page"));

Hiển thị loại bài đăng " bất kỳ " nào (truy xuất bất kỳ loại nào ngoại trừ các bản sửa đổi và loại có "loại trừ_from_search" được đặt thành TRUE):

$query = new WP_Query(array("post_type" => "any"));

Hiển thị nhiều loại bài đăng, bao gồm các loại bài đăng tùy chỉnh:

$args = array("post_type" => array("bài đăng", "trang", "phim", "sách")); $query = WP_Query mới($args);

Thông số trạng thái

  • Trạng thái bài đăng (sợi dây / mảng) - sử dụng trạng thái bài đăng. Truy xuất bài đăng bằng . Giá trị mặc định là "xuất bản", nhưng nếu người dùng đăng nhập, giá trị "riêng tư" sẽ được thêm vào. Public cũng được bao gồm theo mặc định. Và nếu truy vấn được chạy trong ngữ cảnh quản trị viên (khu vực quản trị hoặc lệnh gọi AJAX), các trạng thái được bảo vệ cũng sẽ được thêm vào. Theo mặc định, các trạng thái được bảo vệ là "tương lai", "bản nháp" và "đang chờ xử lý".
    • " xuất bản " - một bài viết hoặc trang được xuất bản.
    • "đang chờ xử lý" - bài đăng đang chờ xem xét.
    • "bản nháp" - một bài đăng ở trạng thái bản nháp.
    • "tự động soạn thảo" - một bài đăng mới được tạo, không có nội dung.
    • "tương lai" - một bài đăng sẽ xuất bản trong tương lai.
    • "riêng tư" - không hiển thị đối với người dùng chưa đăng nhập.
    • "kế thừa" - một bản sửa đổi. nhìn thấy.
    • "thùng rác" - bài đăng nằm trong thùng rác (có sẵn từ ).
    • " bất kỳ " - truy xuất bất kỳ trạng thái nào ngoại trừ các trạng thái từ trạng thái bài đăng có "loại trừ_from_search" được đặt thành true (tức là thùng rác và tự động nháp).

Hiển thị bài viết theo trạng thái

Chỉ hiển thị bản nháp:

$query = new WP_Query(array("post_status" => "draft"));

Hiển thị nhiều trạng thái bài viết:

$args = array("post_status" => array("đang chờ xử lý", "bản nháp", "tương lai")); $query = WP_Query mới($args);

Hiển thị tất cả các tệp đính kèm:

$args = array("post_status" => "bất kỳ", "post_type" => "đính kèm"); $query = WP_Query mới($args);

Thông số bình luận

$paged = (get_query_var("trang")) ? get_query_var("trang") : 1; $query = new WP_Query(array("paged" => $paged));

Hiển thị bài viết đáng chú ý

Chỉ hiển thị bài viết dính đầu tiên:

$sticky = get_option("sticky_posts"); $query = new WP_Query(array("p" => $sticky));

Chỉ hiển thị bài đăng đầu tiên, nếu không có bài đăng cuối cùng được xuất bản:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => 1, "post__in" => $sticky, "ignore_sticky_posts" =>

Chỉ hiển thị bài đăng đầu tiên, thêm dòng này vào khối trên:

If ($sticky) ( // chèn vào đây nội dung của bạn... )

Không hiển thị bài viết dính

Loại trừ tất cả các bài viết hấp dẫn khỏi truy vấn:

$query = new WP_Query(array("post__not_in" => get_option("sticky_posts")));

Trả lại TẤT CẢ các bài đăng trong danh mục, nhưng không hiển thị ("bỏ qua") các bài đăng cố định ở trên cùng (Chúng sẽ vẫn hiển thị ở vị trí tự nhiên, ví dụ: theo ngày):

$query = new WP_Query(array("ignore_sticky_posts" => 1, "posts_per_page" => 3, "cat" => 6);

Loại trừ các bài viết dính khỏi một danh mục. Trả lại các bài đăng trong danh mục, nhưng loại trừ hoàn toàn các bài đăng hấp dẫn và tuân thủ các quy tắc phân trang:

$paged = get_query_var("phân trang") ? get_query_var("phân trang") : 1; $sticky = get_option("sticky_posts"); $args = array("cat" => 3, "ignore_sticky_posts" => 1, "post__not_in" => $sticky, "paged" => $paged,); $query = WP_Query mới($args);

Đặt hàng & Đặt hàng theo thông số

Sắp xếp các bài viết được truy xuất.

  • đặt hàng (chuỗi | mảng) – Chỉ định thứ tự tăng dần hoặc giảm dần của tham số “orderby”. Mặc định là "DESC". Một mảng có thể được sử dụng cho nhiều bộ thứ tự/thứ tự.
    • "ASC" - thứ tự tăng dần từ giá trị thấp nhất đến cao nhất (1, 2, 3; a, b, c).
    • "DESC" - thứ tự giảm dần từ giá trị cao nhất đến thấp nhất (3, 2, 1; c, b, a).
  • đặt bởi (chuỗi | mảng) - Sắp xếp các bài viết được truy xuất theo tham số. Mặc định là "ngày (post_date)". Một hoặc nhiều lựa chọn có thể được thông qua.
    • " none " - Không có đơn hàng (có sẵn kể từ ).
    • "ID" - Sắp xếp theo id bài đăng. Lưu ý viết hoa.
    • "tác giả" - Sắp xếp theo tác giả. ("post_author" cũng được chấp nhận.)
    • " title " - Sắp xếp theo tiêu đề. (" post_title "cũng được chấp nhận.)
    • " name " - Order by post name (post slug). (" post_name " is also accepted.)!}
    • " gõ " - Sắp xếp theo (có sẵn từ ). ("post_type" cũng được chấp nhận.)
    • “date” – Sắp xếp theo ngày. ("post_date" cũng được chấp nhận.)
    • "đã sửa đổi" - Sắp xếp theo ngày sửa đổi cuối cùng. ("post_modified" cũng được chấp nhận.)
    • " parent " - Sắp xếp theo id gốc của bài đăng/trang. ("post_parent" cũng được chấp nhận.)
    • " rand " - Thứ tự ngẫu nhiên. Bạn cũng có thể sử dụng " RAND(x) " trong đó " x " là giá trị hạt giống số nguyên. Lưu ý rằng cần phải có tham số "order" để Rand "orderby" hoạt động.
    • " comment_count " - Sắp xếp theo số lượng bình luận (có sẵn kể từ ).
    • " mức độ liên quan " - Sắp xếp theo cụm từ tìm kiếm theo thứ tự sau: Đầu tiên, liệu toàn bộ câu có khớp hay không. Thứ hai, nếu tất cả các cụm từ tìm kiếm đều nằm trong tiêu đề. Thứ ba, nếu bất kỳ cụm từ tìm kiếm nào xuất hiện trong tiêu đề. Và thứ tư, nếu câu đầy đủ xuất hiện trong nội dung.
    • "menu_order" - Sắp xếp theo thứ tự trang. Được sử dụng thường xuyên nhất cho ( Đặt hàng trường trong hộp Chỉnh sửa Thuộc tính Trang) và for (các trường số nguyên trong hộp thoại Chèn / Tải lên Thư viện Phương tiện), nhưng có thể được sử dụng cho bất kỳ loại bài đăng nào có các giá trị " menu_order " riêng biệt (tất cả đều mặc định là 0).
    • " meta_value " - Lưu ý rằng a" meta_key=keyname " must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect). Use " meta_value_num " instead for numeric values. You may also specify " meta_type " if you want to cast the meta value as a specific type. Possible values are "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED", same as in " $meta_query ". When using " meta_type " you can also use " meta_value_* " accordingly. For example, when using DATETIME as " meta_type " you can use " meta_value_datetime " to define order structure.!}
    • " meta_value_num " - Sắp xếp theo giá trị meta số (có sẵn từ ). Cũng lưu ý rằng " meta_key=keyname " cũng phải có trong truy vấn. Giá trị này cho phép sắp xếp theo số như đã lưu ý ở trên trong " meta_value ".
    • " post__in " - Preserve post ID order given in the " post__in " array (available since ). !} Ghi chú
    • " post_name__in " - Giữ nguyên thứ tự sên bài đăng trong mảng " post_name__in " (có sẵn kể từ ). Ghi chú- giá trị của tham số thứ tự không thay đổi thứ tự sắp xếp kết quả.
    • " post_parent__in " - Giữ nguyên thứ tự bài đăng gốc được đưa ra trong mảng " post_parent__in " (có sẵn kể từ ). Ghi chú- giá trị của tham số thứ tự không thay đổi thứ tự sắp xếp kết quả.

Hiển thị bài viết được sắp xếp theo Tiêu đề, Thứ tự giảm dần

Hiển thị các bài viết được sắp xếp theo “tiêu đề” bài viết theo thứ tự giảm dần:

$args = array("orderby" => "title", "order" =>

Hiển thị các bài đăng được sắp xếp theo "menu_order" với dự phòng để đăng "tiêu đề", theo thứ tự giảm dần:

$args = array("orderby" => "menu_order title", "order" => "DESC",); $query = WP_Query mới($args);

Hiển thị bài đăng ngẫu nhiên

Hiển thị một bài viết ngẫu nhiên:

$args = array("orderby" => "rand", "posts_per_page" => 1,); $query = WP_Query mới($args);

Hiển thị bài viết phổ biến

Hiển thị các bài đăng được sắp xếp theo số lượng bình luận:

$args = array("orderby" => "comment_count"); $query = WP_Query mới($args);

Hiển thị sản phẩm được sắp xếp theo Giá

Hiển thị các bài đăng có loại "Sản phẩm" được sắp xếp theo trường tùy chỉnh "Giá":

$args = array("post_type" => "product", "orderby" => "meta_value_num", "meta_key" => "price",); $query = WP_Query mới($args);

Nhiều giá trị "theo thứ tự"

Hiển thị các trang được sắp xếp theo "title" và "menu_order". (tiêu đề chiếm ưu thế):

$args = array("post_type" => "page", "orderby" => "title menu_order", "order" => "ASC",); $query = WP_Query mới($args);

Nhiều giá trị "orderby" sử dụng một mảng

Hiển thị các trang được sắp xếp theo "title" và "menu_order" với các thứ tự sắp xếp khác nhau (ASC/DESC) (có sẵn từ ):

$args = array("orderby" => array("title" => "DESC", "menu_order" => "ASC")); $query = WP_Query mới($args);

Nhiều cặp đơn hàng/đơn hàng

$args = array("orderby" => array("meta_value_num" => "DESC", "title" => "ASC"), "meta_key" => "age"); $query = WP_Query mới($args);

"orderby" với "meta_value" và loại bài đăng tùy chỉnh

Hiển thị các bài đăng thuộc loại "my_custom_post_type", được sắp xếp theo "độ tuổi" và được lọc để chỉ hiển thị độ tuổi 3 và 4 (sử dụng meta_query).

$args = array("post_type" => "my_custom_post_type", "meta_key" => "age", "orderby" => "meta_value_num", "order" => "ASC", "meta_query" => array(array( "key" => "age", "value" => array(3, 4), "so sánh" => "IN",),),); $query = WP_Query mới($args);

"orderby" với nhiều "meta_key"

Nếu bạn muốn sắp xếp theo hai phần postmeta khác nhau (ví dụ: Thành phố thứ nhất và Bang thứ hai), bạn cần kết hợp và liên kết truy vấn meta của mình với mảng orderby bằng cách sử dụng "truy vấn meta được đặt tên". Xem ví dụ dưới đây:

$q = new WP_Query(array("meta_query" => array("relation" => "AND", "state_clause" => array("key" => "state", "value" => "Wisconsin",) , "city_clause" => array("key" => "city", "compare" => "EXISTS",,, "orderby" => array("city_clause" => "ASC", "state_clause" = > "DESC",),));

Thông số ngày

Hiển thị các bài đăng được liên kết với một khoảng thời gian và ngày nhất định.

  • năm (int) - năm có 4 chữ số (ví dụ: 2011).
  • số tháng (int
  • w (int) - Tuần trong năm (từ 0 đến 53). Sử dụng lệnh MySQL WEEK. Chế độ này phụ thuộc vào tùy chọn "start_of_week".
  • ngày (int
  • giờ (int) - Giờ (từ 0 đến 23).
  • phút (int) - Phút (từ 0 đến 60).
  • thứ hai (int) - Giây (0 đến 60).
  • tôi (int) - NămTháng (Ví dụ: 201307 ).
  • ngày_query (mảng) - Tham số ngày (có sẵn kể từ ).
    • năm (int) - năm có 4 chữ số (ví dụ: 2011).
    • tháng (int) – Số tháng (từ 1 đến 12).
    • tuần (int) - Tuần trong năm (từ 0 đến 53).
    • ngày (int) – Ngày trong tháng (từ 1 đến 31).
    • giờ (int) - Giờ (từ 0 đến 23).
    • phút (int) - Phút (từ 0 đến 59).
    • thứ hai (int) - Giây (0 đến 59).
    • sau đó (chuỗi/mảng) - Ngày lấy bài viết sau. Chấp nhận strtotime()
      • năm (sợi dây
      • tháng (sợi dây) Tháng trong năm. Chấp nhận số 1-12. Mặc định: 12.
      • ngày (sợi dây) Ngày trong tháng. Chấp nhận số 1-31. Mặc định: ngày cuối cùng của tháng.
    • trước (chuỗi/mảng) - Ngày lấy bài viết trước đó. Chấp nhận chuỗi tương thích strtotime() hoặc mảng các giá trị "năm", "tháng", "ngày":
      • năm (sợi dây) Chấp nhận bất kỳ năm có bốn chữ số nào. Mặc định là trống.
      • tháng (sợi dây) Tháng trong năm. Chấp nhận số 1-12. Mặc định: 1.
      • ngày (sợi dây) Ngày trong tháng. Chấp nhận số 1-31. Mặc định: 1.
    • bao gồm (boolean) - Đối với sau/trước, giá trị chính xác có khớp hay không".
    • so sánh (sợi dây) - Xem WP_Date_Query::get_compare().
    • cột (sợi dây) - để truy vấn. Mặc định: "post_date".
    • mối quan hệ (sợi dây) - OR hoặc AND, cách so sánh các mảng con. Mặc định: VÀ.

Trả về các bài đăng ngày 12 tháng 12 năm 2012:

$query = new WP_Query("year=2012&monthnum=12&day=12");

$args = array("date_query" => array(array("year" => 2012, "month" => 12, "day" => 12,),),); $query = WP_Query mới($args);

Trả lại bài viết cho ngày hôm nay:

$hôm nay = getdate(); $query = new WP_Query("year=" . $today["year"] . "&monthnum=" . $today["mon"] . "&day=" . $today["mday"]);

$hôm nay = getdate(); $args = array("date_query" => array(array("year" => $today["year"], "month" => $today["mon"], "day" => $today["mday “],),),); $query = WP_Query mới($args);

Trả lại bài viết trong tuần này:

$ tuần = ngày("W"); $năm = ngày("Y"); $query = new WP_Query("year=" . $year . "&w=" . $week);

$args = array("date_query" => array(array("year" => date("Y"), "week" => date("W"),),),); $query = WP_Query mới($args);

Trả lại bài viết từ 9 giờ sáng đến 5 giờ chiều các ngày trong tuần

$args = array("date_query" => array(array("hour" => 9, "so sánh" => ">=",), array("hour" => 17, "so sánh" => "<=",), array("dayofweek" =>mảng(2, 6), "so sánh" => " GIỮA",), "posts_per_page" =>

Trả lại bài viết từ ngày 1 tháng 1 đến ngày 28 tháng 2

$args = array("date_query" => array(array("after" => "Ngày 1 tháng 1 năm 2013", "trước" => array("năm" => 2013, "tháng" => 2, "ngày" => 28,), "bao gồm" => true,), "posts_per_page" => -1,); $query = WP_Query mới($args);

Lưu ý rằng nếu một chuỗi tương thích strtotime() - chỉ có một ngày được chuyển vào tham số before thì chuỗi này sẽ được chuyển đổi thành 00:00:00 vào ngày đó. Trong trường hợp này, ngay cả khi giá trị bao gồm được đặt thành true thì ngày sẽ không được đưa vào truy vấn. Nếu bạn muốn bao gồm cả ngày trước đó, hãy bao gồm cả thời gian, chẳng hạn như "trước" => "2013-02-28 23:59:59" hoặc sử dụng định dạng mảng, được điều chỉnh tự động nếu bao gồm được đặt .

Trả lại các bài đăng được thực hiện hơn một năm trước nhưng được sửa đổi trong tháng qua

$args = array("date_query" => array(array("column" => "post_date_gmt", "Before" => "1 năm trước",), array("column" => "post_modified_gmt", "after" => "1 tháng trước",),), "posts_per_page" => -1,); $query = WP_Query mới($args);

Các mệnh đề "date_query" có thể được lồng vào nhau để tạo các truy vấn phức tạp. Xem để biết chi tiết về cú pháp.

Thông số trường tùy chỉnh

Hiển thị các bài đăng được liên kết với một trường tùy chỉnh nhất định.

Phần truy vấn này được phân tích cú pháp bởi , vì vậy hãy kiểm tra luôn trong trường hợp danh sách đối số này không được cập nhật.

  • khóa meta (sợi dây) - Khóa trường tùy chỉnh.
  • giá trị meta (sợi dây) - Giá trị trường tùy chỉnh.
  • meta_value_num (con số) - Giá trị trường tùy chỉnh.
  • so sánh meta (sợi dây) - Toán tử để kiểm tra " meta_value ". Các giá trị có thể là"=", "!=", ">", ">=", "!}<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" or "RLIKE". Default value is "=".
  • truy vấn meta (mảng) - Tham số trường tùy chỉnh (có sẵn từ ).
    • mối quan hệ (sợi dây) - Mối quan hệ logic giữa mỗi mảng meta_query bên trong khi có nhiều hơn một. Các giá trị có thể là "VÀ", "HOẶC". Không sử dụng với một mảng meta_query bên trong.

meta_query cũng chứa một hoặc nhiều mảng với các khóa sau:

  • chìa khóa (sợi dây) - Khóa trường tùy chỉnh.
  • giá trị (sợi dây|mảng) - Giá trị trường tùy chỉnh. Nó chỉ có thể là một mảng khi so sánh là "IN" , "NOT IN" , "BETWEEN" hoặc "NOT BETWEEN" . Bạn không phải chỉ định giá trị khi sử dụng phép so sánh "Tồn tại" hoặc "KHÔNG Tồn tại" trong WordPress 3.9 trở lên.
    (Ghi chú: Do lỗi #23268 , giá trị là bắt buộc để so sánh NOT EXISTS hoạt động chính xác trước 3.9. Bạn phải cung cấp một số chuỗi cho tham số giá trị. Một chuỗi trống hoặc NULL sẽ KHÔNG hoạt động. Tuy nhiên, bất kỳ chuỗi nào khác sẽ thực hiện thủ thuật và sẽ KHÔNG hiển thị trong SQL của bạn khi sử dụng NOT EXISTS . Cần nguồn cảm hứng? Thế còn "lỗi #23268" thì sao.)
  • so sánh (sợi dây) - Toán tử để kiểm tra. Các giá trị có thể là "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "EXISTS" and "NOT EXISTS". Default value is "=".
  • kiểu (sợi dây) - Loại trường tùy chỉnh. Các giá trị có thể là "NUMERIC", "BINARY", "CHAR", "DATE", "DATETIME", "DECIMAL", "SIGNED", "TIME", "UNSIGNED". Giá trị mặc định là "CHAR". Bạn cũng có thể chỉ định độ chính xác và tỷ lệ cho loại "DECIMAL" và "NUMERIC" (ví dụ: "DECIMAL(10,5)" hoặc "NUMERIC(10)" là hợp lệ).

"loại" DATE chỉ hoạt động với giá trị "so sánh" GIỮA nếu ngày được lưu trữ ở định dạng YYYY-MM-DD và được thử nghiệm với định dạng này.

Lưu ý quan trọng: meta_query mất một mảng của các đối số truy vấn meta mảng(cần một mảng mảng) - bạn có thể thấy điều này trong các ví dụ bên dưới. Cấu trúc này cho phép bạn truy vấn nhiều siêu dữ liệu bằng cách sử dụng mối quan hệ tham số trong mảng đầu tiên (bên ngoài) để mô tả mối quan hệ boolean giữa các truy vấn meta. Đối số được chấp nhận là "VÀ", "HOẶC". Mặc định là "VÀ".

Truy vấn trường tùy chỉnh đơn giản:

Hiển thị các bài đăng trong đó khóa trường tùy chỉnh là "màu", bất kể giá trị trường tùy chỉnh:

$query = new WP_Query(array("meta_key" => "color"));

Hiển thị các bài đăng có giá trị trường tùy chỉnh là "xanh", bất kể khóa trường tùy chỉnh:

$query = new WP_Query(array("meta_value" => "blue"));

Hiển thị trong đó giá trị trường tùy chỉnh là "xanh", bất kể khóa trường tùy chỉnh:

$args = array("meta_value" => "blue", "post_type" => "page"); $query = WP_Query mới($args);

Hiển thị các bài đăng trong đó khóa trường tùy chỉnh là "màu" và giá trị trường tùy chỉnh là "xanh":

$args = array("meta_key" => "color", "meta_value" => "blue"); $query = WP_Query mới($args);

Hiển thị các bài đăng trong đó khóa trường tùy chỉnh là "màu" và giá trị trường tùy chỉnh KHÔNG phải là "màu xanh":

$args = array("meta_key" => "color", "meta_value" => "blue", "meta_compare" => "!="); $query = WP_Query mới($args);

Hiển thị các bài đăng có giá trị trường tùy chỉnh là một số. Chỉ hiển thị các bài đăng có số đó nhỏ hơn 10. (WP_Query sử dụng phương trình này để so sánh: $post_meta . $args["meta_compare"] . $args["meta_value"] , trong đó "$post_meta" là giá trị của bài đăng tùy chỉnh meta được lưu trữ trong mỗi bài viết; phương trình thực tế với các giá trị được điền vào: $post_meta< 10)

$args = array("post_type" => "post", "meta_key" => "number", "meta_value_num" => 10, "meta_compare" => "<",); $query = new WP_Query($args);

Hiển thị các bài đăng trong đó khóa trường tùy chỉnh là ngày đã đặt và giá trị trường tùy chỉnh hiện tại. Chỉ hiển thị các bài viết chưa qua ngày.

$args = array("post_type" => "event", "meta_key" => "event_date", "meta_value" => date("Ymd"), // thay đổi cách lưu trữ "ngày sự kiện" "meta_compare" = > ">",); $query = WP_Query mới($args);

Hiển thị (các) "sản phẩm" trong đó khóa trường tùy chỉnh là 'giá' và giá trị trường tùy chỉnh ÍT HƠN HOẶC BẰNG 22.
Bằng cách sử dụng tham số 'meta_value', giá trị 99 sẽ được coi là lớn hơn 100 vì dữ liệu được lưu trữ dưới dạng 'chuỗi' chứ không phải 'số'. Để so sánh số, hãy sử dụng 'meta_value_num'.

$args = array('meta_key' => 'price', 'meta_value' => '22', 'meta_compare' => '<=', 'post_type' =>'sản phẩm'); $query = WP_Query mới($args);

Hiển thị các bài đăng có giá trị trường tùy chỉnh bằng 0 (0), bất kể khóa trường tùy chỉnh:

$args = mảng('meta_value' => '_wp_zero_value'); $query = WP_Query mới($args);

Xử lý trường tùy chỉnh đơn:

Hiển thị bài viết từ một trường tùy chỉnh duy nhất:

$args = array('post_type' => 'product', 'meta_query' => array(array('key' => 'color', 'value' => 'blue', 'so sánh' => 'KHÔNG THÍCH' ,),),); $query = WP_Query mới($args);

(Lưu ý rằng meta_query yêu cầu các mảng lồng nhau, ngay cả khi bạn chỉ có một truy vấn.)

Trong bài viết hôm nay trong loạt bài khám phá lớp WP_Query của chúng tôi, bạn sẽ tìm hiểu về một số đối số mà bạn có thể sử dụng với WP_Query để truy vấn:

  • trạng thái;
  • đặt hàng;
  • phân trang.

Các đối số này có thể được sử dụng để truy xuất bản ghi từ cơ sở dữ liệu, trong truy vấn đính kèm, sắp xếp lại và sắp xếp bản ghi, chỉ định số lượng bản ghi cần hiển thị, v.v.

Hãy nhớ cách các đối số hoạt động trong WP_Query

Khi bạn sử dụng WP_Query trong các chủ đề hoặc plugin của riêng mình, có bốn thành phần chính bạn cần đưa vào mã của mình:

  • Đối số cho một yêu cầu sử dụng tham số;
  • Bản thân yêu cầu;
  • Xe đạp;
  • Giai đoạn cuối cùng: đặt lại dữ liệu ghi.

Trong thực tế nó trông như thế này:

has_posts()) ( // bắt đầu chu trình xử lý dữ liệu từ kết quả truy vấn while ($query->have_posts()) ( $query->the_post(); // nội dung của bài đăng được truy vấn) ) // khôi phục bản gốc đăng dữ liệu wp_reset_postdata(); ?>

Các đối số cho WordPress biết dữ liệu nào cần lấy từ cơ sở dữ liệu. Hãy tập trung vào phần đầu của mã:

$args = array(// Đối số cho yêu cầu của bạn);

Như bạn có thể thấy, các đối số được đặt trong một mảng.

Tạo mã cho các đối số

Có một cú pháp cụ thể để khởi tạo các đối số trong một mảng:

$args = array("parameter1" => "value", "parameter2" => "value", "parameter3" => "value");

Bạn nên đặt các tham số và giá trị của chúng trong dấu ngoặc đơn và sử dụng => giữa chúng. Các đối số được phân tách bằng dấu phẩy. Nếu bạn không tuân theo cú pháp đã thiết lập thì WordPress có thể không thăm dò tất cả các đối số bạn chỉ định và kết quả là sẽ không có gì được hiển thị trên màn hình.

Tùy chọn trạng thái

Như bạn đã biết, WordPress cung cấp cho mỗi bài đăng một trạng thái riêng. Bạn có thể sử dụng tham số post_status để truy vấn các bài đăng có một hoặc nhiều trạng thái.

Các đối số sau đây có sẵn:

  • xuất bản : bài đăng hoặc trang được xuất bản;
  • đang chờ xử lý: mục đang chờ xem xét;
  • dự thảo: mục ở trạng thái dự thảo;
  • auto-draft: bài viết mới tạo, chưa có nội dung;
  • tương lai : nhập cảnh theo lịch trình;
  • riêng tư: mục nhập không hiển thị đối với khách truy cập chưa đăng nhập vào trang web;
  • kế thừa: phiên bản hoặc trạng thái bài viết được sửa đổi cho các bài viết đính kèm;
  • thùng rác : mục nhập nằm trong thùng rác;
  • Any : yêu cầu bất kỳ trạng thái nào ngoại trừ những trạng thái có tham số 'loại trừ_khỏi_tìm kiếm'được đặt thành true (ví dụ: tự động soạn thảo hoặc rác).

Nếu bạn không chỉ định trạng thái trong đối số yêu cầu của mình, WordPress sẽ mặc định xuất bản ; nếu người dùng được ủy quyền trên trang web thì yêu cầu cũng sẽ tính đến các bản ghi có trạng thái riêng tư. Nếu bạn chạy yêu cầu với tư cách quản trị viên thì WordPress cũng sẽ tính đến các trạng thái được bảo vệ: tương lai, bản nháp và đang chờ xử lý.

Giả sử bạn có một trang web áp phích sử dụng loại bài đăng sự kiện của riêng mình và sử dụng ngày sự kiện được lên lịch làm ngày xuất bản. Theo mặc định, WordPress sẽ không hiển thị các sự kiện chưa diễn ra. Bất chấp những gì bạn đã lên kế hoạch, ngày xuất bản là trong tương lai, điều đó có nghĩa là trạng thái bài đăng sẽ là trong tương lai.

Để giải quyết vấn đề này, bạn có thể sử dụng các đối số sau:

$args = array("post_type" => "sự kiện", "post_status" => "tương lai");

Mã này sẽ cho phép bạn hiển thị những sự kiện chưa diễn ra vì trạng thái xuất bản được sử dụng cho các mục đã xuất bản. Nhưng nếu bạn cần hiển thị các sự kiện đã diễn ra thì bạn cần sử dụng một mảng chứa nhiều trạng thái:

$args = array("post_type" => "event", "post_status" => array("future", "publish"));

Tham số post_status rất quan trọng khi truy vấn tệp đính kèm vì trạng thái là kế thừa thay vì xuất bản. Để truy vấn tất cả các tệp đính kèm, bạn có thể sử dụng mã sau:

$args = array("post_type" => "tệp đính kèm", "post_status" => "kế thừa");

Nhưng bạn có thể thay thế kế thừa bằng bất kỳ trạng thái nào khác sẽ tạo ra kết quả tương tự.

Tùy chọn sắp xếp

Có hai tham số có thể được sử dụng để sắp xếp các bản ghi thu được bằng WP_Query: order và orderby. Như bạn đã hiểu, thứ tự xác định thứ tự hiển thị các bản ghi trong vòng lặp và orderby xác định chúng sẽ được sắp xếp theo trường nào trong cơ sở dữ liệu.

tham số thứ tự

Chỉ có những đối số mà bạn có thể sử dụng để sắp xếp:

ASC: Tăng dần (1, 2, 3; a, b, c).
DESC: giảm dần (3, 2, 1; c, b, a).

Nếu bạn không bao gồm đối số cho thứ tự, WordPress sẽ mặc định là DESC .

tham số thứ tự

Bạn có thể sắp xếp các bản ghi theo một số trường:

  • none : không có điều kiện sắp xếp ( có sẵn từ phiên bản 2.8);
  • ID: sắp xếp theo id bài đăng. Đừng quên chữ hoa;
  • tác giả: sắp xếp theo tác giả;
  • tiêu đề: sắp xếp theo tiêu đề;
  • tên: sắp xếp theo mục nhập sên;
  • type : sắp xếp theo loại bài viết;
  • ngày: sắp xếp theo ngày;
  • đã sửa đổi: sắp xếp theo ngày sửa đổi lần cuối;
  • parent : sắp xếp theo id của bài đăng/trang gốc;
  • rand : thứ tự ngẫu nhiên;
  • comment_count : sắp xếp theo số lượng bình luận;
  • menu_order : sắp xếp theo thứ tự trang. Được sử dụng phổ biến nhất cho các trang ( ở đây giá trị được chỉ định trong khối meta khi chỉnh sửa trang được sử dụng), cũng như cho các tệp đính kèm ( sử dụng số nguyên từ hộp thoại Chèn/Tải phương tiện). Cũng có thể được sử dụng cho bất kỳ loại bài đăng nào có bật menu_order;
  • meta_value : sắp xếp theo giá trị khóa meta hoặc giá trị tùy chỉnh;
  • các trường: Sẽ chỉ hoạt động nếu tham số meta_key được đặt. Các giá trị meta được sắp xếp theo thứ tự bảng chữ cái thay vì theo số ( tức là số 34 sẽ được in trước số 4);
  • meta_value_num : Sắp xếp theo giá trị meta số. Giống như meta_value, đối số meta_key phải được sử dụng trong yêu cầu;
  • post__in : lưu sắp xếp theo ID bài đăng được đặt trong mảng post__in.

Theo mặc định, trường ngày được sử dụng để sắp xếp. Tức là nó được sắp xếp theo ngày xuất bản.

Nếu bạn muốn sắp xếp các bản ghi theo tiêu đề theo thứ tự giảm dần, bạn có thể sử dụng các đối số sau:

$args = array("orderby" => "title", "order" => "ASC");

Sắp xếp theo nhiều trường

Để sắp xếp các bản ghi theo nhiều trường, bạn cần sử dụng một mảng có tham số orderby và tham số order nếu bạn muốn mỗi trường được sắp xếp theo một thứ tự khác nhau.

Giả sử bạn có trường tùy chỉnh có tên là xếp hạng mà bạn muốn sử dụng để sắp xếp trong cửa hàng trực tuyến. Bạn có thể sắp xếp theo xếp hạng tăng dần và sau đó theo tiêu đề bằng mã sau:

$args = array("orderby" => array("meta_value_num", "title"), "order" => "ASC", "meta_key" => "xếp hạng");

Tôi đã đưa đối số meta_key vào yêu cầu và điều này sẽ cho WordPress biết chúng tôi đang sử dụng trường tùy chỉnh nào. Điều này là cần thiết chính xác bởi vì WordPress lưu trữ siêu dữ liệu bài đăng trong bảng wp_postmeta chứ không phải trong wp_posts.

Nhưng nếu bạn muốn sắp xếp theo xếp hạng theo thứ tự giảm dần và sau đó theo tiêu đề theo thứ tự tăng dần thì sao? Trong trường hợp này, bạn nên sử dụng một mảng khác:

$args = array("orderby" => array("meta_value_num", "title"), "order" => array("DESC", "ASC"), "meta_key" => "đánh giá");

Bạn cũng có thể sắp xếp theo nhiều trường nếu không muốn sử dụng siêu dữ liệu bài đăng. Ví dụ: để sắp xếp bài đăng theo loại và sau đó theo ngày, bạn có thể sử dụng mã sau:

$args = array("orderby" => array("type", "date"), "order" => array("ASC", "DESC"));

Mã này sẽ sắp xếp theo loại bài đăng theo thứ tự tăng dần và sau đó, trong mỗi loại bài đăng, theo ngày theo thứ tự giảm dần.

Tùy chọn phân trang

Chúng tôi chuyển sang một bộ tham số khác, được liên kết với việc hiển thị nội dung theo từng trang, với tính năng phân trang. Các tham số này giúp xác định số lượng bản ghi sẽ được truy vấn và cách thức phân trang sẽ diễn ra.

Lựa chọn tiếp theo đã khả thi:

  • không phân trang ( boolean): Hiển thị tất cả các bài viết hoặc sử dụng phân trang. Giá trị mặc định là 'SAI', nghĩa là, đầu ra trang được sử dụng;
  • bài viết_per_page ( int): số bản ghi trên một trang;
  • bài viết_per_archive_page (int): số lượng bản ghi trên mỗi trang, nhưng chỉ trên trang lưu trữ;
  • bù lại ( int): số lượng bản ghi sau đó bắt đầu xuất dữ liệu;
  • phân trang( int): trang trong kho lưu trữ mà trang được lấy từ đó;
  • trang ( int): Số trang cho trang chủ tĩnh. Hiển thị các bài đăng thường chỉ xuất hiện trên trang X khi bật trang chủ tĩnh ( Trang đầu);
  • bỏ qua_sticky_posts (boolean): bỏ qua bài viết đính kèm. Giá trị mặc định là sai.

Số mục nhập và bỏ qua mục

Để hiển thị năm bài đăng gần đây nhất, hãy sử dụng mã sau:

$args = array("posts_per_page" => "5");

Hiển thị năm mục gần đây nhất, ngoại trừ mục được xuất bản gần đây nhất:

$args = array("posts_per_page" => "5", "offset" => "1");

Xin lưu ý rằng mặc dù bạn đang truy xuất các bản ghi từ sáu bản ghi cuối cùng trong cơ sở dữ liệu, bạn vẫn đang sử dụng 'post_per_page' => '5', vì đây là số lượng bản ghi sẽ được hiển thị.

Bạn có thể tạo hai truy vấn: một truy vấn để hiển thị các mục nhập gần đây nhất và truy vấn thứ hai để hiển thị thêm 10 mục nhập, ngoại trừ mục nhập đó:

Để hiển thị tất cả các bài đăng, bạn có thể sử dụng post_per_page :

$args = array("posts_per_page" => "-1");

Bài viết đính kèm

Thông thường, các bài đăng được ghim sẽ xuất hiện đầu tiên trong bất kỳ truy vấn nào. Nếu bạn cần ghi đè cài đặt này, hãy sử dụng tham số ign_sticky_posts:

$args = array("posts_per_page" => "5", "ignore_sticky_posts" => true);

Các đối số trên sẽ truy xuất năm mục cuối cùng, cho dù chúng có được đính kèm hay không.

Nếu bạn chỉ muốn hiển thị các bài đăng đính kèm, bạn cần sử dụng hàm get_option() và đối số post__in như sau:

$sticky = get_option("sticky_posts"); $args = array("posts_per_page" => "5", "post__in" => $sticky);

Đoạn mã trên sẽ lấy năm bài viết đính kèm cuối cùng. Nếu có ít hơn năm (ví dụ: ba), thì chỉ số lượng bản ghi đính kèm có sẵn sẽ được hiển thị.

Phân trang trong kho lưu trữ

Bạn cũng có thể sử dụng các tùy chọn phân trang để xác định cách phân phối các mục được truy xuất trên nhiều trang lưu trữ hoặc trang tìm kiếm.

Ví dụ: đoạn mã sau có thể được sử dụng trên trang lưu trữ để hiển thị 20 mục trên mỗi trang:

$args = array("posts_per_archive_page" => "20");

Lưu ý: đối số post_per_archive_page sẽ ghi đè post_per_page .

Nếu bạn đã theo dõi loạt bài viết của chúng tôi, có thể bạn đã biết lớp WP_Query hoạt động như thế nào và cách bạn có thể sử dụng nó để tạo các truy vấn của riêng mình. Để xác định dữ liệu nào bạn muốn trích xuất từ ​​cơ sở dữ liệu, bạn cần làm quen với các đối số của lớp này và tìm hiểu cách sử dụng chúng một cách chính xác.

Hôm nay chúng ta sẽ làm quen với các đối số cho các trường tùy chỉnh ( trường tùy chỉnh), nhưng trước tiên hãy nhớ cách sử dụng đối số trong WP_Query.

Hãy nhớ cách các đối số hoạt động trong WP_Query

Khi bạn sử dụng WP_Query trong chủ đề hoặc plugin, có bốn thành phần chính bạn cần đưa vào mã của mình:

  • Đối số cho một yêu cầu sử dụng tham số;
  • Bản thân yêu cầu;
  • Xe đạp;
  • Giai đoạn cuối cùng: đặt lại dữ liệu ghi.

Trong thực tế nó trông như thế này:

has_posts()) ( // bắt đầu chu trình xử lý dữ liệu từ kết quả truy vấn while ($query->have_posts()) ( $query->the_post(); // nội dung của bài đăng được truy vấn) ) // khôi phục bản gốc đăng dữ liệu wp_reset_postdata(); ?>

Các đối số cho WordPress biết dữ liệu nào cần lấy từ cơ sở dữ liệu:

$args = array(// Đối số cho yêu cầu của bạn);

Như bạn có thể thấy, các đối số được đặt trong một mảng.

Tạo mã cho các đối số

Có một cách đặc biệt để xác định các đối số trong một mảng:

$args = array("parameter1" => "value", "parameter2" => "value", "parameter3" => "value");

Bạn phải đặt các tham số và giá trị của chúng trong dấu ngoặc đơn và sử dụng => giữa chúng. Mỗi đối số được phân tách bằng dấu phẩy. Nếu bạn làm sai ở đây, WordPress có thể không thăm dò tất cả các đối số bạn chỉ định và sẽ không có gì hiển thị trên màn hình.

Tùy chọn trường tùy chỉnh

Các trường tùy chỉnh ( còn được gọi là siêu dữ liệu bài đăng) có thể sử dụng một lớp WP_Meta_Query riêng biệt. Do đó, để lấy siêu dữ liệu bài đăng, bạn có thể sử dụng WP_Meta_Query hoặc WP_Query ( vẫn truy cập WP_Meta_Query). Nhưng nếu bạn cần truy vấn siêu dữ liệu và các phần tử khác ( thích kiểu bài đăng), thì chỉ nên sử dụng WP_Query.

Sự khác biệt chính khi sử dụng lớp này và WP_Query là WP_Query cho phép bạn tạo các đối số đơn giản mà không cần phải sử dụng các mảng lồng nhau.

Tùy chọn cho yêu cầu trường tùy chỉnh đơn giản

Các tham số WP_Query cơ bản để chạy truy vấn trên các trường tùy chỉnh:

  • meta_key( sợi dây): khóa trường tùy chỉnh;
  • giá trị meta( sợi dây
  • meta_value_num( con số): giá trị trường tùy chỉnh;
  • meta_compare( sợi dây): toán tử để kiểm tra " giá trị meta". Các giá trị hợp lệ: "=", "!=", ">", ">=", "<", "<=", "LIKE", "NOT LIKE", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN", "NOT EXISTS", "REGEXP", "NOT REGEXP" или "RLIKE". Значение по умолчанию: "=".

Sử dụng các tùy chọn này để tạo các truy vấn đơn giản đối với các trường tùy chỉnh. Ví dụ: để hiển thị các bản ghi chứa các trường tùy chỉnh có khóa key1 ( bất kể ý nghĩa của nó là gì), bạn cần sử dụng đối số sau:

$args = array("meta_key" => "key1");

Đối số này sẽ nhận được tất cả các bản ghi có trường tùy chỉnh với key1 , bất kể giá trị. Để gán một giá trị cụ thể, bạn cần thêm một đối số bổ sung:

$args = array("meta_key" => "key1", "meta_value" => "value1");

Đối số này sẽ hiển thị tất cả các bản ghi có trường tùy chỉnh có key1 có giá trị value1 .

Bạn cũng có thể truy xuất tất cả các bản ghi bằng trường tùy chỉnh có giá trị là value1, bất kể khóa. Điều này là cần thiết khi sử dụng nhiều khóa trường tùy chỉnh có giá trị trùng lặp:

$args = mảng("meta_value" => "value1");

Như bạn có thể thấy, bạn có thể hướng một truy vấn đến một trường tùy ý theo khóa hoặc theo giá trị và không cần thiết phải chỉ định cả hai đối số mỗi lần.

Chúng tôi sử dụng đối số meta_compare

Bạn có thể nhận thấy rằng có nhiều tùy chọn cho đối số meta_compare. Hãy xem xét những thứ được sử dụng thường xuyên nhất:

  • =: Bình đẳng. Đây là thiết lập mặc định. Nghĩa là, nếu bạn không sử dụng đối số meta_compare, WP_Query sẽ sử dụng nó;
  • !+: Không bằng;
  • >: Hơn;
  • >=: Lớn hơn hoặc bằng;
  • THÍCH: Tùy chọn này bỏ qua trường hợp bạn nhập giá trị. Ở đây bạn thậm chí có thể sử dụng các ký tự đặc biệt để tìm kiếm các giá trị;
  • NOT THÍCH: Hoạt động theo nguyên tắc giống như THÍCH, nhưng hoàn toàn ngược lại;
  • IN: Sử dụng tùy chọn này với một mảng làm đối số 'giá trị' để tìm kiếm các mục có một hoặc nhiều giá trị trong mảng;
  • GIỮA: Được sử dụng với mảng gồm hai giá trị số (được chỉ định trong đối số meta_value) để tìm các bản ghi có giá trị trường tùy chỉnh nằm giữa (nhưng không bằng) hai giá trị đó;
  • KHÔNG GIỮA: Truy vấn các bản ghi có giá trị trường tùy chỉnh nằm ngoài phạm vi được chỉ định của hai giá trị số trong meta_value.

Sử dụng đối số meta_compare, bạn có thể loại trừ các khóa hoặc giá trị của trường tùy chỉnh. Để truy xuất tất cả các bản ghi ngoại trừ những bản ghi có giá trị khóa sử dụng key1 , bạn sẽ sử dụng mã sau:

$args = array("meta_key" => "key1", "meta_compare" => "!=");

Bạn có thể sử dụng giá trị 'NOT IN' trong đối số meta_compare, giá trị này cũng có thể được sử dụng với một chuỗi gồm nhiều giá trị:

$args = array("meta_key" => "key1, key2", "meta_compare" => "KHÔNG VÀO");

Mã này truy vấn các bản ghi không có trường tùy chỉnh có giá trị key1 hoặc key2. Nếu bạn cần truy vấn các bản ghi có một trường tùy chỉnh nhất định chứ không phải một trường tùy chỉnh khác, bạn có thể sử dụng một mảng lồng nhau mà tôi sẽ cho bạn biết sau.

Các ví dụ trên sử dụng các giá trị không phải số. Bạn có thể sử dụng WP_Query với các trường tùy chỉnh có giá trị số, không chỉ để truy xuất các bài đăng có các giá trị đó mà còn để truy vấn các bài đăng có trường tùy chỉnh cao hơn hoặc thấp hơn các giá trị đó. Ví dụ: điều này có thể hữu ích trong cửa hàng trực tuyến khi bạn cần tìm kiếm sản phẩm rẻ hơn hoặc đắt hơn chi phí đã chỉ định.

Để tìm các bản ghi có giá trị trường tùy chỉnh lớn hơn một số nhất định, bạn cần sử dụng mã sau:

$args = array("meta_key" => "numkey", "meta_value" => "100", "meta_compare" => ">");

Truy vấn này sẽ trả về tất cả các bản ghi có giá trị trường tùy chỉnh lớn hơn 100. Nếu bạn cần yêu cầu các bản ghi có giá trị từ 100 trở lên, bạn có thể sử dụng tham số "meta_compare" => ">=".

Bạn cũng có thể sử dụng đối số GIỮA và một mảng để tìm các bản ghi có trường tùy chỉnh sử dụng các giá trị trong một phạm vi cụ thể:

$args = array("meta_key" => "numkey", "meta_value" => array("100", "200"), "meta_compare" => "GIỮA");

Truy vấn như vậy sẽ cho phép bạn tìm tất cả các bản ghi có giá trị trường tùy chỉnh trong khoảng từ 100 đến 200.

Truy vấn cho các trường tùy chỉnh lồng nhau

Nếu bạn cần chạy truy vấn trên một số trường tùy chỉnh hoặc sử dụng nhiều toán tử, bạn có thể sử dụng mảng lồng nhau.

Cấu trúc yêu cầu sẽ như sau:

$args = array("meta_query" => array("relation" => "", // Đối số tùy chọn. array(// `meta_query` đối số sẽ ở đây.)));

Cấu trúc của đối số "meta_query" trong lớp WP_Query sẽ giống như khi sử dụng lớp WP_Meta_Query mà chúng ta sẽ nói chi tiết trong các bài viết sau.

Với việc phát hành phiên bản WordPress 4.1, người ta có thể sử dụng nhiều cấp độ mảng lồng nhau để tạo các truy vấn phức tạp và chính xác hơn nữa. Cấu trúc của các yêu cầu như vậy trông giống như thế này:

$args = array("meta_query" => array("relation" => "", // Đối số tùy chọn. array("relation" => "", array (// Tập hợp đối số `meta_query` đầu tiên.), array ( // Bộ đối số `meta_query` thứ hai.))));

Cách tiếp cận này cho phép bạn sử dụng các mối quan hệ khác nhau ở các cấp độ khác nhau trong một truy vấn. Ví dụ: bạn có thể tạo truy vấn cho các bản ghi có một giá trị trong một trường tùy chỉnh và cả hai giá trị trong một trường tùy chỉnh khác.

Tóm lại là

Sử dụng lớp WP_Query để tạo truy vấn siêu dữ liệu bài đăng ( hoặc các trường tùy chỉnh) cung cấp sự linh hoạt để làm việc với nhiều đối số khác nhau khi kết hợp với các toán tử.

Nếu bạn chỉ muốn sử dụng đối số siêu dữ liệu bài đăng trong truy vấn của mình ( và không kết hợp chúng với những người khác), thì bạn cũng có thể sử dụng lớp WP_Meta_Query mà chúng ta sẽ nói đến sau.

Bản dịch của bài viết “ Đối số WP_Query: Trường tùy chỉnh” được chuẩn bị bởi đội ngũ thân thiện của dự án Website Building từ A đến Z.

Prestashop là một công cụ quản lý cửa hàng trực tuyến. Trên Internet, bạn có thể tìm thấy nhiều mô-đun Prestashop trả phí và miễn phí giúp cải thiện trang sản phẩm và tăng số lượng chuyển đổi. Trong bài viết này, chúng ta sẽ xem xét 5 mô-đun SEO tốt nhất.