Profilo Utente / Aggiungere Campi Personalizzati
Ciao: sto cercando di aggiungere 7 campi personalizzati alla pagina standard wp-admin/profile.php di WordPress. Ci sono alcuni siti che suggeriscono un semplice pezzo di codice per farlo, ad esempio:
http://wpengineer.com/2173/custom-fields-wordpress-user-profile/
Ma voglio poter aggiungere i miei campi personalizzati in modo che appaiano esattamente sotto la casella "Informazioni Biografiche" e sopra il campo "cambia password". Tutto quello che ho letto e provato posiziona i campi personalizzati in fondo alla pagina, ma io voglio che appaiano tra la casella "Informazioni Biografiche" e sopra il campo "cambia password".
Come posso fare? È possibile? Coinvolge anche l'uso di javascript? Per favore, consigliami. Grazie.

Non esiste un modo nativo in WordPress per aggiungere campi tra la biografia e la password dell'utente, ma come hai detto tu stesso puoi farlo tramite javascript. Di seguito trovi il codice che aggiunge un singolo campo per darti un esempio su come puoi ottenere lo stesso risultato.
NOTA: Il codice qui sotto mostra solo i campi ma non elabora alcuna informazione né salva i valori dei campi, perché quella parte è la stessa descritta nell'articolo linkato nella domanda.
Aggiungi i campi
Inserisci il codice qui sotto nel tuo functions.php per visualizzare i campi.
function wpse39285_add_custom_user_profile_fields( $user ) {
?>
<table id="custom_user_field_table" class="form-table">
<tr id="custom_user_field_row">
<th>
<label for="custom_field"><?php _e('Campo', 'your_textdomain'); ?></label>
</th>
<td>
<input type="text" name="custom_field" id="custom_field" value="<?php echo esc_attr( get_the_author_meta( 'custom_field', $user->ID ) ); ?>" class="regular-text" /><br />
<span class="description"><?php _e('Inserisci il valore del tuo campo personalizzato.', 'your_textdomain'); ?></span>
</td>
</tr>
</table>
<?php
}
add_action( 'show_user_profile', 'wpse39285_add_custom_user_profile_fields' );
add_action( 'edit_user_profile', 'wpse39285_add_custom_user_profile_fields' );
Il codice sopra posizionerà i tuoi campi personalizzati dopo i campi della password.
Sposta i campi
Il codice qui sotto inserisce uno script javascript nell'head dell'Admin di WordPress solo se l'utente sta visualizzando il proprio profilo o un amministratore sta modificando il profilo di qualcun altro.
function wpse39285_field_placement_js() {
$screen = get_current_screen();
if ( $screen->id != "profile" && $screen->id != "user-edit" )
return;
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
field = $('#custom_user_field_row').remove();
field.insertBefore('#password');
});
</script>
<?php
}
add_action( 'admin_head', 'wpse39285_field_placement_js' );
Il javascript sopra farà spostare il campo tra la password e i campi della biografia. Nel caso l'utente stia visualizzando la pagina da un browser senza javascript i campi non verranno spostati e appariranno come sono per impostazione predefinita.
Campo con browser con JavaScript abilitato
Campo con browser senza JavaScript

Il mio consiglio è: non cercare di aggirare/hackerare il sistema. Crea contenuti dove gli sviluppatori principali vogliono che tu li inserisca; il motivo per cui vorresti avere i campi esattamente in quel punto probabilmente non è una buona ragione per bypassare il flusso standard di WordPress.
Utilizza l'hook profile_personal_options
per aggiungere una nuova sezione alle impostazioni di cui hai bisogno nella pagina. Questo approccio non è solo tecnicamente corretto, ma anche più chiaro per gli utenti (che sanno come WordPress appare normalmente).

Per me la risposta di Hameedullah Khan ha funzionato bene. Ho apportato solo una piccola correzione perché i miei nuovi campi rompevano il layout della pagina. Quindi nel codice jQuery ho aggiunto:
jQuery(document).ready(function($) {
field = $('#custom_user_field_row').remove();
field.insertBefore('#password');
$('#custom_user_field_row').wrapAll('<tr><td colspan="2"></td></tr>');
});
per mantenere allineata la tabella.

Dal momento che non puoi veramente fare questo, ti consiglio di utilizzare il plugin Theme My Login, un plugin per membri molto semplice che creerà semplicemente le pagine "login", "logout" e "profilo" che si adatteranno alla personalizzazione del tuo tema. Sarai in grado di modificare l'ordine dei campi come preferisci in un file distinto che puoi aggiungere nel tuo child theme, quindi non avrai problemi se qualcosa dovesse andare storto.
L'unica cosa è che il tuo profilo non sarà più visibile su user-edit.php
ma su your-profile.php
.
