如何让Elementor按自定义字段event_date排序PODs创建的event_calendar文章
按自定义字段event_date排序Elementor文章小部件内容
你通过PODs插件创建了自定义文章类型event_calendar,并添加了自定义字段event_date,但Elementor文章小部件默认按文章发布日期排序,无法满足按活动日期展示的需求。以下是可直接插入主题functions.php的代码,解决这个问题:
基础排序代码(仅按event_date排序)
function sort_events_by_event_date( $query ) { // 指定排序依据为自定义字段event_date $query->set( 'meta_key', 'event_date' ); $query->set( 'orderby', 'meta_value_date' ); $query->set( 'order', 'ASC' ); // 升序(较早的活动排在前面),需要降序可改为'DESC' } add_action( 'elementor/query/event_date_order', 'sort_events_by_event_date' );
使用步骤:
- 将上述代码复制到你的主题或子主题的
functions.php文件中 - 打开Elementor编辑器,找到对应的文章小部件,进入「查询」选项卡
- 设置「自定义查询ID」为
event_date_order(需与代码中钩子的后缀一致) - 更新页面即可生效
可选:同时筛选未过期活动+排序
如果需要只展示未过期的活动(活动日期≥今天),可使用以下代码:
function sort_and_filter_events_by_event_date( $query ) { // 筛选条件:活动日期不早于今天 $meta_query = [ [ 'key' => 'event_date', 'value' => date( 'Y-m-d' ), 'compare' => '>=', 'type' => 'DATE', ], ]; $query->set( 'meta_query', $meta_query ); // 按活动日期升序排序 $query->set( 'meta_key', 'event_date' ); $query->set( 'orderby', 'meta_value_date' ); $query->set( 'order', 'ASC' ); } add_action( 'elementor/query/event_date_order', 'sort_and_filter_events_by_event_date' );
你之前代码无效的原因:
- 代码中使用的字段名是
start_date,但你的自定义字段实际是event_date,字段名不匹配 - 代码仅添加了
meta_query筛选条件,未设置排序规则,无法改变默认的发布日期排序逻辑
内容的提问来源于stack exchange,提问作者Yasir Altaf
相关产品推荐
相关产品推荐

