ACF排序Event自定义字段:页面文章模块代码无效问题求助
解决自定义字段排序在页面文章模块不生效的问题
问题根源
你的代码能在归档页正常工作,是因为归档页用的是WordPress主查询;而页面中的文章模块大多是自定义WP_Query实例,这类查询要么被设置了suppress_filters=true(阻止过滤器生效),要么你的代码逻辑没覆盖非主查询的场景。另外如果dato_for_arrangementet是日期类字段,用meta_value排序可能存在精度问题。
修正后的代码
function my_pre_get_posts( $query ) { // 后台查询不做处理 if ( is_admin() ) { return; } // 匹配所有event类型的查询(含主查询和自定义查询) if ( isset( $query->query_vars['post_type'] ) && $query->query_vars['post_type'] === 'event' ) { $query->set( 'meta_key', 'dato_for_arrangementet' ); // 字段是时间戳就用meta_value_num,是YYYY-MM-DD格式就保留meta_value $query->set( 'orderby', 'meta_value' ); $query->set( 'order', 'ASC' ); // 若为日期字符串,可添加此行确保排序逻辑正确 // $query->set( 'meta_type', 'DATE' ); } } add_action( 'pre_get_posts', 'my_pre_get_posts' );
额外排查方向
- 检查页面模块设置:部分页面构建器(如Elementor)的文章列表模块自带排序选项,会覆盖pre_get_posts的设置,需在模块里选择「按自定义字段排序」并指定对应字段,或关闭模块自带排序。
- 确认字段存储格式:如果是
05/12/2024这类非标准日期格式,排序会混乱,建议改为时间戳或YYYY-MM-DD格式。 - 排查冲突:暂时禁用其他插件,确认是否有其他代码修改了查询参数导致设置被覆盖。
内容的提问来源于stack exchange,提问作者Robin Andersen
相关产品推荐
相关产品推荐

