Il processo di iscrizione multisito non è facile da modificare. Ha molti ganci con cui giocare, a differenza di altri processi, ma non sembrano unirsi troppo bene per una personalizzazione pesante, quindi capisco la tua frustrazione.
Se capisco correttamente, non è così complicato ottenere ciò che desideri, anche se non può essere una soluzione in un solo passaggio senza sovrascrivere gran parte del comportamento predefinito di WordPress, principalmente perché la registrazione (cioè quando l'utente invierà le informazioni personalizzate) e l'attivazione ( cioè quando il nuovo blog verrà effettivamente creato) avviene separatamente.
Ecco un codice molto approssimativo che dovrai iniziare. Spero che ti guidi nella giusta direzione:
// Add text field on blog signup form
add_action('signup_blogform', 'add_extra_field_on_blog_signup');
function add_extra_field_on_blog_signup() { ?>
<label>An extra field</label>
<input type="text" name="extra_field" value="" />
<?php
}
// Append the submitted value of our custom input into the meta array that is stored while the user doesn't activate
add_filter('add_signup_meta', 'append_extra_field_as_meta');
function append_extra_field_as_meta($meta) {
if(isset($_REQUEST['extra_field'])) {
$meta['extra_field'] = $_REQUEST['extra_field'];
}
return $meta;
}
// When the new site is finally created (user has followed the activation link provided via e-mail), add a row to the options table with the value he submitted during signup
add_action('wpmu_new_blog', 'process_extra_field_on_blog_signup', 10, 6);
function process_extra_field_on_blog_signup($blog_id, $user_id, $domain, $path, $site_id, $meta) {
update_blog_option($blog_id, 'extra_field', $meta['extra_field']);
}
Tieni a mente:
- Se si desidera filtrare l'ingresso tramite plug-in, si consiglia vivamente di utilizzare un ingresso selezionato per bloccare le opzioni fornite;
- Poiché alcuni campi sono obbligatori e passano attraverso la convalida durante la registrazione (caratteri minimi, caratteri non consentiti per il nome del sito, nomi nella lista nera, ecc.), Suggerirei di controllare il tuo campo aggiuntivo sul globale $ _REQUEST quando compili il valore dell'input sul primo funzione, in modo che l'utente non perda il suo input nel caso in cui venga rispedito per correggere il valore dei campi predefiniti di WordPress;
- Ovviamente puoi sostituire l'idea dell'ultima funzione con quella che si adatta meglio al tuo plug-in, ma il valore del campo sarà ora disponibile all'interno dell'ultima funzione, il che dovrebbe aiutarti nella tua strada.
In ultima analisi, se si desidera elaborare in seguito tutti i valori "extra_field" di tutti i blog esistenti, suggerirei di archiviare le informazioni su un'unica tabella; forse usare update_site_option
invece diupdate_blog_option
quest'ultima funzione, perdendo blog_id, che non è richiesto in quel caso.
In ogni caso, facci sapere come va e buona fortuna!