Permet à l'utilisateur de sélectionner un thème à installer lors de son inscription

11

Est-il possible d’autoriser un utilisateur à sélectionner le thème qu’il souhaite installer à partir de la nouvelle page d’inscription au site? Et une fois le site créé, il installe évidemment le thème choisi.

J'ai trouvé wp_get_themes . Est-ce ainsi que vous pré-remplissez un menu déroulant avec tous les thèmes disponibles? Comment passez-vous les informations du thème au processus d’inscription pour que le site soit créé avec le bon thème?

Si quelqu'un sait comment faire cela avec Gravity Forms, ce serait formidable également.

Mise à jour:

Voici ce que j'ai jusqu'à présent, il ne prend pas en compte les thèmes enfants, y travaillera après

Cette fonction produira une liste de thèmes avec des boutons radio, stockant le thème sélectionné dans $ _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' );

Je pensais ajouter un champ caché afin de transmettre la valeur du thème à la création du site. Il y a cependant quelque chose qui ne va pas avec cela: à la dernière étape, il perd sa valeur, vous ne savez pas encore pourquoi.

/**
 * 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' );

Et enfin une fonction permettant de transmettre le nom du thème au site nouvellement créé. Cela fonctionne si je code les variables en dur, mais je ne parviens pas encore à transmettre la valeur de custom_theme. Le site est bien créé, mais les options de modèle et de feuille de style sont vides. Ce n'est tout simplement pas obtenir la valeur, peu importe ce que j'essaie. Je suppose que je dois utiliser $ _GET pour accéder au champ masqué que j'ai créé précédemment. Encore une fois, tout ce que je veux faire à ce stade est de transmettre le même nom de thème aux options de modèle et de feuille de style, je vais trouver comment les différencier une fois que tout fonctionne.

/**     
 * 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' );
    
posée Andrew 23.10.2012 - 12:15

4 réponses

5

Pour faire ce que vous voulez, vous pouvez ajouter les champs de votre choix, puis les stocker dans le user_meta ...

(On pourrait aussi les stocker dans le tableau / objet $user_info , mais je ne suis pas sûr de savoir quel serait l'avantage ...)

  // 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);

}

après tout cela, vous pouvez récupérer le user_theme comme ceci:

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

REMARQUE: Ceci a été écrit à la volée. Cela n’a pas été vérifié sur plusieurs blogs, mais sur une installation simple de wp, et bien qu’il ne devrait pas y avoir beaucoup de différence - ce n’est pourtant pas une fonction de production, c’est uniquement pour vous mettre sur la bonne voie. L’assainissement et la vérification des variables, le code de nettoyage et le FORMULAGE sont nécessaires, ainsi que l’ajout du champ à d’autres écrans liés à l’utilisateur (créer un utilisateur, modifier un utilisateur, modifier un profil, etc.).

NOTE II: vous avez posé des questions sur les formes gravimétriques dans votre compte uodate. ils ont un module complémentaire pour cela

    
réponse donnée krembo99 27.10.2012 - 11:23
1

Je sais que c'est une sorte de tricherie, mais j'utilise ce plugin. Il vous permet de copier tout site réseau existant, puis de le rendre disponible en tant que modèle lors de l'inscription de nouveaux utilisateurs. Vous pouvez créer autant de nouveaux modèles de blog que vous le souhaitez. Ils contiendront tout le contenu, les plugins, les paramètres, etc., et les utilisateurs peuvent en choisir un lors de la création d’un nouveau site / compte:)

enlace

    
réponse donnée speedypancake 27.10.2012 - 11:47
0

Ce genre de réponse à votre question: Nous avons mis un plugin intitulé " Changement de thème " sur ce site: focusww.com et il a placé une barre latérale dans laquelle vous pouvez choisir. une liste de thèmes. Il vous permet de choisir les thèmes à utiliser et combien de temps avant l’expiration du cookie pour revenir à un thème par défaut.

    
réponse donnée Nohl 26.10.2012 - 07:04
0

Si cela reste pertinent, cela pourrait peut-être aider les autres à la recherche de solutions similaires

/**
 * 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']);
}

J'ai écrit un article de blog ( enlace ) à ce moment-là. exigence similaire. J'espère que cela vous sera utile.

    
réponse donnée ankittiwaari 22.11.2018 - 08:24

Lire d'autres questions sur les étiquettes