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

如何解决WordPress functions.php中dk_get_case函数仅slug1页面生效问题

核心问题根因

  • 变量使用错误:你的代码中用$terms_1接收get_the_terms返回值,后续却调用了未定义的$terms[0],直接触发PHP错误导致函数失效。
  • 全局变量未声明:dk_get_case函数内没有声明global $post,$post变量本身为空,get_the_terms无法获取到任何分类数据。
  • AJAX上下文缺失:dk_get_case是WordPress AJAX接口的回调函数,AJAX请求和你当前打开的分类页面是完全独立的两个请求,AJAX请求不会继承分类页面的查询上下文,所以无论怎么在函数内尝试获取当前分类,都不可能拿到对应值。

修复方案

步骤1:分类模板传递当前分类slug到前端

在taxonomy-case_category.php和taxonomy-case_category-slug1.php模板中,先获取当前分类的slug,传递给前端用于AJAX请求携带:

// 分类模板顶部获取当前分类信息
$current_case_category = get_queried_object();
$current_slug = $current_case_category->slug;

将slug存入前端DOM节点的自定义属性,示例如下:

<div class="col case-right" data-current-slug="<?php echo esc_attr($current_slug); ?>">  
  <!-- dk_get_case()返回数据的展示位置 -->
  <div class="case-img" data-slider-3></div>
  <div class="popup"></div>
</div>

步骤2:修改AJAX请求逻辑,携带分类slug参数

在触发get_caseAJAX请求的JS代码中,读取存储的slug,作为请求参数传递:

// 示例:读取自定义属性中的slug
const currentSlug = document.querySelector('.case-right').dataset.currentSlug;
// 发起AJAX请求时携带参数
fetch(wpAjax.ajaxurl, {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    action: 'get_case',
    category_slug: currentSlug
  })
})
.then(res => res.json())
.then(res => {
  // 处理返回的业务逻辑
})

步骤3:修改dk_get_case函数,接收传递的分类slug

替换原有错误的获取分类slug的代码,从AJAX请求参数中读取并做合法性校验:

add_action('wp_ajax_get_case', 'dk_get_case');
add_action('wp_ajax_nopriv_get_case', 'dk_get_case');

function dk_get_case() {
    $headers['Access-Control-Allow-Origin'] = '*';
    $return = ['status' => false, 'data' => [], 'message' => ''];
    
    // 读取AJAX传递的分类slug,加校验
    $term_1 = isset($_POST['category_slug']) ? sanitize_text_field($_POST['category_slug']) : '';
    if (empty($term_1) || !term_exists($term_1, 'case_category')) {
        $return['message'] = '分类参数非法';
        echo json_encode($return);
        die;
    }

    $case_clinics = [19,20,24,32,22,12,29,44,14,47];

    foreach($case_clinics as $key => $case_clinic){
        $dk_posts = get_posts(
            array(
                'showposts' => -1,
                'post_type' => 'case',
                'tax_query' => array(
                    'relation' => 'AND',
                    array(
                        'taxonomy' => 'case_clinic',
                        'field' => 'term_id',
                        'terms' => $case_clinic
                    ),
                    array(
                        'taxonomy' => 'case_category',
                        'field' => 'slug',
                        'terms' => $term_1,
                    )
                )
            )
        );
        // 原有后续处理逻辑保持不变
        if(count($dk_posts) > 0){
            foreach($dk_posts as $dk_post){
                $attachment_id = CFS()->get('case_image', $dk_post->ID);
                $case_name1 = CFS()->get('case_name1', $dk_post->ID);
                $case_clinic = CFS()->get('case_clinic', $dk_post->ID);
                $case_name = CFS()->get('case_name', $dk_post->ID);
                $case_price = CFS()->get('case_price', $dk_post->ID);
                $case_risk = CFS()->get('case_risk', $dk_post->ID);
                $return['data'][$key][] = [
                    'id' => $dk_post->ID,
                    'case_clinic'=>$case_clinic,
                    'thumb' => wp_get_attachment_image($attachment_id, 'case_clinic'),
                    'popup' => wp_get_attachment_image($attachment_id, 'full'),
                    'case_name1'=>$case_name1,
                    'case_clinic'=>$case_clinic,
                    'case_name'=>$case_name,
                    'case_price'=>$case_price,
                    'case_risk'=>$case_risk,
                ];
            }
        }else{
            $return['data'][$key][] = [];
        }
    }
    $return['status'] = true;
    echo json_encode($return);
    die;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:27:02