【问题标题】:woocommerce: Display products with different price according to city selectionwoocommerce:根据城市选择显示不同价格的产品
【发布时间】:2014-08-07 19:10:12
【问题描述】:

当您单击并转到用户选择城市的商店页面时,我想添加一个弹出窗口。 选择城市后,我想以用户选择的城市的特定价格显示产品。 每个城市都有不同的价格。

【问题讨论】:

  • 如果没有为您自定义编码的东西,这是值得怀疑的,但我可以建议的最接近的方法是将每个城市作为一个类别,并为每个城市复制每个产品并以这种方式设置价格。

标签: php location woocommerce


【解决方案1】:

您想为每个城市的每件产品指定准确的价格,还是可以编写简单的规则以适用于基于城市的原始价格(例如,四舍五入到最接近的偶数降低 10%)?

如果你想为每个城市的每个产品指定价格,就是在所有产品上为所有城市制作元字段。 The guide that Dez linked to was nice so I'll reuse that here.

首先为指定城市的用户设置一个cookie。获取城市价值的方式有很多种,不知道你更喜欢哪种方式。

setcookie("city", $city, time() + 315360000);

然后使用此过滤器覆盖显示给用户的价格:

add_filter('woocommerce_get_sale_price', 'my_custom_price', 99, 2);
add_filter('woocommerce_get_price', 'my_custom_price', 99, 2);

function my_custom_price( $orginal_price, $product )
{
    //Get the cooke value
    $city = $_COOKIE["city"];

    //your logic for calculating the new price based on city here
    switch ($city) {
        case 'new_york':

            $new_price = round($orginal_price * 0.95); //Calculate the price (here 5% discount)
            break;

        default:
            $new_price = $orginal_price
            break;
    }

     //OR just: 
     $new_price = get_post_meta( $product->ID, 'wc_price_'.$city, true ); //Retrieve the price from meta value 

     //If no matching price is found, return original price
     if( ! empty( $new_price ) ) {
         return $orginal_price;
     } 

    //Return the new price (this is the price that will be used everywhere in the store)
    return $new_price;
}

但使用此解决方案时请注意缓存。这可能会引起一些麻烦。

【讨论】:

    【解决方案2】:

    这个具体的例子有很多代码要写,所以我会指出你可以做什么。

    选项 1

    1. 当用户选择一个城市时,使用该城市名称或 city_id 设置一个 cookie
    2. 为与城市名称或 city_id (Here's a guide) 匹配的产品创建自定义字段
    3. 如果用户的 cookie 中没有设置城市,则对用户隐藏价格
    4. 自定义templates/single-product/price.php 模板以显示映射到他们所在城市的价格
    5. 当他们将产品添加到购物车时,会覆盖产品的价格 (Here's a guide)

    选项 2

    1. 使用WooCommerce Dynamic Pricing
    2. 要求用户在将产品添加到购物车之前进行注册,并将城市作为注册字段
    3. 根据他们对城市的回答,将他们置于为动态定价定义的角色

    警告:我不确定动态定价选项是否适合您的需求,因为我认为它会根据用户角色在购物车中显示折扣,而不仅仅是调整价格项目。

    【讨论】:

    • 不!不需要时不要编辑模板文件。这也只适用于产品页面,而不适用于购物车、结帐、产品列表和小部件等。到处都有过滤器可以覆盖价格,而且简单易行!看我的回答。
    • 这就是为什么我让他们在添加到购物车时覆盖价格。是的,可能还有其他模板需要编辑以确保显示您需要的价格,但这是一个有效的解决方案。
    • 也许它可以解决问题,但它远非最佳解决方案,也远非最佳实践。您应该仅在需要时才覆盖模板作为最后的手段。通过覆盖模板,您使维护网站变得更加困难,因为更新 WooCommerce 时出现故障的风险要高得多。当您可以使用过滤器和几行代码来干净和简单地退出多个模板时,退出多个模板也需要做更多的工作。
    • 可能是这样,但您提出的解决方案对按直接百分比折扣价格的能力做出了假设。我的感觉是,它可能是一个旅游/旅游类型的网站,他们收取的价格将按城市协商,但仍然可以对“城市旅游”产品收费。
    • 因为我不知道他到底想要什么,所以我不得不做出假设。但是,函数逻辑可以用任何你想要的方式重写,它只是根据你可以收集的任何参数返回你想在站点上使用的私有,在这种情况下是一个 cookie 和一个产品对象。当然,根据这种情况下需要什么,逻辑可能会更好,但这是另一个问题。您必须在您的解决方案中添加相同的逻辑,但以更糟糕的方式,所以我真的不明白你的意思。
    猜你喜欢
    • 2017-05-04
    • 2017-01-04
    • 2018-07-17
    • 1970-01-01
    • 2017-11-24
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    相关资源
    最近更新 更多