Tôi có phân loại tùy chỉnh mà tôi sử dụng để nhóm các bài đăng theo chuỗi (một chuỗi là thuật ngữ trong phân loại đó). Những gì tôi muốn là để điều trị những bài viết kèm theo như các trường hợp đặc biệt khi thực hiện vòng lặp WordPress.Hiển thị bài đăng cuối cùng theo ngày từ phân loại tùy chỉnh trong vòng lặp WordPress
Chỉ bài đăng đầu tiên trong chuỗi (bài có ngày gần đây nhất) sẽ hiển thị và tất cả các bài đăng khác không thuộc một thuật ngữ trong phân loại tùy chỉnh sẽ được coi là bài đăng bình thường. Ngoài phân loại loạt tùy chỉnh, các bài đăng cũng có thể được gắn thẻ hoặc phân loại (do đó tối đa ba phân loại, bao gồm cả phân loại tùy chỉnh). Vòng lặp phải chứa một số lượng bài đăng cố định (ví dụ: số bài đăng trên trang đầu được đặt trong chương trình phụ trợ WordPress).
Tôi đang thua lỗ về cách nhóm các bài đăng này, một phần vì tất cả dữ liệu nằm trong các bảng khác nhau và vì mỗi mục có thể thuộc về nhiều phân loại. Tất nhiên lặp qua mảng bài viết, loại bỏ các bài viết cũ trong chuỗi sau khi cuộc gọi MySQL là một khả năng, nhưng trong trường hợp đó, số lượng bài đăng cố định khó duy trì mà không cần thêm truy vấn vào cơ sở dữ liệu.
Vì vậy, tôi muốn triển khai giải pháp SQL thuần túy. Tôi đã thử nghiệm bằng cách sử dụng móc posts_clauses
. Truy vấn này dưới đây trả về bài đăng có ID cao nhất, chứ không phải ngày, trong một chuỗi và thay vào đó là đánh thuế trên cơ sở dữ liệu, tôi tin.
$clauses['fields'] .= ", $wpdb->posts.ID AS postID, (SELECT $wpdb->terms.term_id
FROM $wpdb->posts, $wpdb->term_taxonomy, $wpdb->term_relationships, $wpdb->terms
WHERE $wpdb->posts.ID=postID
AND $wpdb->term_taxonomy.taxonomy='post-series'
AND $wpdb->term_relationships.term_taxonomy_id=$wpdb->term_taxonomy.term_taxonomy_id
AND $wpdb->posts.ID=$wpdb->term_relationships.object_id
AND $wpdb->terms.term_id=$wpdb->term_taxonomy.term_id
ORDER BY $wpdb->posts.post_date DESC
LIMIT 0,1) AS uniqueID";
$clauses['groupby'] = "IFNULL(uniqueID,$wpdb->posts.ID)";
Dựa trên các điều khoản trên WordPress xây dựng các truy vấn SQL sau:
SELECT SQL_CALC_FOUND_ROWS wp_posts.*, wp_posts.ID AS postID,
(SELECT wp_terms.term_id FROM wp_posts, wp_term_taxonomy, wp_term_relationships, wp_terms
WHERE wp_posts.ID=postID
AND wp_term_taxonomy.taxonomy='post-bundles'
AND wp_term_relationships.term_taxonomy_id=wp_term_taxonomy.term_taxonomy_id
AND wp_posts.ID=wp_term_relationships.object_id
AND wp_terms.term_id=wp_term_taxonomy.term_id
ORDER BY wp_posts.post_date DESC LIMIT 0,1)
AS uniqueID FROM wp_posts
WHERE 1=1
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
GROUP BY IFNULL(uniqueID,wp_posts.ID)
ORDER BY wp_posts.post_date DESC
LIMIT 0, 10
Tôi cũng đã đọc this tutorial, nhưng tôi không chắc chắn nó được áp dụng trong trường hợp này.
Vì vậy, để tóm tắt: Trong vòng lặp, tôi chỉ muốn hiển thị bài đăng mới nhất (được sắp xếp theo post_date) thuộc một thuật ngữ từ phân loại tùy chỉnh và loại trừ các bài đăng khác trong phân loại đó trong vòng lặp. Vòng lặp cũng chứa các bài đăng thông thường không phải là một phần của phân loại tùy chỉnh và cả hai loại có thể thuộc về nhiều danh mục và có thẻ.
là có bất kỳ sử dụng cho bạn nếu tôi đăng truy vấn sql mà nên làm các trick. như tôi không biết bất cứ điều gì về cách wordpress xây dựng các truy vấn? – Miguelo
Tôi nghĩ rằng đó sẽ là một trợ giúp tuyệt vời! Xây dựng truy vấn trong WordPress không phải là vấn đề đối với tôi. – mensch
sẽ tốt hơn nếu bạn có thể thêm bản ghi mẫu cùng với câu hỏi của mình và kết quả mong muốn. Cảm ơn. –