【问题标题】:Hide enquiry button when product is on stock产品有货时隐藏询价按钮
【发布时间】:2023-01-11 05:09:55
【问题描述】:

如何根据产品的库存状态隐藏特定按钮?

该插件正在创建此类:


    function wdm_pefree_init() {
    // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionNameInvalid
    if ( ! class_exists( 'Product_Enquiry_For_Woocommerce', false ) ) {
        include_once WDM_PE_PLUGIN_PATH . '/includes/class-product-enquiry-for-woocommerce.php';
    }
    Product_Enquiry_For_Woocommerce::instance();
    }

我只想在每个延期交货产品的单个产品页面上显示此按钮,但我无法让我的代码正常工作。

我对 PHP 不是很好,所以我试图调整我的 functions.php 文件中的一些其他代码,但没有任何运气。

任何帮助都会很棒,谢谢!

我试过这段代码:

    add_filter('woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2);
    function wcs_custom_get_availability($availability, $_product) {
    // Remove Enquiry Button
      if (!$_product->is_in_stock()) {
          remove_action('Product_Enquiry_For_Woocommerce');
      }
      return $availability;
    }

我还看到按钮的 css 类是 .pe-show-enq-modal,但我无法执行仅适用于延期交货产品的条件“可见性:隐藏”。

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce


    【解决方案1】:

    你要找的是这个:

    add_action( 'woocommerce_single_product_summary', 'remove_enquiry_button_if_out_of_stock', 30 );
    function remove_enquiry_button_if_out_of_stock() {
        global $product;
        if ( ! $product->is_in_stock() ) {
            remove_action( 'woocommerce_single_product_summary', array( Product_Enquiry_For_Woocommerce::instance(), 'enquiry_button' ), 25 );
        }
    }
    

    或者通过 CSS :

    .product.out-of-stock .pe-show-enq-modal {
        display: none;
    }
    

    【讨论】:

    • 谢谢,但不幸的是它似乎不起作用 :( 我让它工作的唯一方法是使用 JS。
    【解决方案2】:

    在函数 wcs_custom_get_availability() 中,您尝试使用 remove_action('Product_Enquiry_For_Woocommerce');,但这不会起作用,因为 remove_action() 函数需要两个参数:动作挂钩的名称和应删除的回调函数。

    您应该首先检查产品是否有库存,并根据该条件有条件地向按钮添加类,并使用 css 隐藏或显示它。

    您可以在下面使用此代码:

        add_filter('woocommerce_get_availability', 'wcs_custom_get_availability', 1, 2);
    function wcs_custom_get_availability($availability, $_product) {
        // check if product is out of stock
        if (!$_product->is_in_stock()) {
            $availability['class'] = 'out-of-stock';
        }
        return $availability;
    }
    

    在你的CSS中你可以添加

    .pe-show-enq-modal.out-of-stock {
        display: none;
    }
    

    这将添加一类“缺货”到

    如果产品缺货,则包含可用性信息的元素,然后您可以使用它通过 CSS 隐藏查询按钮。

    另一种方法是使用 jquery 检查类并在该类存在时隐藏按钮:

     jQuery(document).ready(function($) {
      if ($('.pe-show-enq-modal').hasClass('out-of-stock')) {
        $('.pe-show-enq-modal').hide();
      }
    });
    

    您还必须确保 css 和 js 仅包含在产品页面上。

    【讨论】:

    • 感谢您的解释,现在更有意义了!不幸的是它似乎不起作用 :( 我让它工作的唯一方法是使用 JS。
    【解决方案3】:

    我得到这个(有点)工作的唯一方法是使用这个 JS:

    function remove_enquiry() {
    ?>
          <script type="text/javascript">
            (function($){
    
    $(document).ready(function(){
       if($(".in-stock").length)
                $(".pe-show-enq-modal").hide();
    });
    })(jQuery);
          </script>
      <?php
    }
    add_action('wp_head', 'remove_enquiry');
    

    你可以在这里看到它:https://lavaredamusicshop.pt/produto/teclados-e-pianos/teclados/teclado-casio-ct-x700/

    但是如果你注意到,它会延迟执行 JS,因为当页面加载时,按钮仍会显示一小会儿(否则它似乎工作正常)。

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 1970-01-01
      • 2021-06-13
      • 2014-08-20
      • 2020-03-08
      • 2021-11-20
      • 2019-12-19
      • 1970-01-01
      • 2018-04-23
      相关资源
      最近更新 更多