🎁 惊喜福利!即日起,联系客服 19138171052,即可免费领取价值20元的优惠券,数量有限,先到先得!活动截止至 2025年6月20日,赶快行动吧!

Elementor Loop Grid 显示置顶文章的正确姿势(含完整代码与陷阱排查)

文章目录

Elementor 的 Loop Grid 是打造高级文章展示效果的重要利器,但你是否遇到过这样的场景:

✅ 设置了 WordPress 的置顶文章(Sticky Posts),却在 Loop Grid 中根本没有效果?

你并不孤单。在 Elementor 的自定义查询(Custom Query)中,很多人会被 sticky 文章的处理方式误导。本文将手把手教你如何让 Elementor 正确显示置顶文章,包括:

  • 正确使用 Query ID 与钩子(Hook)
  • 完整的 pre_get_postselementor/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__inorderby => post__in

🧠 小结

要让 Elementor 的 Loop Grid 正确支持 Sticky Posts,需要理解两点:

  1. 使用正确的 Hook:elementor/query/{query_id}
  2. 正确构建 WP_Query 参数:使用 post__inorderby 明确 sticky 顺序

👉 官方推荐文档:
🔗 https://developers.elementor.com/docs/hooks/custom-query-filter/

✍️ 欢迎留言交流

如果你在实现过程中遇到分页、分类过滤与 sticky 文章冲突等更复杂的场景,欢迎留言或私信,我将持续更新本篇教程并提供模板导出分享!

发表回复

相关文章
主题推荐
还没有账号?

会员注册

成为会员,获得更多专属优惠!

验证码: 加载中... =

已有账号?