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

如何在WordPress的Meta Query中基于分类法将ACF数字字段值自动乘以25?

如何在WordPress的Meta Query中基于分类法将ACF数字字段值自动乘以25?

嘿,我明白你现在的需求了——你有一个ACF数字字段cena_podniku,需要根据不同国家(ČR和其他地区),自动把字段值乘以25后和提交的price_max做比较,对吧?结合你给出的现有代码,我来帮你调整出可行的方案。

首先得理清逻辑:你要实现的是

  • 对于捷克(ČR)的条目:直接用cena_podniku(CZK计价)和$price_max比较,要求cena_podniku <= $price_max
  • 对于非捷克的条目:cena_podniku是EUR计价,需要乘以25转换成CZK后再和$price_max比较,也就是cena_podniku * 25 <= $price_max

这里有个小技巧:WordPress的Meta Query本身不支持直接对字段值做算术运算,但我们可以反过来调整比较的数值——把$price_max除以25,这样就等价于字段值乘以25后小于等于原$price_max,这种方式不需要修改数据库查询结构,简单高效。

接下来是调整后的代码:

if (isset($_POST['price_max']) && !empty($_POST['price_max'])) {
    // 先清理输入并转换为数值类型,确保后续计算准确
    $price_max = (float) sanitize_text_field($_POST['price_max']);
    // 计算非ČR地区对应的价格阈值(EUR计价)
    $price_max_eur = $price_max / 25;
    
    $meta_query[] = array(
        'relation' => 'OR',
        // 捷克地区:直接用CZK价格比较
        array(
            'key' => 'cena_podniku',
            'value' => $price_max,
            'type' => 'numeric',
            'compare' => '<=',
        ),
        // 非捷克地区:用转换后的EUR阈值比较
        array(
            'relation' => 'AND',
            array(
                'key' => 'cena_podniku',
                'value' => $price_max_eur,
                'type' => 'numeric',
                'compare' => '<=',
            ),
            array(
                'key' => 'zeme',
                'value' => array('ČR'),
                'compare' => 'NOT IN',
            )
        ),
    );
}

几点注意事项:

  • 我把$price_max转换成了float类型,避免字符串运算导致的错误,毕竟涉及到除法和数值比较,类型准确很重要
  • 如果你希望结果是整数(比如价格只保留整数),可以把(float)换成(int),不过要注意除法后的取整逻辑(比如用floor()或者round())
  • 确保你的cena_podniku字段确实是ACF的数字类型,数据库里存储的是数值而非字符串,这样numeric类型的比较才能正常工作

这样调整后,就能实现你想要的“自动乘以25”的筛选逻辑啦~

备注:内容来源于stack exchange,提问作者Michal K

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:28:06