Support » Plugin: Woo Shipping for Nova Poshta » Порядок полей

  • Resolved Nazar Hotsa

    (@bugnumber9)


    Добрый день.

    Большое спасибо за отличный плагин!

    Как можно поменять порядок полей на странице чекаута?
    Сейчас поля НП появляются перед данными клиента (имя, фамилия и пр.) а хотелось-бы так, как и обычные поля shipping-данных при других способах доставки.
    Подскажите, плиз, куда смотреть в коде чтобы руками поправить?

Viewing 2 replies - 1 through 2 (of 2 total)
  • Nazar Hotsa

    (@bugnumber9)

    Разобрался. Если кому надо – смотрим в /woo-shipping-for-nova-poshta/classes/Checkout.php функцию addNovaPoshtaFields. Добавляем приоритет для каждого поля:

        private function addNovaPoshtaFields($fields, $location)
        {
            $factory = AreaRepositoryFactory::instance();
            $area = $this->customer->getMetadata('nova_poshta_region', $location);
            $city = $this->customer->getMetadata('nova_poshta_city', $location);
            $required = NP()->isGet() ?: (NP()->isNP() && NP()->isCheckout());
            $fields[Region::key($location)] = [
                'label' => __('Region', NOVA_POSHTA_DOMAIN),
                'type' => 'select',
                'required' => $required,
                'default' => '',
                'options' => OptionsHelper::getList($factory->regionRepo()->findAll()),
                'class' => array(),
                'custom_attributes' => array(),
                'priority' => 120,
            ];
            $fields[City::key($location)] = [
                'label' => __('City', NOVA_POSHTA_DOMAIN),
                'type' => 'select',
                'required' => $required,
                'options' => OptionsHelper::getList($factory->cityRepo()->findByParentRefAndNameSuggestion($area)),
                'class' => array(),
                'value' => '',
                'custom_attributes' => array(),
                'priority' => 130,
            ];
            $fields[Warehouse::key($location)] = [
                'label' => __('Nova Poshta Warehouse (#)', NOVA_POSHTA_DOMAIN),
                'type' => 'select',
                'required' => $required,
                'options' => OptionsHelper::getList($factory->warehouseRepo()->findByParentRefAndNameSuggestion($city)),
                'class' => array(),
                'value' => '',
                'custom_attributes' => array(),
                'priority' => 140,
            ];
            return $fields;
        }
    

    Вуаля 🙂

    Nazar Hotsa

    (@bugnumber9)

    Ну и “культурный” вариант, не требующий модификации кода плагина. Добавить в functions.php активной темы.

    function custom_ordered_checkout_billing_fields( $fields ) {
    	$order = array(
    		'billing_first_name',
    		'billing_last_name',
    		'billing_address_1',
    		'billing_city',
    		'billing_postcode',
    		'billing_phone',
    		'billing_email',
    		'billing_nova_poshta_region',
    		'billing_nova_poshta_city',
    		'billing_nova_poshta_warehouse',
    	);
    
    	foreach($order as $field) {
    		$ordered_fields[$field] = $fields["billing"][$field];
    	}
    
    	$fields['billing'] = $ordered_fields;
    
    	$fields['billing']['billing_first_name']['priority'] = 10;
    	$fields['billing']['billing_last_name']['priority'] = 20;
    	$fields['billing']['billing_address_1']['priority'] = 30;
    	$fields['billing']['billing_city']['priority'] = 40;
    	$fields['billing']['billing_postcode']['priority'] = 50;
    	$fields['billing']['billing_phone']['priority'] = 60;
    	$fields['billing']['billing_email']['priority'] = 70;
    	$fields['billing']['billing_nova_poshta_region']['priority'] = 80;
    	$fields['billing']['billing_nova_poshta_city']['priority'] = 90;
    	$fields['billing']['billing_nova_poshta_warehouse']['priority'] = 100;
    
    	return $fields;
    }
    add_filter( 'woocommerce_checkout_fields', 'custom_ordered_checkout_billing_fields' );
    

    Конечно, это дело можно (и даже нужно) оптимизировать, но тупо лень 🙂 Оставляю задачу по оптимизации желающим 😉

Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘Порядок полей’ is closed to new replies.