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

从Woocommerce可变产品下拉列表中排除产品,并更改价格

冯良才
2023-03-14

在WooCommerce中,基于“WooCommerce获取变体产品价格”回答代码,我一直在使用以下内容显示我的变量产品下拉列表中每个变体旁边的价格:

add_filter( 'woocommerce_variation_option_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;
}

它适用于所有产品,除了一个(我使用一个单独的插件作为礼品卡)。

是否可以排除一个特定的产品ID或一个产品类别,或仅适用于特定的产品类别?如果是,应向代码中添加哪些内容,以及在何处应用这些内容?

我还使用Woo折扣规则插件进行价格折扣,代码如下:

function woocs_fixed_raw_woocommerce_price_method($tmp_val, $product_data, $price){
    remove_filter('woocs_fixed_raw_woocommerce_price', 'woocs_fixed_raw_woocommerce_price_method', 10, 3);
    global $flycart_woo_discount_rules;
    if(!empty($flycart_woo_discount_rules)){
        global $product;
        if(empty($product)){
            $discount_price = $flycart_woo_discount_rules->pricingRules->getDiscountPriceOfProduct($product_data);
            if($discount_price !== null) $tmp_val = $discount_price;
        }
    }
    add_filter('woocs_fixed_raw_woocommerce_price', 'woocs_fixed_raw_woocommerce_price_method', 10, 3);

    return $tmp_val;
}
add_filter('woocs_fixed_raw_woocommerce_price', 'woocs_fixed_raw_woocommerce_price_method', 10, 3);

共有1个答案

寇桐
2023-03-14

更新(Woo折扣规则插件使用-见最后)

您的代码有点过时,因为WooCommerce 3:WooCommerce\u price()wc\u price()

在以下重新访问的代码中,您将能够排除一些产品ID:

// for woocommerce 3+
add_filter( 'woocommerce_variation_option_name', 'display_price_in_variation_option_name' );
function display_price_in_variation_option_name( $term_name ) {
    global $product, $wpdb;

    if( ! is_a($product, 'WC_Product') )
        return $term_name;

    // Excluding product IDs
    $excluded_product_ids = array(37, 53);
    if( in_array( $product->get_id(), $excluded_product_ids ) )
        return $term_name;

    if( $product->is_type('variable') && ! empty($term_name) ) {
        $term_slug = $wpdb->get_var("SELECT slug FROM {$wpdb->prefix}terms WHERE name = '$term_name'");

        $term_slug = empty($term_slug) ? sanitize_title( $term_name ) : $term_slug;

        $variation_id = (int) $wpdb->get_var( $wpdb->prepare("
            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 = '%s'
                AND products.post_parent = %d
        ", $term_slug, $product->get_id() ) );

        if( $variation_id > 0 ){
            $variation = wc_get_product( $variation_id );

            $term_name .= ' (' . strip_tags( wc_price( wc_get_price_to_display( $variation ) ) ) . ')';
        }
    }
    return $term_name;
}

代码进入函数。活动子主题(或活动主题)的php文件。测试和工作。

也许,要使其与Woo折扣规则插件配合使用,请尝试替换:

$term_name .= ' (' . strip_tags( wc_price( wc_get_price_to_display( $variation ) ) ) . ')';

作者:

$term_name .= ' (' . strip_tags( wc_price( $variation->get_price() ) ) . ')';
 类似资料:
  • 我有大约10个产品和接近200个变体每一个。我需要更新特定产品的销售价格,包括它的所有变化。 问题是: 所有的变种都有不同的价格。未输入销售价格-所有销售价格输入框均为空。 我需要一个SQL解决方案运行和更新所有特定产品的销售价格,采取常规价格并从中扣除350,或 任何其他方式,我不知道在这个阶段,因为我已经尝试了许多解决方案,包括Woocommerce内置的解决方案“设置销售价格”,再次不工作,

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

  • 我试图在变体下拉列表中显示产品变体价格。我试图改变默认的行为,当你在下拉列表中选择一个变量时,价格显示在div中。 问题是我找不到那个部门的变动价格。我搜索了所有的javascript,但找不到它 如果我使用: 我只得到所有选项的最小变化价格。我想知道每种变体的价格。有线索吗?

  • 我正在使用一个自定义产品,客户可以在其中键入他们的自定义文本,这些文本将添加到购物车中。根据文本的大小,将设置一个不同的价格,逻辑完成了,我可以在product对象中看到新的价格。 看起来我可以用新的价格更改product对象,但是当我执行$Woocommerce->setup_product_data($PRODUCT_ID)时,我从admin-ajax.php返回状态500。 我已经找到了几个

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

  • 我对每个包含不同价格的产品都有一些变化,我试图用jQuery获得产品的可变价格,我得到了,但是下面的代码只得到最小变化价格,我想得到当前变化的当前价格。然后,当我更改另一个选择值时,前端的变化会以正确的价格进行更改,但在控制台日志中,会反复显示最小价格,而不是相应变化的相应价格。 我试图研究和wp util。js文件来寻找一些方法,但我不能这样做。 有没有一种方法可以正确地检索当前变化价格与jQu