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


11

Kann ein Benutzer auf der neuen Website-Anmeldeseite auswählen, welches Thema er installieren möchte? Und sobald die Site erstellt ist, wird offensichtlich das von ihnen gewählte Thema installiert.

Ich habe wp_get_themes gefunden . Würden Sie auf diese Weise ein Dropdown-Menü mit allen verfügbaren Themen vorab ausfüllen? Wie geben Sie die Informationen zum Thema an den eigentlichen Anmeldevorgang weiter, damit die Site mit dem richtigen Thema erstellt wird?

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

Aktualisieren:

Hier ist, was ich bisher habe, es berücksichtigt keine untergeordneten Themen, wird danach arbeiten

Diese Funktion gibt eine Liste von Themen mit Optionsfeldern aus und speichert das ausgewählte Thema 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' );

Ich dachte, ich würde ein verstecktes Feld hinzufügen, um den Wert des Themas an die Site-Erstellung weiterzugeben. Daran stimmt jedoch etwas nicht - im letzten Schritt verliert es seinen Wert, nicht sicher warum.

/**
 * 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 Optionen für Vorlagen und Stylesheets sind leer. Es wird einfach nicht den Wert bekommen, egal was ich versuche. Ich muss wohl $ _GET verwenden, um auf das versteckte Feld zuzugreifen, das ich zuvor erstellt habe. Alles, was ich an dieser Stelle tun möchte, ist, den gleichen Themennamen an die Vorlagen- und Stylesheet-Optionen zu übergeben. 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' );

1
Ich denke, das ist eine gute Frage, +1
Anh Tran

1
Theoretisch ist es möglich, dem Registrierungsformular zusätzliche Felder hinzuzufügen. Wie würde der Benutzer jedoch wissen, wie die Themen aussehen? Die Vorschau wird den Registrierungsprozess etwas komplizierter machen ...
krembo99

@ krembo99 fair point. Ich habe versucht, es für die Frage zu vereinfachen. Ich wollte Radiofelder mit Miniaturansichten verwenden oder auf jeder Themenseite eine Schaltfläche mit der Aufschrift "Mit diesem Thema anmelden" haben. Die Schaltfläche würde einfach den Namen des Themennamens an das Anmeldeformular übergeben. Ich dachte, ich fange einfach an :)
Andrew

1
ok - in diesem Fall, wenn Sie wirklich wollen, sehen Sie meine Antwort ..
krembo99

Antworten:


5

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

(Man könnte sie auch im $user_infoArray / Objekt speichern , aber ich bin mir nicht sicher, was der Vorteil wäre ..)

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

}

Nach all dem 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 in einem Multi-Blog überprüft, sondern in einer einfachen wp-Installation, und obwohl es keinen großen Unterschied geben sollte - dennoch ist dies keine Produktionsfunktion, sondern nur, um Sie auf den richtigen Weg zu bringen. Bereinigung und Überprüfung von Variablen, Reinigungscode und FORM MARKUP sind erforderlich sowie das Hinzufügen des Felds zu anderen benutzerbezogenen Bildschirmen (Benutzer erstellen, Benutzer bearbeiten, Profil bearbeiten usw.).

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


danke für Ihre Hilfe. Ich habe es geschafft, etwas zusammenzusetzen und es fast zum Laufen zu bringen. Ich habe nur Probleme, das versteckte Feld zum Festhalten zu bringen und den Wert an die letzte Funktion zu übergeben. Habe meine Frage aktualisiert, um meine bisherigen Fortschritte aufzunehmen.
Andrew

Hast du meine Funktion ausprobiert? es sollte funktionieren ..
krembo99

Der register_form-Hook in Ihrem Beispiel funktioniert nicht an mehreren Standorten. Es wurde ein weiterer Haken gefunden, zu dem die Optionsfelder hinzugefügt werden können. Auch get_themes () ist veraltet und ich habe einen besseren Weg gefunden, um die Informationen des Themas zu erhalten. Schließlich denke ich nicht, dass das Hinzufügen des Themennamens zur Metatabelle des Benutzers der beste Weg ist, die Themen templateund stylesheetin der Optionstabelle zu speichern. Wenn Sie das sagen, war Ihr Code bisher eine enorme Hilfe, danke.
Andrew

die register_form Haken wird auf mehreren Systemen arbeiten (siehe CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form ). Sie können viele andere Haken finden, aber das wäre der richtige, um IMHO zu verwenden .. über die anderen Kommentare, ich verstehe den Punkt nicht wirklich, möchten Sie erklären?
krembo99

Vielen Dank für den Hinweis auf die Schwerkraft Formulare Benutzerregistrierung Plugin. Ich habe dieses Plugin bereits, aber Sie können kein Thema auswählen, wenn sich der Benutzer für eine Site registriert, daher meine Frage.
Andrew

1

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

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


0

Diese Art der Beantwortung Ihrer Frage: Wir haben auf dieser Website ein Plugin namens " Theme Switch " veröffentlicht: 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 abläuft, um zu einem Standardthema zurückzukehren.


Entschuldigung, ich bin nicht nach einem "Theme Switcher". Ich möchte, dass der Benutzer ein Thema auswählen kann, wenn er sich mit wp-signup.php in einer Installation mit mehreren Standorten für ein Blog anmeldet.
Andrew

Ich bin gerade auf ein 19-Dollar-Plugin gestoßen, mit dem Benutzer bei der Registrierung ein Thema installieren können: premium.wpmudev.org/project/new-blog-template <= check it out :)
Nohl

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.