Elementor 的 Loop Grid 是打造高级文章展示效果的重要利器,但你是否遇到过这样的场景:
✅ 设置了 WordPress 的置顶文章(Sticky Posts),却在 Loop Grid 中根本没有效果?
你并不孤单。在 Elementor 的自定义查询(Custom Query)中,很多人会被 sticky
文章的处理方式误导。本文将手把手教你如何让 Elementor 正确显示置顶文章,包括:
- 正确使用 Query ID 与钩子(Hook)
- 完整的
pre_get_posts
与elementor/query/{id}
示例 - 常见问题与调试技巧
📌 问题重现:Loop Grid 无视 Sticky Posts
你已经设置好 Loop Grid,设置了 Query ID
,但无论怎么设置 Ignore Sticky Posts
,页面上的置顶文章依然毫无动静。
看起来 Elementor 根本没调用你的查询逻辑,对吗?
🧩 关键:使用正确的钩子
很多教程或早期插件会告诉你使用这个钩子:
add_action( 'elementor_pro/query/my_sticky', function( $query ) { ... });
⚠️ 这个在 Elementor Pro 的部分旧版本中是有效的,但在 Elementor 3.29.0 之后,建议你使用这个统一版本的钩子:
add_action( 'elementor/query/my_sticky', function( $query ) { ... });
📚 官方文档:Custom Query Filter
✅ 正确的做法:显示 Sticky Posts 的完整代码
add_action( 'elementor/query/my_sticky', function( $query ) {
$sticky = get_option( 'sticky_posts' );
if ( ! empty( $sticky ) ) {
$query->set( 'post__in', $sticky );
$query->set( 'orderby', 'post__in' );
$query->set( 'ignore_sticky_posts', 0 );
} else {
$query->set( 'post__in', ); // 防止空查询
}
});
📌 注意事项:
post__in
会限制只显示 sticky;- 如果你希望先显示 sticky,然后显示普通文章,可使用下方方案。
✨ 高级用法:Sticky 优先 + 普通文章
add_action( 'elementor/query/my_sticky', function( $query ) {
$sticky = get_option( 'sticky_posts' );
if ( ! empty( $sticky ) ) {
$query->set( 'orderby', [
'post__in' => 'DESC',
'date' => 'DESC',
]);
$query->set( 'ignore_sticky_posts', 0 );
// 不设置 post__in,让全部文章显示,但 sticky 会靠前
}
});
这种写法保留 sticky 顺序,同时包含所有文章,非常适合用于博客首页或资讯列表页。
🔍 调试技巧:钩子是否生效?
添加这句代码,可以让你确认钩子是否触发:
error_log('✅ Elementor 查询钩子生效');
然后查看 /wp-content/debug.log
是否有日志输出。
🧯 常见坑点与排查方法
问题 | 排查建议 |
---|---|
Query ID 设置无效 | 使用 elementor/query/{id} 而不是 elementor_pro/query/{id} |
页面没调用你的查询 | 仅在 Loop Grid 或 Posts Widget 设置了 Query ID 才有效 |
Sticky 不显示 | 设置了 ignore_sticky_posts = 1 或排序被覆盖 |
Sticky 没排序在前 | 没使用 post__in 或 orderby => post__in |
🧠 小结
要让 Elementor 的 Loop Grid 正确支持 Sticky Posts,需要理解两点:
- 使用正确的 Hook:
elementor/query/{query_id}
- 正确构建
WP_Query
参数:使用post__in
与orderby
明确 sticky 顺序
👉 官方推荐文档:
🔗 https://developers.elementor.com/docs/hooks/custom-query-filter/
✍️ 欢迎留言交流
如果你在实现过程中遇到分页、分类过滤与 sticky 文章冲突等更复杂的场景,欢迎留言或私信,我将持续更新本篇教程并提供模板导出分享!