I Campi informativi dello STORE venditore, come nome del negozio, telefono negozio, indirizzo ecc, possono essere modificati e aggiunti.
Aggiungere un Campo Personalizzato ai dati informativi STORE
GUIDA Dokan: https://wedevs.com/blog/108107/how-to-add-extra-field-on-vendor-settings-page/
CODICE DI ESEMPIO di Dokan: https://gist.github.com/nayemDevs/b629d4b1c27c794bdfb729ce6927069e
Aggiungere gli input dei nuovi campi nel Template di Modifica STORE
Possiamo aggiungere i nostri campi INPUT nel Form di Modifica dello store in vari punti del template tramite i do_action() messi a disposizione da dokan.
Ricordiamo che i do_action sono elementi disposti nelle pagine template che caricano materiale solitamente impostato nel proprio add_action().
Inserire Input del Custom field nella pagina di Edit Dello STORE
Nel Template modifica Store, abbiamo i seguenti do_action() dove poter inserire il nostro campo
che sono DENTRO IL FORM (perchè abbiamo bisogno di inserite Input letti dal form inviato)
- do_action( ‘dokan_settings_after_banner’, $current_user, $profile_info );
Appena tra il banner dello Store e le opzioni di caricamento dell’Avatar. - do_action( ‘dokan_settings_after_store_name’, $current_user, $profile_info );
Appare dopo il nome dello Store e l’opzione “Prodotti per pagina” - do_action( ‘dokan_settings_after_store_phone’, $current_user, $profile_info );
do_action( ‘dokan_settings_before_store_email’, $current_user, $profile_info );
Questi due action sono praticamente uno di seguito all’altro e si posizionano dopo il campo telefono e prima del campo checkbox di inserimento email - do_action( ‘dokan_settings_after_store_more_products’, $current_user, $profile_info );
do_action( ‘dokan_settings_before_store_map‘, $current_user, $profile_info );
Anche questi action sono uno di seguito all’altro e si posizionano tra le opzioni maggiori prodotti e la google map - do_action( ‘dokan_settings_form_bottom’, $current_user, $profile_info );
Questo è l’ultimo action nel form e sta dopo tutti gli altri field visualizzati di base. Anche se in questo action vengono richiamati altri custom field. Se si vuole inserire i field dopo il “programma orario” e prima di “Vai in ferie” impostare il numero del add_action(”,12) 12 o minore, se si vuole invece mettere infondo a tutto il resto usare un numero alto come 50.
Scegliere quello più adatto e inserire il codice html del nostro campo personalizzato.
<?php //ESEMPIO: CAMPO EMAIL dedicato allo store
add_action( 'dokan_settings_before_store_email', 'kaPl_Dokaplus_dokan_settings_before_store_email',12,2);
function kaPl_Dokaplus_dokan_settings_before_store_email($current_user, $profile_info){
//AGGIUNTA Input di modifica email al Edit STORE -> NAME:Field_Store_emailview
// Da far VISUALIZZARE IN: Template del tema -> per il file dokan /dokan-lite/templates/store-header.php
$Email_store_name = 'Field_Store_emailview';
$Value_Email = isset( $profile_info[$Email_store_name] ) ? $profile_info[$Email_store_name] : '';
echo '<div class="dokan-form-group kaPlDP_field-email">'
.'<label class="dokan-w3 dokan-control-label" for="'.$Email_store_name.'">'.__( 'Email Negozio visibile nella scheda Venditore', 'lang_ThOpt' ).'</label>'
.'<div class="dokan-w5 dokan-text-left">'
.'<input id="'.$Email_store_name.'" value="'.esc_attr($Value_Email).'" type="text"
name="'.$Email_store_name.'" placeholder="'.__( 'Inserisci L\'email qui', 'lang_ThOpt' ).'" class="dokan-form-control input-md" >'
.'</div>'
.'</div>';
} //END kaPl_Dokaplus_dokan_settings_before_store_email
IMPORTANTE! ricordare che il valore name=”” del input sarà quello che identifica il field, e sarà riutilizzato per richiamare il valore se già presente in database: infatti il filtro prevede la variabile $profile_info che richiama i dati dello store dal database.
In Alternativa si può modificare diretta il template del form di Edit Store caricato come template dokan:
/dokan-lite/templates/settings/store-form.php
Inserendo semplicemente html che avresti inserito nel do_action() nel template indicato qui sopra e nella posizione che si preferisce.
Salviamo il valore nel Database
Dokan salva i valori dello Store tramite la funzione public function insert_settings_info() in dokan-lite/includes/Dashboard/Templates/Settings.php . Questa funzione aggiunge un do_action() che permette di effettuare altre azioni nella stessa funzione. Questo do_action() si attiva DOPO il salvataggio update_user_meta().
$dokan_settings = apply_filters( 'dokan_store_profile_settings_args', $dokan_settings, $store_id );
update_user_meta( $store_id, 'dokan_profile_settings', $dokan_settings );
do_action( 'dokan_store_profile_saved', $store_id, $dokan_settings );Salvare nel DataBase – nelle opzioni Store
add_filter( ‘dokan_store_profile_settings_args’)
Dokan inserisce un filtro prima di inviare le opzioni dello store al database (come l’esempio del codice sopra). Possiamo quindi usare questo filtro per aggiungere nell’array di opzioni la nostra opzione creata nella pagina Edit Store. Come nell’esempio qui sotto, aggiungere al filtro e alla variabile $dokan_settings il nostro campo personalizzato.
Se vogliamo visualizzare come è fatta $dokan_settings, possiamo richiamare non in questo filtro ma dove appare input un var_dump( 'ListaVar_ ' < pre >',$profile_info,' < /pre >' ); Questo ti mosterà i valori che vengono spediti con $dokan_settings. Essenzialmente è un array semplice .
$dokan_settings = array(
['phone'] => 'valore inserito',
['address'] => 'valore inserito',
);I campi di $dokan_settings non sono sempre i campi name=”” degli input nella pagina:
questo perchè nella funzione originale del codice del plugin dokan lite ( public function insert_settings_info() ), questi valori vengono creati e gli viene inserito il valore salvato nel input. Quindi avremmo il valore ‘phone’, che per ha name ‘setting_phone’.
Ricordarsi che ID del campo personalizzato è lo stesso usato nel name=”” del input che abbiamo creato sopra.
<?php
add_filter( 'dokan_store_profile_settings_args', 'kaPl_Dokaplus_dokan_store_profile_settings_args',20,2);
function kaPl_Dokaplus_dokan_store_profile_settings_args($dokan_settings, $store_id ) {
//FIELD Creato in questo plugin (inserito solo in -> kaPl_Dokaplus_dokan_settings_before_store_email)
$dokan_settings['Field_Store_emailview'] = isset( $_POST['Field_Store_emailview'] ) ? sanitize_text_field( wp_unslash( $_POST['Field_Store_emailview'] ) ) : '';
return $dokan_settings;
}
?>PHPPuoi usare add_filter( ‘dokan_store_profile_settings_args’) anche per sanizzare i valori inviati e alterarli prima del salvataggio.
Salvare nel DataBase ma in un opzione a parte
add_action( ‘dokan_store_profile_saved’)
Usare questo filtro nel caso si voglia salvare il valore non tra le opzioni dello store ma in un’altra opzione.
Sempre nelle funzioni di salvataggio Dokan, abbiamo dentro la funzione un do_action che ci permette di aggiungere il nostro codice e quindi effettuare comandi di salvataggio di varia natura. Possiamo quindi salvare l’ozione in una differente dalle opzioni dello Store, o avere delle condizioni per cui se il valore inserito è uguale a una determinata parola, allora salvi tutt’altra opzione. Ci sono varie possibilità.
<?php
add_action( 'dokan_store_profile_saved', 'kaPl_Dokaplus_extra_fields_store_saveDB',20,2);
function kaPl_Dokaplus_extra_fields_store_saveDB($store_id, $dokan_settings ) {
if ( isset( $_POST['Field_Store_emailview'] ) ) {
update_user_meta( $store_id, '[MIA_OPZIONE]', $_POST['Field_Store_emailview'] );
}
if ( isset( $_POST['Field_Store_emailview'] ) && $_POST['Field_Store_emailview'] == 'valore_controllo' ) {
update_user_meta( $store_id, '[ALTRA_OPZIONE]', '[Valore aggiuntivo con condiione]' );
}
}
?>PHPDove visualizzare il Campo personalizzato
Adesso il valore personalizzato è modificabile dalla scheda Store e possiamo visualizzarlo dove vogliamo.
Richiamo semplice
$author = get_query_var('author');
if (empty($author)) {
global $post;
$authordata = get_userdata($post->post_author);
$author = $authordata->ID;
}
$store_user = dokan()->vendor->get($author);
//----------------------------
$storeDataInfo = $store_user->get_shop_info();
$Input_Email = esc_attr(antispambot($storeDataInfo['Field_Store_emailview']));
echo $Input_Email ;Mostrare il campo nella testata della scheda STORE
<?php
// show on the store page
add_action( 'dokan_store_header_info_fields', 'save_Field_Store_emailview', 10);
function save_Field_Store_emailview($store_user){
$store_info = dokan_get_store_info( $store_user);
?>
<?php if ( isset( $store_info['Field_Store_emailview'] ) && !empty( $store_info['Field_Store_emailview'] ) ) { ?>
<i class="fa fa-globe"></i>
<a href="<?php echo esc_html( $store_info['Field_Store_emailview'] ); ?>">
<?php echo esc_html( $store_info['Field_Store_emailview'] ); ?></a>
<?php } ?>
<?php
}
?>PHPVisualizzare Il nuovo Campo Personalizzato nel User Utente di WP
Mostra Html del Input nella pagina modifica Utente in WP admin
E’ utile inserire il campo creato anche nei field del profilo utente nell’amministratore wordpress. Per farlo possiamo inserire il field in uno dei do_action messi a disposizione da dokan.
Nella funzione Dokan Lite “public function add_meta_fields( $user ) {” che mostra i campi della scheda store dell’utente, possiamo trovare i seguenti do_action () dove poter inserire il nostro input:
- do_action( ‘dokan_user_profile_after_phone_number’, $store_settings, $user );
dopo il campo telefono e prima dei social media - do_action( ‘dokan_seller_meta_fields_after_admin_commission‘, $user );
Dopo il primo field delle commissioni Admin - do_action( ‘dokan_seller_meta_fields’, $user );
Dopo il venditore in primo piano
Ricordarsi che la struttura dei field è dentro una tabella e quindi usare html appropriato come nell’esempio sotto.
<?php
/** AGGIUNGI CAMPO in ADMIN dopo al campo Store phone
* filtro : add_action( 'dokan_user_profile_after_phone_number'
* pagina caricata in dokan lite: /dokan-lite/includes/Admin/UserProfile.php
*
* --> necessita di salvataggio nella funzione -> 'dokan_process_seller_meta_fields'
*/
if ( is_admin() ) { add_action( 'dokan_user_profile_after_phone_number','akaPlDokanplus_dokan_user_profile_after_phone_number' ,10,2); }
function akaPlDokanplus_dokan_user_profile_after_phone_number ( $store_settings, $user) {
// EMAIL Dedicata allo STORE __________
$FIELD = 'Field_Store_emailview';
$Value = $store_settings[$FIELD];
?>
<tr>
<th><?php esc_html_e( 'Email dello Store (creato dal plugin Akami Dokanplus)', 'lang_T_option' ); ?></th>
<td>
<input type="email" name="<?php echo $FIELD; ?>" class="regular-text" value="<?php echo esc_attr($Value ); ?>">
</td>
</tr>
<?php
}
?>PHPSalva il nuovo campo nel DB se si salva dal profilo Utente WP Admin
Anche se il field personalizzato è visibile nella pagina, non abbiamo ancora dato il comando di salvataggio nel database. Per farlo serve usare un altro do_action di dokan: add_action( 'dokan_process_seller_meta_fields')
<?php
/** SALVA CAMPI del USER ADMIN nel Database(inseriti nella funzione sopra )
* filtro : add_action( 'dokan_process_seller_meta_fields')
* pagina caricata in dokan lite: /dokan-lite/includes/Admin/UserProfile.php
*
* --> necessita di salvataggio nella funzione -> 'dokan_process_seller_meta_fields'
*/
add_action( 'dokan_process_seller_meta_fields','akaPlDokanplus_dokan_process_seller_meta_fields' ,20);
function akaPlDokanplus_dokan_process_seller_meta_fields ( $user_id) {
$store_settings = dokan_get_store_info( $user_id );
// EMAIL Dedicata allo STORE __________
$FIELD = 'Field_Store_emailview';
$store_settings[$FIELD] = isset( $_POST[$FIELD] ) ? sanitize_text_field( wp_unslash( $_POST[$FIELD] ) ) : '';
// UPLOAD SETTING
update_user_meta( $user_id, 'dokan_profile_settings', $store_settings );
}
?>PHP