不需要公司名称 WooCommerce(第 3 方插件)

2024-01-11

我想让 WooCommerce 中不需要计费公司和运输公司。由于某种原因,我使用的代码适用于除公司部分之外的所有内容。事实证明,第三方插件需要公司名称,以下是该插件的完整代码:

<?php
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}


require_once('legacy_pakkelabels_shipping_main.php');

/**
 * @class 		Pakkelabels_Shipping_GLS_Business_Legacy
 * @version		0.1.0
 * @author 		Magnus Vejlø - Pakkelabels
 */
class Legacy_Pakkelabels_Shipping_GLS_Business extends Legacy_Pakkelabels_Shipping_Main
{

    public function __construct($instance_id = 0)
    {
        $this->id = 'legacy_pakkelabels_shipping_gls_business';
        $this->instance_id = absint($instance_id);
        $this->method_title = __('GLS Business ', 'woocommerce-pakkelabels');
        $this->method_description = __('Adds the option to ship with the GLS business to the checkout', 'woocommerce-pakkelabels');
        $this->init();
    }


    /* add the diffrent actions */
    function addActions()
    {
        //adds the shipping method to the WooCommerce
        add_filter('woocommerce_shipping_methods', array($this, 'register_shipping_method'));

        add_action('woocommerce_after_shipping_rate', array($this, 'pakkelabels_shipping_gls_business_show_below_shipping'));

        add_action('woocommerce_checkout_process', array($this, 'pakkelabels_shipping_gls_business_field_process'));
    }


    function addFilters()
    {

    }


    function pakkelabels_shipping_gls_business_field_process() {

        global $woocommerce;
        $choosen_shipping_method1 = preg_replace('/\d/', '', $woocommerce->session->chosen_shipping_methods[0] );
        $choosen_shipping_method2 = preg_replace('/\d/', '', $woocommerce->session->chosen_shipping_methods );
        if((isset($_POST['ship_to_different_address']) &&  ($_POST['shipping_company'] == '' || !isset($_POST['shipping_company']))) && ($choosen_shipping_method1 == "legacy_pakkelabels_shipping_gls_business" || $choosen_shipping_method2 == "legacy_pakkelabels_shipping_gls_business")){
            if ( version_compare( $woocommerce->version, '2.1', '<' ) ) {
                $woocommerce->add_error(__('Please fill out the Shipping company', 'woocommerce-pakkelabels'));
            } else {
                wc_add_notice( __('Please fill out the Shipping company', 'woocommerce-pakkelabels') , 'error');
            }
        }
        if((!isset($_POST['ship_to_different_address']) && ($_POST['billing_company'] == '' || !isset($_POST['billing_company']))) && ($choosen_shipping_method1 == "legacy_pakkelabels_shipping_gls_business" || $choosen_shipping_method2 == "legacy_pakkelabels_shipping_gls_business")){
            if ( version_compare( $woocommerce->version, '2.1', '<' ) ) {
                $woocommerce->add_error(__('Please fill out the billing company', 'woocommerce-pakkelabels'));
            } else {
                wc_add_notice( __('Please fill out the billing company', 'woocommerce-pakkelabels') , 'error');
            }
        }
    }




    function pakkelabels_shipping_gls_business_show_below_shipping($rate){
        global $woocommerce;

        global $woocommerce;
        $choosen_shipping_method1 = preg_replace('/\d/', '', $woocommerce->session->chosen_shipping_methods[0] );
        $choosen_shipping_method2 = preg_replace('/\d/', '', $woocommerce->session->chosen_shipping_methods );
        if($choosen_shipping_method1 == "legacy_pakkelabels_shipping_gls_business" || $choosen_shipping_method2 == "legacy_pakkelabels_shipping_gls_business"){
            if($rate->method_id == 'legacy_pakkelabels_shipping_gls_business'){
                echo '<div class="gls_shipping_method_text shipping_company_required">'  . __('The company name is required.', 'woocommerce-pakkelabels').'</div>';
            }
        }
    }


    /* Register the shipping method in WooCommerce*/
    function register_shipping_method($methods)
    {
        $methods['legacy_pakkelabels_shipping_gls_business'] = 'Legacy_Pakkelabels_Shipping_GLS_Business';
        return $methods;
    }
}


$pakkelabels_GLS_Business_Legacy = new Legacy_Pakkelabels_Shipping_GLS_Business();
$pakkelabels_GLS_Business_Legacy->mainAddActions();
$pakkelabels_GLS_Business_Legacy->addActions();
$pakkelabels_GLS_Business_Legacy->addFilters();

使用的插件是交付插件,由于我们要交付给公司,因此需要公司名称。然而,由于我们是一家 B2B 商店,我们已经注册了这些公司名称,我们不希望它们也不需要在结账时使用它们。因此,我们在 WooCommerce 中隐藏了公司名称字段,但无论我们编写什么代码,都无法使其不需要填写。


尝试使用过滤器 woocommerce_default_address_fields 代替。

function modify_woocommerce_default_address_fields( $fields ) {
    $fields['company']['required'] = false;

    return $fields;
}

add_filter( 'woocommerce_default_address_fields', 'modify_woocommerce_default_address_fields', 100, 1 );

它在文档 https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/必须通过此过滤器操作某些特定字段。

  • country
  • company
  • 地址1
  • 地址2
  • city
  • state
  • postcode

我们可以使用过滤器来删除通知,然后再将其添加到特定于该错误消息的数组中。

function modify_woocommerce_notices( $message ) {
    if( stripos( $message, 'Please fill out the billing company' ) !== false ) {
        return '';
    }
}

add_filter( 'woocommerce_add_error', 'modify_woocommerce_notices' );

我还没有测试过该代码,但这是如何抑制错误并阻止计费公司提供必填字段的总体思路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不需要公司名称 WooCommerce(第 3 方插件) 的相关文章

随机推荐