[英]Filtering the MAX() function in a JOINED MySQL Query
解決:這是解決方案代碼。
//Extend Category queries to support "latest_post" for orderby parameter
function filter_term_sort_by_latest_post_clauses( $pieces, $taxonomies, $args )
{
global $wpdb;
if ( in_array('category', $taxonomies) && $args['orderby'] == 'latest_post' )
{
$pieces['fields'] .= ", MAX(p.post_date) AS last_date";
$pieces['join'] .= " JOIN $wpdb->term_relationships AS tr JOIN $wpdb->posts AS p ON p.ID=tr.object_id AND tr.term_taxonomy_id=tt.term_taxonomy_id";
$pieces['where'] .= " AND p.post_status='publish' GROUP BY t.term_id";
$pieces['orderby'] = "ORDER BY last_date";
$pieces['order'] = "DESC"; // DESC or ASC
}
return $pieces;
}
add_filter('terms_clauses', 'filter_term_sort_by_latest_post_clauses', 10, 3);
原始問題:
我在WordPress網站中添加了以下功能和篩選器掛鈎,該功能使我可以列出類別,並按每個類別中的最新帖子進行排序。 該功能按預期工作,除了包括草稿職位,並將該特定類別移至列表頂部。
//Extend Category queries to support "latest_post" for orderby parameter
function filter_term_sort_by_latest_post_clauses( $pieces, $taxonomies, $args )
{
global $wpdb;
if ( in_array('category', $taxonomies) && $args['orderby'] == 'latest_post' )
{
$pieces['fields'] .= ", MAX(p.post_date) AS last_date";
$pieces['join'] .= " JOIN $wpdb->term_relationships AS tr JOIN $wpdb->posts AS p ON p.ID=tr.object_id AND tr.term_taxonomy_id=tt.term_taxonomy_id";
$pieces['where'] .= " GROUP BY t.term_id";
$pieces['orderby'] = "ORDER BY last_date";
$pieces['order'] = "DESC"; // DESC or ASC
}
return $pieces;
}
add_filter('terms_clauses', 'filter_term_sort_by_latest_post_clauses', 10, 3);
我想使select子句“ MAX(p.post_date)AS last_date”僅包含已發布帖子中的值(WHERE p.post_status = publish“)
我該怎么做?
謝謝!
將語句添加到where子句怎么辦:$ pieces ['where']。=“ WHERE p.post_status ='publish'GROUP BY t.term_id”; 。 除非我錯過了一些東西,否則應該很容易解決。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.