Szia!
Lehet olyan megoldás, hogy felveszel egy új select -et a városok kiválasztásához a checkout -oldalra. Igazából van egy csomó kész filtere (függvénye) a woocommerce-nek, azokat kell kell használni.
Azt így tudod:
<br />
/**<br />
* [Add] -> Varos select<br />
*<br />
*/<br />
<br />
add_action( 'woocommerce_after_order_notes', 'sz_varos_select_field' );<br />
<br />
function sz_varos_select_field( $checkout ) {<br />
<br />
echo '<div id="sz_input_filed"><h2>' . __('Város kiszállítási cím') . '</h2>';<br />
<br />
woocommerce_form_field( 'sz_varos', array(<br />
'type' => 'select',<br />
'required' => true,<br />
'options' => array(<br />
'' => 'Válasszon!',<br />
'martely' => 'Mártély',<br />
'miskolc' => 'Miskolc'),<br />
'class' => array('sz_varos-class form-row-wide'),<br />
'label' => __('Hová szállítsuk? <span style="color: red;font-weight: bold">(Kötelező)</span>'),<br />
), $checkout->get_value( 'sz_varos'));<br />
<br />
echo '</div>';<br />
}<br />
```<br />
Most a példában Mártély meg Miskolc van, de az array-ben tudsz még hozzáadni. Eddig ez semmit nem csinál, csak megjelenik egy select ami kötelező kitölteni, azaz választani.<br />
<br />
Ezután a woocommerce hibát hozzá kell kapcsolni, hogy ha nem választanak várost, és elküldenék a megerendelést, akkor a hibaüzenetben jelenjen meg, hogy nem lett ez kiválasztva, így:<br />
/**
* [Process checkout] -> post tömb->sz_varos
*/
add_action('woocommerce_checkout_process', 'sz_varos_checkout_field_process');
function sz_varos_checkout_field_process() {
global $woocommerce;
// Check if set, if its not set add an error.
if ( !$_POST){
wc_add_notice( __( '
Nem lett szállítási város kiválasztva!' ), 'error' );
}
}
Ezzel már fel van véve az, hogy error-ban jelenjen meg. A felhasználó kap visszajelzést. <br />
<br />
De ezzel nem jelenik meg a város sehol (pl.: megrendelés leadása után betöltődik egy összefoglaló oldal. Annak, aki rendelet. Ebben nem jelenik meg a kiválasztott város. Ahhoz, hogy megjelenjen kell egy meta is hozzá)<br />
<br />
Ezt a meta regisztrációt így lehet felvinni (hogy bekerüljön az adatbázisba!):<br />
/**
* [sz_varos meta regisztrálás] -> metába kerül!
**/
add_filter('woocommerce_email_order_meta_keys', 'sz_varos_checkout_field_order_meta_keys');
function sz_varos_checkout_field_order_meta_keys( $keys ) {
$keys[] = 'sz_varos_meta';
return $keys;
}
Ezzel létre lett hozva a meta, abba bekerül a kiválasztott város. Ezt meg kell jeleníteni több helyen is. Ilyen a megrendelés leadása utána összefoglaló oldal:<br />
/**
* [Add] vásárálás után visszaigazoló (order-received) oldalra
**/
add_action( 'woocommerce_order_details_after_order_table', 'sz_varos_custom_field_display_cust_order_meta', 10, 1 );
function sz_varos_custom_field_display_cust_order_meta($order){
$sz_varos_cim=get_post_meta( $order->id, 'sz_varos_meta', true );
if( ! empty( $sz_varos_cim) ) {
echo '
'.__('Kiszállítási város:').'
' . $sz_varos_cim . '';
}
}
De még mindig nem vagyunk készen, mert ha te (webshop üzemeltető, az admin) a woocommerce orders oldalon is látni akarod, melyik várost választotta a megrendelő, akkor oda is be kell tenni a várost (részletek nézetben a leadott megrendelésben), + updatélni kell a létrehozott metát (ahol tárolódik a város) + megrendelési oldalon ezt meg kell jeleníteni:<br />
/**
* [Update] sz_varos
*/
add_action( 'woocommerce_checkout_update_order_meta', 'sz_varos_checkout_field_update_order_meta' );
function sz_varos_checkout_field_update_order_meta( $order_id ) {
if ( ! empty( $_POST ) ) {
update_post_meta( $order_id, 'sz_varos_meta', sanitize_text_field( $_POST ) );
}
}
/**
* [Edit Order] page -> megjelenítjük a megerdenlési oldalon a sz_varos_meta-t (de a )
*/
add_action( 'woocommerce_admin_order_data_after_billing_address', 'sz_varos_checkout_field_display_admin_order_meta', 10, 1 );
function sz_varos_checkout_field_display_admin_order_meta($order){
echo '
'.__('Szállítási város:').' ' . get_post_meta( $order->id, 'sz_varos_meta', true ) . '
';
}
Az egész kód így néz egyben: <a href="http://pastebin.com/9pH0nh0G">http://pastebin.com/9pH0nh0G</a><br />
<br />
A sablonod functions.php-jába kell tenni.<br />
<br />
Egy bővítmény írásánál pont ezek jöttek elő. A kódot kipróbáltam localhost-on működik. Tesztelni kell, meg nem tudom mindent összefoglaltam-e. <br />
<br />
Doksi a függvényekhez: <a href="http://docs.woothemes.com/documentation/plugins/woocommerce/%C2%A0">http://docs.woothemes.com/documentation/plugins/woocommerce/ </a><br />
<br />
<br />
Ü: András