繁体   English   中英

仅使用 WP Query 模拟 SELECT YEAR(post_date) SQL 查询

[英]Simulating SELECT YEAR(post_date) SQL query using only WP Query

我不完全确定这是可能的,但我完全没有想法。 由于我的组织使用的其他效率插件的限制,我正在处理的任务需要我专门使用 WP_Query。

纯粹而简单,我需要一种使用 WP_Query 模拟以下查询的方法:

"SELECT YEAR(post_date) FROM wp_posts WHERE post_status = 'publish' GROUP BY YEAR(post_date) DESC"

在您回答之前,请再次注意,使用 $wpdb 全局变量是不可行的,我尝试使用 WP_Query 中的 parse_query 方法,但它似乎没有以任何有意义的方式响应上述查询。

感谢任何花时间思考这个问题的人!

大概试试这个:

<?php
//Alter the group by clause
function query_group_by_year_post_date_filter($groupby){
   return 'YEAR(wp_posts.post_date) DESC '; //try only post_date if this doesn't work
}
//Alter the select query
function query_select_fields($fields) {
  return 'YEAR(wp_posts.post_date)'; //try only post_date if this doesn't work
}

add_filter('posts_fields','query_select_fields');
add_filter('posts_groupby', 'query_group_by_year_post_date_filter'); 
$allPosts = get_posts(array( //we have to use get_posts instead of WP_Query cause get_posts supports supress_filters
    'post_type' => 'post', //specify post_type here or leave it in your case.
    'post_status' => 'publish',
    'posts_per_page' => -1,
    'suppress_filters' => true //this seems to be preset in only get_posts and not WP_Query
)); 
remove_filter('posts_groupby', 'query_group_by_filter');
remove_filter('posts_fields','query_select_fields');
?>

根据您的要求,我已尝试不在顶部的 2 个函数中使用 $wpdb。

让我知道这是否对您有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM