首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于可用变体的WordPress WooCommerce get_sign_up_fee

基于可用变体的WordPress WooCommerce get_sign_up_fee
EN

Stack Overflow用户
提问于 2021-07-09 05:30:23
回答 1查看 291关注 0票数 3

我正在使用一些自定义逻辑来显示或隐藏变量产品中的变化,使用这个钩子woocommerce_get_children https://stackoverflow.com/a/67804835/6829420及其按照我的预期工作得很好。

然而,我有错误的‘注册费’在可变产品页面,因为它不断从我的一个隐藏的变化值。下面是我的尝试和我迄今所做的工作。

代码语言:javascript
复制
add_filter( 'woocommerce_subscriptions_product_price_string', 'subscr_product_price_string', 10, 3 );
function subscr_product_price_string( $subscription_string, $product, $include ){
        
    if (is_admin() || (! $product->is_type( 'variable-subscription' ))) return $subscription_string;


    if ( $include['sign_up_fee'] && $product->get_sign_up_fee( $product ) > 0 ) {
    
         $available_variations = $product->get_available_variations();
        echo count($available_variations);
    
        echo $product->get_sign_up_fee();
            exit;
        //echo $prices    = get_price_sign_up_fee($product);
        exit;
}

例如,我有三个变体“蓝色,黄色和绿色”,我有隐藏的“蓝色”,并转到变体产品页面。

如果我这么做,

代码语言:javascript
复制
$available_variations = $product->get_available_variations();
echo count($available_variations);

然后它显示了2,但我的echo $product->get_sign_up_fee();一直从"Blue“中获得值,后者的值最低,但这是错误的值。

有人能指导我如何获得注册的价值,根据我的现有变体只。

我已经从值中更新了默认的值,使用了下面的代码,并使用了woocommerce_variable_price_html钩子,并根据可用的变体获得了它的值。

代码语言:javascript
复制
function updateFromDefaultValue($price, $product) {
    $prefix = sprintf('%s: ', __('From', 'iconic'));
    $min_price_regular = $product->get_variation_regular_price('min', true);
    $min_price_sale    = $product->get_variation_sale_price('min', true);
    $max_price = $product->get_variation_price('max', true);
    $min_price = $product->get_variation_price('min', true);
    $price = ($min_price_sale == $min_price_regular) ?
        wc_price($min_price_regular) :
        '<del>' . wc_price($min_price_regular) . '</del>' . '<ins>' . wc_price($min_price_sale) . '</ins>';

    return ($min_price == $max_price) ?
        $price :
        sprintf('%s%s', $prefix, $price);
}

add_filter('woocommerce_variable_price_html', 'updateFromDefaultValue', 10, 2);

谢谢

更新

我找到了一个钩子woocommerce_subscriptions_product_price_string_inclusions,通过它我可以根据“可用订阅”获得一个更新的sign_up_fee值。下面是我的密码。

代码语言:javascript
复制
add_filter('woocommerce_subscriptions_product_price_string_inclusions', 'updateSubscriptionPeriod', 10, 2);

function updateSubscriptionPeriod( $include, $product ) {
    
    
    if (is_admin() || (! $product->is_type( 'variable-subscription' ))) return $include;


    $min_max_variation_data = $product->get_min_and_max_variation_data( array_keys( $prices ) );

    if(empty($min_max_variation_data) || empty($min_max_variation_data['subscription'])) return $include;
    
    
    
    $include['sign_up_fee'] = $min_max_variation_data['subscription']['signup-fee'];
    $include['trial_length'] = 5; 
    $include['subscription_period'] = 50; 
    $include['subscription_length'] = $min_max_variation_data['subscription']['interval']; 
    $include['subscription_price'] = $min_max_variation_data['max']['price'];    
     
     
    return $include;
}

现在我可以得到价值20,请看下面的截图。

但是,正如您可以看到我的截图中的不同之处,我仍然没有得到更新的值,正如应该说的,every 3 years with a 2-week free trial avery 4 years with a 2-month free trial,因为这是我从可用的变体中得到的值。

您还可以看到,我正在尝试放置一些静态值,以及像这样的动态值。

代码语言:javascript
复制
  $include['trial_length'] = 5; 
    $include['subscription_period'] = 50; 
    $include['subscription_length'] = $min_max_variation_data['subscription']['interval']; 
    $include['subscription_price'] = $min_max_variation_data['max']['price'];    

但我的产品页面没有更新。

有人能指点我吗?我怎样才能更新这些适当的价值观。

提前谢谢。

更新2

我搜索了一下,找到了woocommerce_subscriptions_product_price_string钩子,这是我的尝试。

代码语言:javascript
复制
add_filter( 'woocommerce_subscriptions_product_price_string', 'subscriptions_custom_price_string', 20, 3 );
function subscriptions_custom_price_string( $price_string, $product, $args ) {

    
    // Get the trial length to check if it's enabled
    $trial_length = $args['trial_length'];
    
    $speriod = $args['subscription_period'];
    
    $sfee = $args['sign_up_fee'];
    $sfee = wc_price($sfee);
    $sign_up_fee = isset($args['sign_up_fee']) ? __(" and a $sfee sign-up fee", "woocommerce") : '';
    if( $trial_length > 0 )
        $price_string = $args['price'] . ' / ' . $speriod . $sign_up_fee;

    return $price_string;
}

下面是这样的画面。

所以现在基本上它的更新,但它不正确,因为我失去了一个格式和其他一些重要的价值。

有人能指导我如何正确地覆盖这个过滤器吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-07-17 09:49:34

woocommerce_variable_subscription_price_html是您应该使用的正确钩子,下面是一个可能对您有用的示例:

代码语言:javascript
复制
add_filter( 'woocommerce_variable_subscription_price_html', 'variable_subscription_custom_price_html', 10, 2 );
function variable_subscription_custom_price_html( $price, $product ) {
    // Unhook to avoid infinite loop.
    remove_filter( 'woocommerce_variable_subscription_price_html', __FUNCTION__, 10, 2 );

    // List of product IDs for variations you're hiding.
    $hidden_products = array( 4171 );

    // Check if the product has any variations that you manually hid.
    $hidden = array_intersect( $hidden_products, get_children( array(
        'post_parent' => $product->get_id(),
        'post_type'   => 'product_variation',
        'fields'      => 'ids',
    ) ) );

    if ( ! empty( $hidden ) ) {
        $prices = $product->get_variation_prices( true )['price'];
        asort( $prices ); // sort from lowest to highest price

        $variation = wc_get_product( array_keys( $prices )[0] );

        // It's a variation, so we manually add the 'From: text'.
        $price = 'From: ' . $variation->get_price_html();
    }

    // Re-hook this function.
    add_filter( 'woocommerce_variable_subscription_price_html', __FUNCTION__, 10, 2 );

    return $price;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68311716

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档