Questo post è più che altro per mia memoria. Visto che ogni volta che aggiorno un plug-in di WordPress.org mi perdo inevitabilmente tutte le customizzazioni: meglio che mi fisso da qualche parte i passi sperando di fare cosa gradita a qualcun’altro.

Devo modificare il plugin per il commercio elettronico MarketPress Lite di WPMU DEV.

Voglio aggiungere un campo obbligatorio nella maschera di raccolta dati per la spedizione (o fatturazione). In particolare voglio aggiungere il codice fiscale (o la partia iva), oggi obbligatorio per vendere e comprare on-line in Italia.

In genere è possibile agganciarsi ad alcune funzioni già previste nella classe MP_Shipping_API presente nel file wordpress-ecommerce\\marketpress-includes\\marketpress-shipping.php:  le funzioni sono extra_shipping_field($content)process_shipping_form().

Il fatto è che spesso queste funzioni sono già state estese da altri plugin (che possono essere anche molti). Avendo avuto qualche difficoltà nel manutenerle, ho deciso di affrontare la questione alla radice e modificare direttamente i due principali files di MarketPress.

wordpress-ecommerce\\template-functions.php
wordpress-ecommerce\\marketpress-includes\\marketpress.php

Una convenzione: in rosso il codice nuovo, in verde quello esistente . le modifiche sono banalissime, ma sono in vari punti del codice.

Iniziamo con il file wordpress-ecommerce\\template-functions.php

Nella

function _mp_cart_shipping($editable = false, $echo = false)

che serve per stampare il form del carrello della spesa, valorizziamo la variabile $codice_fiscale  (che viene creata e istanziata nell’altro file) pescando dal corrispondente valore della sessione se questa non è vuota. Individuiamo  il codice:

$special_instructions = (!empty($_SESSION['mp_shipping_info']['special_instructions'])) ? $_SESSION['mp_shipping_info']['special_instructions'] : '';

ed inseriamo subito dopo la seguente nuova riga:

$codice_fiscale = (!empty($_SESSION['mp_shipping_info']['codice_fiscale'])) ? $_SESSION['mp_shipping_info']['codice_fiscale'] : '';

(Una nota: MarketPress gestisce le “special instructions” solo dalla versione 2.5.1. Se non avete  le “special instructions” diventa comunque facile individuare il punto esatto dove inserire la riga aggiuntiva).

A questo punto aggiungiamo il campo di testo nella form in cui l’utente deve inserire il codice fiscale. Ipotizzando di metterlo dopo il campo Nome e Cognome (Full Name) della tabella _cart_shipping, individuiamo più sotto il seguente codice:

$content .= '<tr>';
$content .= '<td align="right">'. __('Full Name:', 'mp').'*</td><td>';
$content .= apply_filters( 'mp_checkout_error_name', '' );
$content .= '<input size="35" name="name" type="text" style="width: 100%;" value="'.esc_attr($name).'" /> </td>';
$content .= '</tr>';

ed aggiungiamo in coda:

$content .= '<tr>';
$content .= '<td align="right">'.__('Codice Fiscale o P.IVA:', 'mp').'*</td><td>';
$content .= apply_filters( 'mp_checkout_error_codice_fiscale', '' );
$content .= '<input size="11" name="codice_fiscale" type="text" style="width: 100%;" value="'.esc_textarea($codice_fiscale).'" /> </td>';
$content .= '</tr>';

Nella stessa funzione, più in basso, c’è il codice per visualizzare le labels con il riepilogo dei dati inseriti. Modifichiamo anche qui. Sempre nalla tabella mp_cart_shipping individuiamo il codice  relativo al Nome e Cognome dell’acquirente:

$content .= '<tr>';
$content .= '<td align="right">'.__('Full Name:', 'mp').'</td><td>';
$content .= esc_attr($name).'</td>';
$content .= '</tr>';

Aggiungiamo in coda:

$content .= '<tr>';
$content .= '<td align="right">'.__('Codice Fiscale o P.IVA:', 'mp').'</td>';
$content .= '<td>'.esc_attr($codice_fiscale).'</td>';
$content .= '</tr>';

Ultima modifica nella funzione mp_order_status(), che produce il report conclusivo dell’ordine effettuato. Anche in questo caso individuiamo la riga del Nome e Cognome nella tabella:

<tr>
<td align="right"><?php _e('Full Name:', 'mp'); ?></td><td>
<?php echo esc_attr($order->mp_shipping_info['name']); ?></td>
</tr>

Ed aggiungiamo in coda il codice:

<tr><td align="right"><?php _e('Codice Fiscale o P.IVA:', 'mp'); ?></td><td><?php echo esc_attr($order->mp_shipping_info['codice_fiscale']); ?></td></tr>

Passiamo ora a modificare l’altro file, in modo da provvedere anche a salvare tutte le informazioni raccolte:

wordpress-ecommerce\\marketpress-includes\\marketpress.php

Nella funzione install() aggiungiamo la nostra variabile codice_fiscale all’array $default_settings. Individuiamo la riga

'special_instructions' => 0,

ed aggiungiamo in coda:

'codice_fiscale' => 0,

Nella funzione update_cart()  aggiungiamo la funzione che controlla che controlla l’obbligatorietà del dato. Individuiamo la funzione che controlla l’obbligatorietà del Full Name:

if (empty($_POST[‘name’]))
$this->cart_checkout_error( __(‘Please enter your Full Name.’, ‘mp’), ‘name’);

ed aggiungiamo:

if (empty($_POST['codice_fiscale']))
$this->cart_checkout_error( __('Inserisci il CF o la P.IVA.', 'mp'), 'codice_fiscale');

Individuiamo poi successivamente il codice che salva nella sessione le informazioni:

$_SESSION['mp_shipping_info']['name'] = ($_POST['name']) ? trim(stripslashes($_POST['name'])) : (isset($meta['name']) ? $meta['name'] : $current_user->user_firstname . ' ' . $current_user->user_lastname);

ed aggiungiamo:

$_SESSION['mp_shipping_info']['codice_fiscale'] = trim(stripslashes($_POST['codice_fiscale']));

Come ultimo step possiamo aggiornare le mail che vengono inviate dal sistema all’acquirente. Nella funzione filter_email($order, $text) individuiamo:

$shipping_info = __('Full Name:', 'mp') . ' ' . $order->mp_shipping_info['name'];

ed aggiungiamo:

$shipping_info = __('Codice Fiscale o P.IVA:', 'mp') . ' ' . $order->mp_shipping_info['codice_fiscale'];

Poi aggiorniamo anche la pagina di dettaglio dell’ordine così come viene vista dall’amministratore. Nella funzione single_order_page() individuiamo il codice:

<tr>
<td align="right"><?php _e('Full Name:', 'mp'); ?></td><td>
<?php esc_attr_e($order->mp_shipping_info['name']); ?></td>
</tr>

ed aggiungiamo:

<tr><td align="right"><?php _e('Codice Fiscale o P.IVA:', 'mp'); ?></td><td>
<?php esc_attr_e($order->mp_shipping_info['codice_fiscale']); ?></td></tr>

Fatto. Contattatemi se volete i files completi…