You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress通过Ajax调用get_posts()的异常问题求助

问题原因及解决方案

核心原因分析

  1. $aziAltFormat变量未在Ajax回调中更新:初始页面加载时,$azi和$aziAltFormat基于默认日期生成,但Ajax调用时如果只传递了新的$azi,却没有在后端重新计算对应的$aziAltFormat,会导致meta_query的value还是初始的空日期组合,查询自然无结果。
  2. WordPress查询缓存干扰:当第一次查询返回空结果时,WordPress可能会缓存这个空结果集,后续查询若缓存键生成逻辑未识别到参数变化,会直接返回缓存的空数据。

针对性解决方案

方案1:在Ajax回调中重新生成$aziAltFormat

确保后端Ajax处理函数中,根据前端传递的新日期重新计算$aziAltFormat,不要依赖页面初始值:

function filter_interventii_by_date() {
    // 接收前端传入的新日期
    if (!isset($_POST['selected_date'])) {
        wp_send_json_error('缺少日期参数');
    }
    $azi = sanitize_text_field($_POST['selected_date']);
    
    // 重新生成对应格式的日期(根据你实际的格式转换逻辑调整)
    $aziAltFormat = date('Y-m-d', strtotime($azi)); 
    
    // 执行查询,添加缓存禁用参数
    $interventii = get_posts( array(
        'post_status'       => 'publish',
        'post_type'         => 'interventii',
        'meta_query'        => array(
            array(
                'key'       => 'interventie_data_interventie',
                'value'     => array($azi, $aziAltFormat),
                'compare'   => 'IN'
            ),
        ),
        'posts_per_page'    => 9999999,
        'order'             => 'DESC',
        'orderby'           => 'date',
        'cache_results'     => false, // 禁用查询缓存
        'no_found_rows'     => true,  // 关闭分页计数优化性能
    ) );
    
    wp_send_json_success($interventii);
}
add_action('wp_ajax_filter_interventii', 'filter_interventii_by_date');
add_action('wp_ajax_nopriv_filter_interventii', 'filter_interventii_by_date');

方案2:强制禁用查询缓存

如果是缓存导致的问题,在get_posts参数中明确禁用缓存,强制每次查询直接访问数据库:

$interventii = get_posts( array(
    'post_status'               => 'publish',
    'post_type'                 => 'interventii',
    'meta_query'                => array(
        array(
            'key'               => 'interventie_data_interventie',
            'value'             => array($azi, $aziAltFormat),
            'compare'           => 'IN'
        ),
    ),
    'posts_per_page'            => 9999999,
    'order'                     => 'DESC',
    'orderby'                   => 'date',
    'cache_results'             => false,
    'update_post_meta_cache'    => false,
    'update_post_term_cache'    => false,
) );

方案3:校验日期格式一致性

确认前端传递的日期格式与数据库中interventie_data_interventie元字段的存储格式匹配,若不匹配,在后端做格式转换后再执行查询。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 09:13:16