WooCommerce - 隐藏特定的变体

时间:2017-08-18 12:10:52

标签: php wordpress woocommerce coupon variations

如何隐藏产品页面下拉列表中的变体,但是仍然可以通过WooCommerce URL优惠券购买?

如果我将变体设为非活动状态,则会从下拉列表中隐藏,但我收到消息"此产品无法购买"在购物车中。我只是想把它从列表中隐藏起来,而不是完全禁用它。

非常感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:3)

以下解决方案适用于我的主题,但您正在运行Bootstrap,因此您可能会遇到问题。

我们将使用option属性修改您想要隐藏的选项的hidden标记。获取以下代码并将其添加到主题的functions.php或自定义插件中:

自定义代码

function custom_woocommerce_dropdown_variation_attribute_options_html( $html, $args )
{
    $product = $args[ 'product' ];
    $attribute = $args[ 'attribute' ];
    $terms = wc_get_product_terms( $product->get_id(), $attribute, array( 'fields' => 'all' ) );
    $options = $args[ 'options' ];
    if ( empty( $options ) && !empty( $product ) && !empty( $attribute ) ) {
        $attributes = $product->get_variation_attributes();
        $options = $attributes[ $attribute ];
    }

    foreach ( $terms as $term ) {
        if ( in_array( $term->slug, $options ) && ***SOME CONDITION***) {
            $html = str_replace( '<option value="' . esc_attr( $term->slug ) . '" ', '<option hidden value="' . esc_attr( $term->slug ) . '" ', $html );
        }
    }
    return $html;
}
add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'custom_woocommerce_dropdown_variation_attribute_options_html', 10, 2 );

请注意,某些浏览器无法识别hidden属性。如果您想要完全跨浏览器兼容性,那么您需要查看How to hide a <option> in a <select> menu with CSS?处的答案。添加css属性style="display:none"也可能适用于某些浏览器。

高级自定义字段

现在,在上面的代码中,我写了***SOME CONDITION***。这种情况需要检查是否应该隐藏选项。要添加此信息,我们需要为该属性创建自定义字段。您可以手动执行此操作,但我使用高级自定义字段插件(ACF)执行此操作。

  1. Products-&gt; Attributes 中创建产品属性。勾选是启用存档?并使其键入“选择”。然后在配置字词下添加属性字词。edit product attribute product attribute terms
  2. Advanced Custom Fields安装到WordPress上。
  3. 创建新的字段组。
  4. 在字段组中创建规则显示此字段组 Taxonomy Term is equal to Product **your attribute**
  5. 在字段组中创建一个字段,其中字段标签 ='隐藏',字段类型 ='真/假',并根据需要设置其他设置。
  6. 发布/更新字段组。
  7. 返回您在步骤1中创建的要隐藏的字词。您应该有一个复选框,用于选择是否应隐藏该属性。勾选所有适用的内容。term hidden checkbox
  8. 使用由产品属性构成的变体创建变量产品。add attribute to product add variation
  9. 在自定义代码中,移除***SOME CONDITION***并将其替换为get_field( 'hidden', $term ) )。这是一个ACF函数,它将获取该属性的“隐藏”字段的值。
  10. 毕竟,您勾选为隐藏的字词不应出现在产品页面的下拉列表中。在我的示例中,您可以看到下拉列表中缺少绿色dropdown with hidden attribute

答案 1 :(得分:0)

//Please try adding following code to Functions.php file in Appearance > Editor

function custom_wc_ajax_variation_threshold( $qty, $product ) {
    return 10;
}

add_filter( 'woocommerce_ajax_variation_threshold', 'custom_wc_ajax_variation_threshold', 10, 2 );

//If that does not work, please create a temporary admin login and post it here privately.

答案 2 :(得分:0)

我在这里以及在一般情况下都在玩代码方面还很陌生,但是我在Customizer中使用了CSS来隐藏一个称为“学生:”的变体。

superclass

postid-403标识我的产品页面。这似乎正在工作。有什么理由不这样做吗?