You need to enable JavaScript to run this app. 自定义WordPress AJAX筛选函数渲染Twig文件时变量不生效的问题
优惠活动
大模型
产品
解决方案
定价
更多

自定义WordPress AJAX筛选函数渲染Twig文件时变量不生效的问题

问题根因

渲染Twig模板时你传入的$context没有绑定当前循环的文章对象。在AJAX请求场景下,Timber的全局上下文不会自动将主查询循环里的post数据注入到模板变量中,所以模板只能渲染出静态的HTML结构,所有依赖post的动态字段(文章标题、链接、缩略图等)全部为空,没有实际内容。

具体修复方案

1. 修改functions.php里的AJAX回调函数

核心调整点是每轮循环单独将当前文章的Timber实例绑定到对应渲染的context里,不要直接复用没有绑定post的全局$context。
修改后的完整函数代码如下:

function ajax_filter_function() {
    // 校验请求参数,可根据自身逻辑补充nonce、权限校验
    if ( ! isset( $_POST['categoryFilter'] ) ) {
        wp_die();
    }

    $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
    // 加载Timber基础全局上下文(自动包含站点配置、自定义options等公共变量)
    $context = Timber::context();

    $args = [
        'posts_per_page' => -1,
        'paged' => $paged,
        'tax_query' => [
            [
                'taxonomy' => 'category',
                'field' => 'slug',
                // 对传入的分类参数做安全过滤
                'terms' => sanitize_text_field( $_POST['categoryFilter'] ),
            ],
        ],
    ];
    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            // 关键:将当前循环的文章实例绑定到本轮渲染的context中
            $context['post'] = new Timber\Post( get_the_ID() );
            // 渲染时传入带当前post的context
            Timber::render( 'partial/tease-post.twig', $context );
        }
        wp_reset_postdata();
    } else {
        echo '<div class="col-12"><h2>No posts found</h2></div>';
    }

    die();
}

2. 无需修改现有Twig模板

你写的tease-post.twig逻辑完全符合Timber的变量规范,只要context中正确传入了Timber\Post类实例,模板里的post.title、post.link、post.thumbnail、post.terms、post.preview等变量都会正常输出。

注意事项
  • 不要在AJAX回调里直接使用全局作用域下未初始化的$context,这个全局变量在普通页面模板里是靠Timber的模板加载机制自动注入post数据的,AJAX场景不走这套加载流程,必须手动给context赋值对应的post对象
  • 模板里用到的options默认缩略图变量,会被Timber::context()方法自动合并到context中,不需要额外手动赋值
  • 生产环境一定要给AJAX接口加上nonce校验、权限校验、输入过滤,避免安全风险

内容的提问来源于stack exchange,提问作者user3767773

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 20:54:04