当前位置: 首页 > 知识库问答 >
问题:

Woocommerce在这两个变量上都显示了价格

严易安
2023-03-14

我正在为一位客户建一家商店。现在在产品页面上,有一个下拉列表,您可以选择“标准”或“快递”。

当客户选择此选项时,您可以从本产品中选择所需的金额。

现在我在stackoverflow(Woocommerce get variation product price)上找到了一段代码,可以直接在下拉列表中的金额之后显示正确的价格。这很好用。

但是现在,第一个金额变化(100欧元(22欧元))的价格也显示在交付下拉列表(2-3天(22欧元))中。我想从交付变量/下拉列表中删除价格。

add_filter( 'woocommerce_variation_opthtml" target="_blank">ion_name', 'display_price_in_variation_option_name' );

function display_price_in_variation_option_name( $term ) {
    global $wpdb, $product;

    $result = $wpdb->get_col( "SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term'" );

    $term_slug = ( !empty( $result ) ) ? $result[0] : $term;


    $query = "SELECT postmeta.post_id AS product_id
                FROM {$wpdb->prefix}postmeta AS postmeta
                    LEFT JOIN {$wpdb->prefix}posts AS products ON ( products.ID = postmeta.post_id )
                WHERE postmeta.meta_key LIKE 'attribute_%'
                    AND postmeta.meta_value = '$term_slug'
                    AND products.post_parent = $product->id";

    $variation_id = $wpdb->get_col( $query );

    $parent = wp_get_post_parent_id( $variation_id[0] );

    if ( $parent > 0 ) {
        $_product = new WC_Product_Variation( $variation_id[0] );
        return $term . ' (' . woocommerce_price( $_product->get_price() ) . ')';
    }
    return $term;

}

我试图更改$variation_id[0];到1,2,3,4和5,但没有成功,所以我认为必须有另一种方法来修复它。

提前thnx:)

共有1个答案

阎慈
2023-03-14

您需要做的是在display\u price\u in\u variation\u option\u name()函数中加入一些逻辑,以检查过滤器是否应应用于特定属性。这种情况下的一个大问题是,您在函数中唯一可以访问的是术语的名称,这不能保证是唯一的。例如,在“材质颜色”或“包装颜色”属性中都可以有一个称为“蓝色”的变体。我们需要准确地找出这个术语所属的属性,据我所知,唯一合理的方法是修改应用这个过滤器的模板,并传入一个额外的“分类法”参数,您可以在函数中检查它。

例如,在模板的第48行

/wp-content/plugins/woocommerce/templates/single-product/add-to-cart/variable.php

您将找到两个woocommerce_variation_option_name过滤器实例,一个在第48行,一个在第54行(从版本2.3.0开始)。您将看到这些当前传入一个参数。我们需要传入第二个参数,这是术语所属属性的名称。幸运的是,这个变量已经存在于作用域中,它被称为$name。因此,我们需要对模板进行两次修改。首先,我们应该添加第二个$name变量,如下所示:

apply_filters( 'woocommerce_variation_option_name', $term->name )

应该成为

apply_filters( 'woocommerce_variation_option_name', $term->name, $name )

您还需要更新过滤器以接受第二个参数。所以,在你的原始代码中,这个:

add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' )

应成为:

add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name', 10, 2 )

您还需要更新过滤器函数以接受第二个参数。因此:

function display_price_in_variation_option_name( $term ) {

应成为:

function display_price_in_variation_option_name( $term, $name = null ) {

现在您已经准备好添加逻辑检查,看看属性是否应该显示价格。因为您只表示您想隐藏它的运输属性,这就是我们将使用的。首先,您需要找到要取消的属性的全名。做到这一点的最快方法是进入WP管理员并转到产品-

function display_price_in_variation_option_name( $term, $name = null ) {

if($name == 'pa_shipping') {
  return $term;
}

global $wpdb, $product;

// the rest of your original code

我已经测试过了,它似乎运行得很好。我还可以描述一个JavaScript选项,但它不会那么健壮(尽管它不需要您更改模板文件)。

 类似资料:
  • 我正在使用Woocommerce和产品变体,我的所有变体都定义了默认变体。我想知道,我如何才能找到默认的变化和显示它的价格。 这是到目前为止我得到的代码,但它显示了最便宜的变体价格,我正在寻找我的默认变体产品价格。 } 我发现这里的代码示例显示默认的产品价格

  • 我在我的WooCommerce 2.6.4商店上使用可变产品,我为同一产品的两种不同变体添加了不同的价格。当选择两个变体中的一个时,根本不显示任何价格。下面的div只是空的: 我希望预选的变异价格显示为默认,而非预选的变异价格应在选择时动态替换。几乎像这个演示,除了从一个预选的项目和价格应该显示为默认。

  • 我正在创建一个WooCommerce商店,在那里我销售颜色/尺寸变化的产品。除此之外,我还使用WooCommerce产品附加组件,让用户输入一个将绣在他们产品上的名称。我整齐地输入所有的产品变化像这样: 在发布产品后,它没有显示任何价格。这怎么可能?产品如何在前端显示的屏幕截图: 我用于WooCommerce的插件和附加组件: WooCommerce产品插件 WooCommerce打印发票

  • 我的商店里的价格是带税显示的,我还使用{price_unclused_tax}后缀来显示不含税的价格。但可变产品存在一个问题。。。商店只显示含税价格(促销时显示原价),但不显示不含税价格。两种可变产品的价格相同。我尝试使用以下代码: https://tomjesch.com/display-woocommerce-products-with-and-without-tax/ 但它不能正常工作-它显

  • 我怎么把这两个结合起来?在网上找不到任何东西。

  • 我面临一些关于woocommerce可变产品的问题。每种产品我都有许多不同的变体(每种产品大约4-5个)。尽管我已经在变体设置中设置了它们,但在前端,当用户选择它时,它仍然会显示此消息:“对不起,没有与您选择的产品匹配的产品。请选择其他组合。” 是否是由于大量的组合导致变化相互冲突?或者是由于库存/重量限制设置,有人在他们的项目中经历过这种情况吗?