Kullanıcının, kaydolurken yüklenecek bir tema seçmesine izin ver


11

Bir kullanıcının yeni site kayıt sayfasından hangi temayı yüklemek istediğini seçmesine izin vermek mümkün müdür? Ve site oluşturulduktan sonra, hangi temayı seçtiyse o kadar açıktır.

Wp_get_themes buldum . Mevcut tüm temaları içeren bir açılır menüyü önceden doldurmak bu şekilde mi yapılır? Sitenin doğru tema ile oluşturulması için temanın bilgilerini gerçek kayıt işlemine nasıl iletirsiniz?

Birisi bunu Gravity Forms ile nasıl yapacağını biliyorsa, bu da harika olurdu.

Güncelleme:

Şimdiye kadar sahip olduğum şey, çocuk temalarını dikkate almıyor, bundan sonra çalışacak

Bu işlev, seçilen temayı $ _POST ['custom_theme'] içine kaydederek radyo düğmeli temaların bir listesini çıkarır

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

Sitenin değerine temanın değerini aktarmanın bir yolu olarak gizli bir alan ekleyeceğimi düşündüm. Bununla ilgili yanlış bir şey var - son adımda değerini kaybediyor, neden henüz emin değilim.

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

Ve son olarak tema adını yeni oluşturulan siteye aktarmak için kullanılan bir işlev. Bu değişkenleri sabit kod, ancak henüz custom_theme değerini iletemiyorum çalışır. Site iyi oluşturulmuş ancak şablon ve stil sayfası seçenekleri boş. Ne denesem de değer alamıyor. Sanırım daha önce oluşturduğum gizli alana erişmek için $ _GET kullanmam gerekiyor. Yine, bu noktada yapmak istediğim tek şey, aynı tema adını şablon ve stil sayfası seçeneklerine aktarmaktır, çalıştıktan sonra bunları nasıl ayırt edeceğimizi anlayacağım.

/**     
 * 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
Bence bu iyi bir soru, +1
Anh Tran

1
teorik olarak kayıt formuna ek alanlar ekleyerek mümkündür, ancak kullanıcı temaların nasıl göründüğünü nasıl bilebilir? önizleme kayıt işlemini biraz daha karmaşık hale getirecek ...
krembo99

@ krembo99 fuar noktası. Soru için basitleştirmeye çalıştım. Küçük resim önizlemeli radyo alanları kullanacak veya her tema sayfasında "bu temayla kaydol" yazan bir düğme kullanacaktım. Düğme, tema adının adını kaydolma formuna iletir. Basit başlayacağımı sanıyordum :)
Andrew

1
Tamam - bu durumda, gerçekten yapmak istiyorsanız, cevabımı görün ..
krembo99

Yanıtlar:


5

İstediğinizi yapmak için, istediğiniz alanları ekleyebilir ve daha sonra bunları user_meta...

(Bir de onları $user_infodizi / nesne saklayabilirsiniz , ama ne faydası olacağından emin değilim ..)

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

}

tüm bunlardan sonra user_theme şöyle alabilirsiniz:

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

NOT: Bu Anında yazılmıştır. Çoklu blogda değil, basit bir wp kurulumunda doğrulandı ve çok fazla fark olmamasına rağmen - yine de bu bir üretim fonksiyonu değil, sadece sizi doğru yola koymaktı. Sanitasyon ve değişkenler üzerinde kontrol, temizleme kodu ve FORM MARKUP, alanın kullanıcı ile ilgili diğer ekranlara da eklenmesi gerekir (kullanıcı yarat, kullanıcı düzenle, profil düzenle vb.).

NOT II: Uodatınızdaki yerçekimi formlarını sordunuz - bunun için bir eklenti var


yardım ettiğin için teşekkür ederim. Bir şeyi bir araya getirmeyi başardım ve neredeyse işe yaradı. Sadece gizli alanın son fonksiyona yapışması ve iletilmesi konusunda sorun yaşıyorum. Sorumu şu ana kadarki ilerlememi içerecek şekilde güncelledim.
Andrew

işlevimi denedin mi çalışması gerekir ..
krembo99

Örneğinizdeki register_form kancası çoklu sitede çalışmaz. Radyo düğmelerini eklemek için başka bir kanca buldum. Ayrıca get_themes () kullanımdan kaldırıldı ve temanın bilgilerini almak için daha iyi bir yol buldum. Sonunda kullanıcının meta masaya temanın adını ekleyerek en iyi yolu, tema en sanmıyorum templateve stylesheetseçenekleri tablosunda saklanır. Bunu söylerken, kodunuz şu ana kadar muazzam bir yardımcı oldu, teşekkürler.
Andrew

register_form kanca olacak -çoklu üzerinde çalışmak (KODEKS bkz codex.wordpress.org/Plugin_API/Action_Reference/register_form ). diğer birçok kanca bulabilirsiniz, ama IMHO kullanmak için doğru olanı olurdu .. diğer yorumlar hakkında, ben gerçekten anlamıyorum, açıklamak için bakım?
krembo99

Yerçekimi formları kullanıcı kayıt eklentisi ile ilgili not için teşekkürler. Zaten bu eklentiye sahibim, ancak kullanıcı bir siteye kaydolduğunda bir tema seçmenize izin vermiyor, dolayısıyla sorum.
Andrew

1

Bunun bir tür hile olduğunu biliyorum, ama bu eklentiyi kullanıyorum. Mevcut herhangi bir ağ sitesini kopyalamanıza olanak tanır ve ardından yeni kullanıcılar kaydolduğunda siteyi şablon olarak kullanılabilir hale getirir. İstediğiniz kadar yeni blog şablonu oluşturabilirsiniz. Tüm içeriği, eklentileri, ayarları vb. İçerirler ve kullanıcılar yeni bir site / hesap oluştururken birini seçebilirler :)

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


0

Bu tür sorunuzu cevaplar: Bu siteye ' Tema Anahtarı ' adlı bir eklenti koyduk : focusww.com ve tema listesinden seçim yapabileceğiniz bir kenar çubuğu koydu. Hangi temaların kullanılabileceğini ve çerezin varsayılan bir temaya geri dönmesi için ne kadar süre geçeceğini seçmenizi sağlar.


Üzgünüm, "tema değiştirici" nin peşinde değilim. Kullanıcının, çok siteli bir kurulumda wp-signup.php kullanarak bir blog'a kaydolduğunda bir tema seçebilmesini istiyorum.
Andrew

Kullanıcıların kayıt üzerine bir tema yüklemesine izin veren 19 dolarlık bir eklentiyi tökezledim: premium.wpmudev.org/project/new-blog-template <= check it :)
Nohl

0

Hâlâ alakalı ise, belki de benzer çözümler arayan diğerlerine yardımcı olabilir

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

Benzer bir gereksinimim olduğunda buraya bir blog yazısı ( http://artofcoding.in/select-theme-while-registering-wordpress-multisite-network/ ) yazdım. Umarım bu yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.