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

展示基于Woocommerce中特定运输类别的产品徽章

陈渊
2023-03-14

在WooCommerce中,我试图显示一个基于定义的运输类更新的运输徽章。

我遇到的问题是,当我有一个变量产品,变量有不同的类。我需要根据选择更新徽章。

例如,当一个可变产品有一个单一和纸箱选项,而单一有一个10类,纸箱有一个大块1类时,我需要在纸箱从选项中选择时更新徽章。

我不知道如何获得变体装运类别,而不是单一产品装运类别。

以下是我取得的成绩:

 function rod_shipping_banner() {

        if( $product->is_type( 'simple' ) ){
            $product = wc_get_product();

            $shipping_class = $product->get_shipping_class();

            switch ( $shipping_class ) {
                case '10':
                    echo '<div class="woocommerce-info"><a href="/shipping-policy/"target="_blank"><img src="/wp-content/uploads/2019/03/10-shipping-small.gif" alt="$10 Flat Rate"></a></div>';
                    break;

                case 'bulk1':
                    echo '<div class="woocommerce-info"><a href="/shipping-policy/"target="_blank"><img src="/wp-content/uploads/2019/03/Bulky1.gif"alt="Bulky class 1"></a></div>';
                    break;

                case 'bulk2':
                    echo '<div class="woocommerce-info"><a href="/shipping-policy/"target="_blank"><img src="wp-content/uploads/2019/03/Bulky_2.gif"alt="Bulky class 2"></a></div>';
                    break;
            }
        } elseif( $product->is_type( 'variable' ) ){

            $product = wc_get_product();
            $shipping_class = $product->get_shipping_class();
            switch ( $shipping_class ) {
                case '10':
                    echo '<div class="woocommerce-info"><a href="/shipping-policy/"target="_blank"><img src="/wp-content/uploads/2019/03/10-shipping-small.gif" alt="$10 Flat Rate"></a></div>';
                    break;

                case 'bulk1':
                    echo '<div class="woocommerce-info"><a href="/shipping-policy/"target="_blank"><img src="/wp-content/uploads/2019/03/Bulky1.gif"alt="Bulky class 1"></a></div>';
                    break;

                case 'bulk2':
                    echo '<div class="woocommerce-info"><a href="/shipping-policy/"target="_blank"><img src="wp-content/uploads/2019/03/Bulky_2.gif"alt="Bulky class 2"></a></div>';
                    break;
            }

        }

    }
    add_action( 'woocommerce_single_product_summary_price', 

共有1个答案

冀阳文
2023-03-14

你的代码中有一些错误和错误:

  • 钩子woocommerce_single_product_summary_price不存在;
  • 您需要添加全局$产品;以获取WC_Product对象为wc_get_product()isnull
  • 简单和可变产品没有区别,获取产品运输类。
  • 对于徽章,使用

你的问题也不是很容易理解和清楚。

以下重新访问的代码将有条件地显示特定定义的运输类别和产品标签以及简单产品的自定义徽章,而不是可变产品:

add_action( 'woocommerce_before_single_product_summary', 'additional_single_product_badges', 10 );
function additional_single_product_badges() {
    global $product;

    ##  ----  SHIPPING CLASSES  ----  ##

    // Define the related shipping classes data in this multidimensional array
    $shipping_class_badges_data = [
        '10'    => ['2019/03/10-shipping-small.gif' => '$10 Flat Rate'],
        'bulk1' => ['2019/03/Bulky1.gif'            => 'Bulky class 1'],
        'bulk2' => ['2019/03/Bulky2.gif'            => 'Bulky class 2'],
    ];

    if( $shipping_class = $product->get_shipping_class() ) {
        foreach( $shipping_class_badges_data as $key => $badge ) {
            if ( $shipping_class == $key ) {
                foreach( $badge as $img_src => $alt_text ) {
                    $html  = '<a href="'.home_url("/shipping-policy/").'" "target="_blank">';
                    $html .= '<img src="'.home_url("/wp-content/uploads/".$img_src).'" alt="'.$alt_text.'" />';
                    $html .= '</a>';
                }
                echo ' <span class="onsale shipping-badge">'.$html.'</span>';
                break;
            }
        }
    }


    ##  ----------  TAGS  ----------  ##

    // Define the related product tags data in this multidimensional array
    $product_tags_badges_data = [
        'amarock'  => ['2019/03/Asset-4.png' => 'Tag (test)'],
    ];

    // Get the product tag(s) set in the current product
    $product_tags_slugs = wp_get_post_terms( $product->get_id(), 'product_tag', ['fields' => 'slugs'] );

    if( sizeof($product_tags_slugs) > 0 ) {
        foreach( $product_tags_badges_data as $key => $badge ) {
            if ( in_array($key, $product_tags_slugs) ) {
                foreach( $badge as $img_src => $alt_text ) {
                    $html = '<img src="'.home_url("/wp-content/uploads/".$img_src).'" alt="'.$alt_text.'" />';;
                }
                echo ' <span class="onsale tag-badge">'.$html.'</span>';
            }
        }
    }
}

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

在这个可变产品屏幕截图上查看它的实际操作:

与您的评论相关,对于产品变体:

要使其适用于产品变体:
您可以在父变量product中设置默认装运类别。


对于javascript来说,这需要一些不同且相当复杂的东西,因为产品变体是在客户端(实时事件)上选择/更改的,所以PHP不能单独处理。

 类似资料:
  • 我在一家Woocommerce商店工作,该商店的产品按父类别(如品牌、颜色、大小等)组织。这些顶级类别中的每一个都有许多子类别:例如,颜色的子类别包括红色、蓝色、粉色等。 客户希望在首页和归档页的网格/循环视图中,在每个产品缩略图下方显示每个产品的品牌和尺寸(产品是鞋)。 每个产品只有一个品牌,但可能有多种尺寸。 因此,本质上,我需要知道是否有一种方法可以只显示单个产品的特定子类别的标题,如下所示

  • 我这里有一个场景。 在我设置的WooCommerce商店中,产品类别是父类别,而是它的子类别。这里的父类别名称布朗克斯是销售布朗克斯婴儿用品的城市。 另一个产品类别是父类别,是它的子类别。在这里,父类别名称Newark是销售“Newark婴儿用品”下产品的城市。 布朗克斯的一名顾客正试图购买纽瓦克婴儿用品类别的产品。 我正在尝试在WooCommerce中设置一个自定义运费,它可以根据客户的位置计算

  • 我想在我的woocommerce商店中为低于特定金额(价值,而不是数量)的订单添加费用。 我使用的"WooCommerce动态最小订单金额为基础的费用"回答代码,完美的作品。 现在我试图改变这个功能,并将其仅应用于特定产品类别的项目。基本上,我要把购物车中所有与特定类别相匹配的产品的价值求和,并使用这个价值进行费用计算。 我怎样才能达到这个目标?

  • 我目前正在使用以下代码获取WooCommerce产品类别: 当前显示所有类别,但我希望仅显示子类别。 例如,如果您在“类别1”页面上,则该页面应仅显示该类别中的所有子级。 我在这里看过很多例子,但都找不到适合我需要的东西。

  • 我正在制作我的第一个主题,感谢Loop和WooCommerce的SDK提供的所有帮助,一切都进展得非常快。然后今天我花了一整天的时间没能做像展示图片这样简单的事情。。。经过一整天的努力,我学到的唯一一件事是,WP似乎无法提供获取类别图像的手段,许多人已经问了这个问题很多年了,但我仍然找不到一种方法来真正做到这一点……:( 我想做的是在我的商店上方创建一个滑块,显示精选商店类别的图像。我希望能够输入