代码之家  ›  专栏  ›  技术社区  ›  efirvida

可以用数学运算进行wp_查询吗?

  •  0
  • efirvida  · 技术社区  · 8 年前

    我有这种情况。我正在建立一个wordpress网站来销售一些产品。问题是,产品的价格是作为元值存储的,但产品的价格可以是不同的货币。现在的问题是,我必须对所有产品进行价格筛选,不管价格是哪种货币,筛选货币是在后台配置的,没有该货币价格的产品必须按货币兑换税进行筛选,但我真的不知道如何构建一个元查询,如果我能按货币等价价格过滤的话。

    例如,我有两种产品:

    产品1 -价格:10 -货币:美元

    产品2 -价格:1000 -货币:XXX

    过滤器设置为使用 美元 找到0到10之间的价格。所以这次搜索将返回 产品1 ,但是 XXX公司 美元 是500比1 产品2 等价价格为 2美元 它必须包含在搜索结果中。

    到目前为止,这是我处理价格过滤器的代码的一部分:

    if (
        isset($_REQUEST['max_price']) && $_REQUEST['max_price'] &&
        isset($_REQUEST['min_price']) && ($_REQUEST['min_price'] || $_REQUEST['min_price'] == 0)
    ) {
        $main_currency = cs_get_option('main_currency');
        $ex_currency = array_diff(['xxx', 'usd'], [$main_currency])[1];
    
        $args['meta_query'] [] =
            array(
                'relation' => 'AND',
                array(
                    'key' => 'price_meta_key',
                    'value' => array($_REQUEST['min_price'], $_REQUEST['max_price']),
                    'type' => 'numeric',
                    'compare' => 'BETWEEN',
                ),
                array(
                    'key' => 'product_currency',
                    'value' => $main_currency,
                    'compare' => '='
                )
            );
    }
    

    但这只会过滤含有 美元主要货币 货币。

    1 回复  |  直到 8 年前
        1
  •  1
  •   jspcal    8 年前

    您可以建立符合多种货币的查询:

    // Define currencies and exchange rates
    
    $currencies = array(
        'usd' => 1,
        'eur' => 0.86
    );
    
    // Generate a term for each currency
    
    $terms = array();
    
    foreach ($currencies as $currency => $rate) {
        // Match the currency code and the converted price range
    
        $terms[] = array(
            'relation' => 'AND',
    
            array(
                'key' => 'product_currency',
                'value' => $currency
                'compare' => '='
            ),
    
            array(
                'key' => 'price_meta_key',
                'value' => array(
                    $_REQUEST['min_price'] * $rate,
                    $_REQUEST['max_price'] * $rate
                ),
                'type' => 'numeric',
                'compare' => 'BETWEEN'
            )
        );
    }
    
    // Finally OR the terms together
    
    $args['meta_query'][] = array(
        'relation' => 'OR',
        $terms
    );