2012-09-27 4 views
5

Aggiungo campi extra alla pagina di pagamento in WooCommerce, Ho aggiunto campi di testo di base ok, ma voglio un menu a discesa o selezionare una casella con alcune opzioni, Ecco cosa ho fatto finora ma io Hai fatto un errore da qualche parteCome aggiungere un campo personalizzato di selezione alla pagina di checkout in WooCommerce?

$fields['billing']['billing_meat'] = array(
    'label'  => __('Food options', 'woocommerce'), 
'placeholder' => _x('', 'placeholder', 'woocommerce'), 
'required' => false, 
'clear'  => false 
'type' => 'select', 

'options' => array(     // array of key => value pairs for select options 
      __('I eat meat', 'woocommerce') => __('I eat mate', 'woocommerce'), 
      __('meat is gross', 'woocommerce') => __('meat is gross', 'woocommerce'), 

Forse non sto definendo il campo 'tipo' correttamente?

carichi grazie

risposta

8

Se questo è il codice esatto, allora il problema è che si sta perdendo una virgola dopo 'clear' => false.

Ho provato questo e funziona:

$fields['billing']['billing_meat'] = array(
    'label'  => __('Food options', 'woocommerce'), 
    'placeholder' => _x('', 'placeholder', 'woocommerce'), 
    'required' => false, 
    'clear'  => false, 
    'type'  => 'select', 
    'options'  => array(
     'eat-meat' => __('I eat maet', 'woocommerce'), 
     'not-meat' => __('Meat is gross', 'woocommerce') 
     ) 
    ); 

Nota che anche io non ho usato __() sui tasti array opzioni. È meglio non tradurli.

+0

grazie ha funzionato a meraviglia – stevie

5

funziona. ecco il mio codice

// Hook in 
add_filter('woocommerce_checkout_fields' , 'dropdown'); 

// Our hooked in function - $fields is passed via the filter! 
function dropdown($fields) { 
    $fields['billing']['dropdown'] = array(
     'label'  => __('dropdown', 'woocommerce'), 
    'placeholder' => _x('dropdown', 'placeholder', 'woocommerce'), 
    'required' => false, 
    'class'  => array('form-row-wide'), 
    'clear'  => true, 
    'type'  => 'select', 
    'options'  => array(
     'option 1' => __('option 1', 'woocommerce'), 
     'option 2' => __('option 2', 'woocommerce') 
     )//end of options 
    ); 

    return $fields; 
} 

questo funziona. ma sembra che il valore non venga salvato in _billing_dropdown. Ho usato il plugin "admin columns" per aggiungere un campo nella tabella degli ordini (lato admin). sotto il mio campo personalizzato "menu a discesa", non compare alcun valore. dove posso recuperare il valore? lo stesso vale per il mio altro "scopo" del campo personalizzato che si trova in "_billing_purpose" ed è type => 'textarea'. Grazie!

Ecco uno screenshot https://scontent-b-hkg.xx.fbcdn.net/hphotos-xpf1/v/t1.0-9/10696182_985415141473105_5302358697439449940_n.jpg?oh=74cb5ebc6b1ad6dd0c29e51293b61fdf&oe=5502613C

+0

So che questo è un vecchio thread, ma dal momento che non sembrava avere la risposta che stavate cercando, è necessario aggiornare il meta ordine con il valore di campo. Ecco come fare: /** * Aggiornare il meta ordine con il valore del campo */ add_action ('woocommerce_checkout_update_order_meta', 'dropdown_update_order_meta'); \t funzione dropdown_update_order_meta ($ order_id) { if (! Empty ($ _POST [ 'discesa'])) { \t update_post_meta ($ order_id, 'Come hai conosciuto', sanitize_text_field ($ _POST [ 'discesa'])); } } –