Izinkan pengguna memilih tema untuk dipasang saat mereka mendaftar


11

Apakah mungkin untuk mengizinkan pengguna memilih tema mana yang ingin mereka instal dari halaman pendaftaran situs baru? Dan setelah situs dibuat, itu jelas menginstal tema yang mereka pilih.

Saya menemukan wp_get_themes . Apakah ini yang akan Anda lakukan sebelum mengisi menu dropdown dengan semua tema yang tersedia? Bagaimana Anda meneruskan informasi tema ke proses pendaftaran aktual sehingga situs dibuat dengan tema yang benar?

Jika seseorang tahu bagaimana melakukan ini dengan Gravity Forms, itu akan bagus juga.

Memperbarui:

Inilah yang saya miliki sejauh ini, tidak memperhitungkan tema anak, akan bekerja setelah itu

Fungsi ini akan menampilkan daftar tema dengan tombol radio, menyimpan tema yang dipilih dalam $ _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' );

Saya pikir saya akan menambahkan bidang tersembunyi sebagai cara untuk meneruskan nilai tema ke pembuatan situs. Ada sesuatu yang salah dengan ini - pada langkah terakhir kehilangan nilainya, belum yakin mengapa.

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

Dan akhirnya sebuah fungsi untuk meneruskan nama tema ke situs yang baru dibuat. Ini berfungsi jika saya mengubah kode variabel, tetapi saya belum dapat meneruskan nilai custom_theme. Situs ini dibuat dengan baik tetapi opsi template dan stylesheet kosong. Hanya saja tidak mendapatkan nilai apa pun yang saya coba. Saya kira saya harus menggunakan $ _GET untuk mengakses bidang tersembunyi yang saya buat sebelumnya. Sekali lagi, yang ingin saya lakukan pada titik ini adalah memberikan nama tema yang sama ke opsi templat dan gaya, saya akan mencari cara membedakannya setelah saya membuatnya berfungsi.

/**     
 * 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
Saya pikir ini adalah pertanyaan yang bagus, +1
Anh Tran

1
secara teoritis dimungkinkan dengan menambahkan bidang tambahan ke formulir pendaftaran, tetapi bagaimana pengguna akan tahu bagaimana tema itu terlihat? pratinjau akan membuat proses registrasi sedikit lebih rumit ...
krembo99

@ titik adil krembo99. Saya mencoba menyederhanakannya untuk pertanyaan. Saya akan menggunakan bidang radio dengan preview thumbnail atau memiliki tombol pada setiap halaman tema yang mengatakan "daftar dengan tema ini". Tombol hanya akan meneruskan nama nama tema ke formulir pendaftaran. Kupikir aku akan memulai dari yang sederhana :)
Andrew

1
ok - dalam hal ini, jika Anda benar-benar ingin melakukannya, lihat jawaban saya ..
krembo99

Jawaban:


5

Untuk melakukan apa yang Anda inginkan, Anda bisa menambahkan bidang apa pun yang Anda inginkan, dan kemudian menyimpannya di user_meta...

(Orang juga bisa menyimpannya dalam $user_infoarray / objek, tetapi saya tidak yakin apa manfaatnya ..)

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

}

setelah semua itu, Anda dapat mengambil user_theme seperti:

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

CATATAN: Ini ditulis Saat Terbang. Itu tidak diverifikasi di multi-blog, tetapi pada instalasi wp sederhana, dan meskipun seharusnya tidak ada banyak perbedaan - tetap ini bukan fungsi produksi, itu hanya untuk menempatkan Anda di jalur yang benar. Diperlukan sanitasi dan memeriksa variabel, kode pembersihan dan FORMULIR MARKUP, serta menambahkan bidang juga ke layar terkait pengguna lainnya (buat pengguna, edit pengguna, edit profil dll.).

CATATAN II: Anda bertanya tentang bentuk gravitasi di uodate Anda - mereka memiliki tambahan untuk itu


terima kasih atas bantuan Anda. Saya sudah berhasil mengumpulkan sesuatu dan hampir membuatnya bekerja. Hanya mengalami kesulitan untuk mendapatkan bidang tersembunyi untuk menempel dan meneruskan nilai ke fungsi terakhir. Telah memperbarui pertanyaan saya untuk memasukkan kemajuan saya sejauh ini.
Andrew

apakah Anda mencoba fungsi saya? itu harus bekerja ..
krembo99

Kait register_form dalam contoh Anda tidak akan berfungsi di multisite. Menemukan kait lain untuk menambahkan tombol radio. Juga get_themes () sudah usang dan saya menemukan cara yang lebih baik untuk mendapatkan informasi tema. Akhirnya saya tidak berpikir menambahkan nama tema ke tabel meta pengguna adalah cara terbaik, tema templatedan stylesheetdisimpan dalam tabel opsi. Dengan mengatakan itu, kode Anda sejauh ini sangat membantu, terima kasih.
Andrew

kait register_form akan berfungsi pada multisite (lihat CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form ). Anda dapat menemukan banyak kait lain, tetapi itu akan menjadi yang tepat untuk menggunakan IMHO .. tentang komentar lain, saya tidak begitu mengerti intinya, mau jelaskan?
krembo99

Terima kasih atas catatan tentang plugin pendaftaran bentuk gravitasi. Saya sudah memiliki plugin itu tetapi itu tidak memungkinkan Anda untuk memilih tema ketika pengguna mendaftar untuk suatu situs, maka pertanyaan saya.
Andrew

1

Saya tahu ini curang, tetapi saya menggunakan plugin ini. Ini memungkinkan Anda menyalin situs jaringan yang ada dan membuatnya tersedia sebagai templat ketika pengguna baru mendaftar. Anda dapat membuat template blog baru sebanyak yang Anda inginkan. Mereka akan berisi semua konten, plugin, pengaturan dll, dan pengguna dapat memilih satu ketika membuat situs / akun baru :)

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


0

Jenis jawaban pertanyaan Anda: Kami menempatkan sebuah plugin yang disebut ' Theme Switch ' di situs ini: focusww.com dan meletakkan bilah sisi di mana Anda dapat memilih dari daftar tema. Ini memungkinkan Anda memilih tema mana yang dapat digunakan dan berapa lama sebelum cookie berakhir untuk kembali ke tema default.


Maaf saya tidak mencari "pengalih tema". Saya ingin pengguna dapat memilih tema ketika mereka mendaftar untuk blog menggunakan wp-signup.php dalam instalasi multisite.
Andrew

Saya baru saja menemukan plugin $ 19 yang memungkinkan pengguna menginstal tema saat registrasi: premium.wpmudev.org/project/new-blog-template <= check it out :)
Nohl

0

Jika masih relevan, mungkin ini bisa membantu orang lain mencari solusi serupa

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

Saya telah menulis posting blog ( http://artofcoding.in/select-theme-while-registering-wordpress-multisite-network/ ) di sini ketika saya memiliki persyaratan yang sama. Semoga ini bermanfaat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.