2016-06-09 9 views
1

Wir versuchen, das Standard Wooccommerce Checkout Shipping City Feld mit den dokumentierten Methoden auf docs.woothemes zu ändern, aber ein Problem aufgetreten sind.Woocommerce Überschreiben Versand Stadt Wählen Sie Feld

Wir haben das shipping_city Textfeld durch ein select Dropdown-Menü ersetzt.

Beim Laden der Seite wird das Dropdown-Menü select durch das Standard-Textfeld ersetzt und, falls verfügbar, mit dem vorherigen Lieferziel des Benutzers automatisch ausgefüllt.

Wenn die Seite neu geladen/aktualisiert wird, wird das Textfeld jedoch durch das neue und sehr erwünschte Dropdown-Menü select ersetzt.

Wir haben das Feld mit mehreren WordPress add_filter Funktionen gefiltert und priority sowohl nach oben als auch nach unten geändert (-999 bis 999).

Wir haben die filter sowohl innen laufen und außerhalb unserer Liefer-Methode Class

Wir haben sogar den Browser auto Form komplett deaktiviert, da wir ... na ja aus anderen Ideen liefen ...

Wenn das select Feld arbeiten ... es funktioniert gut. Die Versandkosten werden aktualisiert, Daten werden zurückgesendet, gespeichert und per E-Mail versandt.

Die filters verwendet werden:

add_filter('woocommerce_checkout_fields', array($this, 'fn_name'));

add_filter('woocommerce_default_address_fields', array($this, 'fn_name'));

und die $field Array wie folgt aussieht:

$fields[ 'shipping' ][ 'shipping_city' ] = array(
        'label' => __('Suburb/City', 'woocommerce'), 
        'required' => FALSE, 
        'clear' => TRUE, 
        'type' => 'select', 
        'options' => $options_array, 
        'class' => array('update_totals_on_change') 
       ); 

       return $fields; 

Merkwürdig ist, dass, wenn wir zwei Filter auf dem gleichen Feld lief; das Etikett des Sendonds wurde von der ersten überschrieben ... geh Figur ... Gee Ich wünschte ich wüsste Ajax ... ich denke sein Ajax aber wenn ich AJAX wüsste würde ich wissen, ob es Ajax war ...

WordPress Version 4.5.2 & & WooCommerce Version 2.5.5

Antwort

2

Dies sollte mit woocommerce_form_field_args Haken arbeiten, auf diese Weise:

add_filter('woocommerce_form_field_args', 'custom_form_field_args', 10, 3); 
function custom_form_field_args($args, $key, $value) { 
    if ($args['id'] == 'billing_city') { 
    $args = array(
      'label' => __('Suburb/City', 'woocommerce'), 
      'required' => FALSE, 
      'clear' => TRUE, 
      'type' => 'select', 
      'options' => $options_array, 
      'class' => array('update_totals_on_change') 
     ); 
    } // elseif … and go on 

    return $args; 
}; 

Dies sind er $args Parameterwerte Default:

$defaults = array(
    'type'    => 'text', 
    'label'    => '', 
    'description'  => '', 
    'placeholder'  => '', 
    'maxlength'   => false, 
    'required'   => false, 
    'autocomplete'  => false, 
    'id'    => $key, 
    'class'    => array(), 
    'label_class'  => array(), 
    'input_class'  => array(), 
    'return'   => false, 
    'options'   => array(), 
    'custom_attributes' => array(), 
    'validate'   => array(), 
    'default'   => '', 
); 

Referenzen:

+0

Dank @LoicTheAztec - Erste Tests sind vielversprechend ... Ajax ist eine hissy werfen, aber wir werden ein paar Variationen und sehen laufen, wenn wir das lösen können Problem. –