Consenti all'utente di selezionare un tema da installare al momento dell'iscrizione


11

È possibile consentire a un utente di selezionare quale tema desidera installare dalla nuova pagina di registrazione del sito? E una volta creato il sito, si installa ovviamente qualunque tema abbiano scelto.

Ho trovato wp_get_themes . È così che prepari a popolare un menu a discesa con tutti i temi disponibili? Come si passano le informazioni del tema al processo di registrazione effettivo in modo che il sito venga creato con il tema corretto?

Se qualcuno sa come farlo con Gravity Forms, sarebbe fantastico.

Aggiornare:

Ecco quello che ho finora, non tiene conto dei temi figlio, lavorerà su quello dopo

Questa funzione produrrà un elenco di temi con pulsanti di opzione, memorizzando il tema selezionato in $ _POST ['custom_theme']

/**
* Show list of themes at bottom of wp-signup.php (multisite)
*/
function 70169_add_signup_extra_fields() { ?>

Themes<br />
<?php
$themes = wp_get_themes();

foreach ( $themes as $theme ) {
    $theme_name = $theme['Name'];
    $theme_stylesheet = $theme->stylesheet;
?>
    <label>
        <input id="<?php echo $theme_stylesheet; ?>" type="radio" <?php if ( isset( $_POST['custom_theme'] ) ) checked( $_POST['custom_theme'], $theme_stylesheet ); ?> name="custom_theme" value="<?php echo $theme_stylesheet; ?>" ><?php echo $theme_name; ?>
    </label>

<?php } ?>

<?php }
add_action( 'signup_extra_fields', '70169_add_signup_extra_fields' );

Ho pensato di aggiungere un campo nascosto come modo per trasmettere il valore del tema alla creazione del sito. C'è qualcosa di sbagliato in questo però - all'ultimo passo perde il suo valore, non so ancora perché.

/**
 * Add a hidden field with the theme's value
 */
function 70169_theme_hidden_fields() { ?>

<?php
    $theme = isset( $_POST['custom_theme'] ) ? $_POST['custom_theme'] : null;
?>
<input type="hidden" name="user_theme" value="<?php echo $theme; ?>" />
<?php }
add_action( 'signup_hidden_fields', '70169_theme_hidden_fields' );

E infine una funzione per passare il nome del tema al sito appena creato. Funziona se codifico le variabili, ma non riesco ancora a passare il valore di custom_theme. Il sito viene creato bene, ma le opzioni del modello e del foglio di stile sono vuote. Non sta ottenendo il valore, non importa quello che provo. Immagino di dover usare $ _GET per accedere al campo nascosto che ho creato in precedenza. Ancora una volta, tutto ciò che voglio fare a questo punto è passare lo stesso nome di tema al modello e alle opzioni del foglio di stile, scoprirò come differenziarli dopo che lo avrò funzionato.

/**     
 * Create the new site with the theme name
*/
function 70169_wpmu_new_blog( $blog_id ) {

// need to get this working, use $_GET?
//    $theme = ???

    update_blog_option( $blog_id, 'template', $theme );  // $theme works if I hardcode it with a theme name
    update_blog_option( $blog_id, 'stylesheet', $theme );
}

add_action( 'wpmu_new_blog', '70169_wpmu_new_blog' );

1
Penso che questa sia una buona domanda, +1
Anh Tran,

1
teoricamente è possibile aggiungendo campi aggiuntivi al modulo di registrazione, ma come farebbe l'utente a sapere come appaiono i temi? l'anteprima renderà il processo di registrazione un po 'più complicato ...
krembo99,

@ krembo99 fair point. Ho provato a semplificarlo per la domanda. Stavo per usare i campi radio con anteprime in miniatura o un pulsante in ogni pagina del tema che diceva "iscriviti con questo tema". Il pulsante passerebbe semplicemente il nome del nome del tema al modulo di iscrizione. Pensavo di iniziare semplice :)
Andrew,

1
ok - in tal caso, se vuoi davvero farlo, vedi la mia risposta ..
krembo99

Risposte:


5

Per fare quello che vuoi, puoi aggiungere qualunque campo tu voglia, e poi memorizzarli nel user_meta...

