wake-up-neo.com

Ermöglichen Sie dem Benutzer, ein Thema auszuwählen, das bei der Anmeldung installiert werden soll

Ist es möglich, einem Benutzer die Auswahl des Themas zu erlauben, das er auf der neuen Anmeldeseite der Site installieren möchte? Und sobald die Site erstellt ist, installiert sie offensichtlich das Thema, das sie ausgewählt haben.

Ich habe wp_get_themes gefunden. Würden Sie so vorgehen, um ein Dropdown-Menü mit allen verfügbaren Themen zu füllen? Wie leiten Sie die Informationen des Themas an den eigentlichen Anmeldevorgang weiter, damit die Site mit dem richtigen Thema erstellt wird?

Wenn jemand weiß, wie man das mit Schwerkraftformen macht, wäre das auch großartig.

Update:

Folgendes habe ich bisher, es werden keine untergeordneten Themen berücksichtigt, danach wird daran gearbeitet

Diese Funktion gibt eine Liste von Themen mit Optionsfeldern aus, wobei das ausgewählte Thema in $ _POST ['custom_theme'] gespeichert wird.

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

Ich dachte, ich würde ein verstecktes Feld hinzufügen, um den Wert des Themas auf die Website-Erstellung zu übertragen. Es ist jedoch etwas falsch daran - im letzten Schritt verliert es seinen Wert, nicht sicher warum noch.

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

Und schließlich eine Funktion zum Übergeben des Themennamens an die neu erstellte Site. Dies funktioniert, wenn ich die Variablen fest codiere, aber den Wert von custom_theme noch nicht übergeben kann. Die Site wird einwandfrei erstellt, aber die Vorlagen- und Stylesheet-Optionen sind leer. Es wird einfach nicht der Wert, egal was ich versuche. Ich denke, ich muss $ _GET verwenden, um auf das ausgeblendete Feld zuzugreifen, das ich zuvor erstellt habe. Alles, was ich an dieser Stelle tun möchte, ist, den Vorlagen- und Stylesheet-Optionen denselben Themennamen zuzuweisen. Ich werde herausfinden, wie ich sie unterscheiden kann, nachdem ich sie zum Laufen gebracht habe.

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

Um zu tun, was Sie wollen, können Sie beliebige Felder hinzufügen und diese dann im user_meta speichern ...

(Man könnte sie auch im $user_info-Array Objekt speichern, aber ich bin mir nicht sicher, was der Vorteil sein würde.)

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

}

danach können Sie das user_theme wie folgt abrufen:

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

HINWEIS: Dies wurde On-The-Fly geschrieben. Es wurde nicht auf einem Multi-Blog überprüft, sondern auf einer einfachen wp-Installation, und obwohl es keinen großen Unterschied geben sollte - dies ist immer noch keine Produktionsfunktion, sondern nur, um Sie auf den richtigen Weg zu bringen. Bereinigung und Überprüfung von Variablen, Reinigungscode und FORM MARKUP sowie Hinzufügen des Felds zu anderen benutzerbezogenen Bildschirmen (Benutzer erstellen, Benutzer bearbeiten, Profil bearbeiten usw.) sind erforderlich.

ANMERKUNG II: Sie haben nach Schwerkraftformen in Ihrem UODATE gefragt - sie haben ein Add-On dafür - /

5
krembo99

Ich weiß, dass dies eine Art Betrug ist, aber ich benutze dieses Plugin. Sie können eine vorhandene Netzwerksite kopieren und sie dann als Vorlage zur Verfügung stellen, wenn sich neue Benutzer anmelden. Sie können beliebig viele neue Blog-Vorlagen erstellen. Sie enthalten alle Inhalte, Plugins, Einstellungen usw. und Benutzer können beim Einrichten einer neuen Site/eines neuen Kontos eine auswählen :)

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

1
speedypancake

Diese Art der Beantwortung Ihrer Frage: Wir haben ein Plugin namens ' Theme Switch ' auf dieser Site platziert: focusww.com und eine Seitenleiste, in der Sie aus einer Liste von Themen auswählen können. Hier können Sie auswählen, welche Themen verwendet werden dürfen und wie lange es dauert, bis das Cookie auf ein Standardthema zurückgesetzt wird.

0
Nohl

Wenn dies immer noch relevant ist, könnte dies möglicherweise anderen helfen, nach ähnlichen Lösungen zu suchen

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

Ich habe hier einen Blog-Beitrag geschrieben ( http://artofcoding.in/select-theme-while-registering-wordpress-multisite-network/ ), als ich eine ähnliche Anforderung hatte. Hoffe das ist hilfreich.

0
ankittiwaari