(Uno potrebbe anche memorizzarli $user_infonell'array / oggetto, ma non sono sicuro di quale sarebbe il vantaggio ..)

  // Render Form Fields
add_action('register_form','k99_register_form_add_theme_field');
// Checking
add_action('register_post','k99_check_fields',10,3);
// Insert Data
add_action('user_register', 'k99_register_new_register_fields');

// Render the form with the additional radio field 
function k99_register_form_add_theme_field(){
?>

<p>
<label>Theme<br />
 <?php $themes=wp_get_themes();
foreach ($themes as $theme ) {
$theme['Name'] = sanitize_title_with_dashes($theme['Name']);
$checked = checked( $_POST['custom_theme'], 1 );
 echo '<input id="custom_theme'.$theme['Name'] .'" type="radio" name="custom_theme" value="'. $theme['Name'] .'" '.$checked.'>  '. $theme['Name'].'<br />';
$custom_theme = $_POST['custom_theme'];
} ?>
</label>
</p>

<?php
}

// checking , sanitation etc .. of course this is not done...

function k99_check_fields($login, $email, $errors) {
global $custom_theme;
if ($_POST['custom_theme'] == '') {
$errors->add('empty_theme', "<strong>Error:</strong> Please select theme.");
}
else {
$custom_theme = $_POST['custom_theme'];
}
}

// Write to DB ... if you will..
function k99_register_new_register_fields($user_id, $password="", $meta=array())  {

$custom_theme = $_POST['custom_theme']; //just in case ..
update_usermeta($user_id, 'user_custom_theme',$custom_theme);

}

dopotutto puoi recuperare user_theme in questo modo:

get_user_meta($user_id, 'user_custom_theme', true);

NOTA: questo è stato scritto al volo. Non è stato verificato su multi-blog, ma su una semplice installazione di wp, e anche se non ci dovrebbero essere molte differenze - tuttavia questa non è una funzione di produzione, è stata solo per metterti sulla strada giusta. Sono necessari servizi igienico-sanitari e controllo di variabili, codice di pulizia e FORM MARKUP, oltre ad aggiungere il campo anche ad altre schermate relative all'utente (creare utente, modificare utente, modificare profilo ecc.).

NOTA II: hai chiesto informazioni sulle forme di gravità nel tuo uodato - hanno un componente aggiuntivo per questo


Grazie per l'aiuto. Sono riuscito a mettere insieme qualcosa e quasi a farlo funzionare. Ho solo problemi a far aderire il campo nascosto e passare il valore sull'ultima funzione. Ho aggiornato la mia domanda per includere i miei progressi finora.
Andrew,

hai provato la mia funzione? dovrebbe funzionare ..
krembo99,

L'hook register_form nel tuo esempio non funzionerà in multisito. Trovato un altro hook a cui aggiungere i pulsanti di opzione. Anche get_themes () è deprecato e ho trovato un modo migliore per ottenere le informazioni sul tema. Infine, non penso che l'aggiunta del nome del tema alla meta tabella dell'utente sia il modo migliore, i temi templatee stylesheetvengano memorizzati nella tabella delle opzioni. Nel dire che, il tuo codice è stato finora di grande aiuto, grazie.
Andrew,

il gancio register_form sarà lavorare multisito (vedi CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form ). puoi trovare molti altri ganci, ma sarebbe quello giusto usare IMHO .. riguardo agli altri commenti, non capisco davvero il punto, ti interessa spiegarlo?
krembo99,

Grazie per la nota sui moduli di gravità per la registrazione dell'utente. Ho già quel plug-in ma non ti consente di selezionare un tema quando l'utente si registra per un sito, quindi la mia domanda.
Andrew,

1

So che questo è un po 'barare, ma io uso questo plugin. Ti consente di copiare qualsiasi sito di rete esistente e quindi lo rende disponibile come modello quando i nuovi utenti si iscrivono. Puoi creare tutti i nuovi modelli di blog che desideri. Conterranno tutto il contenuto, i plug-in, le impostazioni, ecc. E gli utenti potranno sceglierne uno durante l'impostazione di un nuovo sito / account :)

http://premium.wpmudev.org/project/new-blog-template/


0

Questo tipo di risposta risponde alla tua domanda: abbiamo inserito un plugin chiamato ' Cambio tema ' su questo sito: focusww.com e ha messo una barra laterale dove puoi scegliere da un elenco di temi. Ti consente di scegliere quali temi possono essere utilizzati e per quanto tempo prima che il cookie scada per tornare a un tema predefinito.


Mi dispiace non sto cercando un "commutatore di temi". Vorrei che l'utente fosse in grado di selezionare un tema quando si iscrivono a un blog usando wp-signup.php in un'installazione su più siti.
Andrew,

Mi sono appena imbattuto in un plug-in da $ 19 che consente agli utenti di installare un tema al momento della registrazione: premium.wpmudev.org/project/new-blog-template <= dai un'occhiata :)
Nohl

0

Se ancora rilevante, forse questo potrebbe aiutare gli altri a cercare soluzioni simili

/**
 * Add custom field to registration form
 */
add_action( 'signup_blogform', 'aoc_show_addtional_fields' );
add_action( 'user_register', 'aoc_register_extra_fields' );

function aoc_show_addtional_fields() 
{
    $themes = wp_get_themes();
    echo '<label>Choose template for your site';
    foreach ($themes as $theme){
        echo '<img src="'.$theme->get_screenshot().'" width="240"/>';
        echo $theme->name . ' <input id="template" type="radio" tabindex="30" size="25" value="'.$theme->template.'" name="template" />';
    }
    echo '</label>';
}

function aoc_register_extra_fields ( $user_id, $password = "", $meta = array() ) {
    update_user_meta( $user_id, 'template', $_POST['template'] );
}

// The value submitted in our custom input field needs to be added to meta array as the user might not be created yet.
add_filter('add_signup_meta', 'aoc_append_extra_field_as_meta');
function aoc_append_extra_field_as_meta($meta) 
{
    if(isset($_REQUEST['template'])) {
        $meta['template'] = $_REQUEST['template'];
    }
    return $meta;
}

// Once the new site added by registered user is created and activated by user after email verification, update the template selected by user in database.
add_action('wpmu_new_blog', 'aoc_extra_field', 10, 6);
function aoc_extra_field($blog_id, $user_id, $domain, $path, $site_id, $meta) 
{
    update_blog_option($blog_id, 'template', $meta['template']);
    update_blog_option($blog_id, 'stylesheet', $meta['template']);
}

Ho scritto un post sul blog ( http://artofcoding.in/select-theme-while-registers-wordpress-multisite-network/ ) qui quando avevo un requisito simile. Spero sia utile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.