Разрешить пользователю выбирать тему для установки при регистрации

11

Можно ли разрешить пользователю выбирать, какую тему он хотел бы установить на новой странице регистрации на сайте? И как только сайт создан, он, очевидно, устанавливает любую тему, которую выбрал.

Я нашел wp_get_themes . Это как бы вы предварительно заполнили выпадающее меню всеми доступными темами? Как вы передаете информацию о теме фактическому процессу регистрации, чтобы сайт создавался с правильной темой?

Если кто-то знает, как это сделать с помощью Gravity Forms, это было бы здорово.

Обновить:

Вот то, что я пока имею, это не учитывает дочерние темы, будет работать над этим после

Эта функция выведет список тем с переключателями, сохраняя выбранную тему в $ _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' );

Я думал, что добавлю скрытое поле как способ передать значение темы на создание сайта. Хотя с этим что-то не так - на последнем этапе он теряет свою ценность, но пока не уверен, почему.

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

И, наконец, функция для передачи названия темы на вновь созданный сайт. Это работает, если я жестко закодировал переменные, но я пока не могу передать значение custom_theme. Сайт создается хорошо, но параметры шаблона и таблицы стилей остаются пустыми. Это просто не получить значение, независимо от того, что я пытаюсь. Я думаю, мне нужно использовать $ _GET для доступа к скрытому полю, которое я создал ранее. Опять же, все, что я хочу сделать на этом этапе, это передать одно и то же имя темы в параметры шаблона и таблицы стилей, и я выясню, как их дифференцировать после того, как я получу его работу.

/**     
 * 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
Я думаю, что это хороший вопрос, +1
Anh Tran
1
теоретически это возможно путем добавления дополнительных полей в регистрационную форму, но как бы пользователь узнал, как выглядят темы? предварительный просмотр сделает процесс регистрации немного более сложным imho ...
krembo99
@ krembo99 справедливо. Я попытался упростить это для вопроса. Я собирался использовать радио-поля с миниатюрами предварительного просмотра или иметь кнопку на каждой странице темы, на которой было написано «зарегистрироваться в этой теме». Кнопка просто передаст название темы в форму регистрации. Думаю, я бы начал просто :)
Эндрю
1
хорошо - в этом случае, если вы действительно хотите это сделать, посмотрите мой ответ ..
krembo99

Ответы:

5

Для того, чтобы делать то, что вы хотите, вы можете добавить любые поля, которые вы хотите, а затем сохранить их в user_meta...

(Можно также сохранить их в $user_infoмассиве / объекте, но я не уверен, что было бы выгодно ..)

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

}

после всего этого вы можете получить user_theme примерно так:

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

ПРИМЕЧАНИЕ: это было написано на лету. Это не было проверено на мультиблоге, но на простой установке wp, и хотя не должно быть большой разницы - все же это не производственная функция, это было только, чтобы поставить вас на правильный путь. Требуется санация и проверка переменных, кода очистки и FORM MARKUP, а также добавление поля также на другие связанные с пользователем экраны (создание пользователя, редактирование пользователя, изменение профиля и т. Д.).

ПРИМЕЧАНИЕ II: вы спрашивали о формах гравитации в вашем уодате - у них есть дополнение для этого

krembo99
источник
Спасибо за вашу помощь. Мне удалось собрать воедино что-то, и это почти сработало. Просто возникают проблемы с тем, чтобы скрытое поле прилипало и передавало значение в последнюю функцию. Обновил мой вопрос, чтобы включить мой прогресс до сих пор.
Андрей
ты пробовал мою функцию? это должно работать ..
krembo99
Хук register_form в вашем примере не будет работать в мультисайте. Нашел еще один крючок для добавления переключателей. Также get_themes () устарела, и я нашел лучший способ получить информацию о теме. В конце концов я не думаю , что добавление имени Тематического к мете - таблице пользователя является лучшим способом, тема - х templateи stylesheetсохраняются в таблице параметров. Сказав это, ваш код очень помог, спасибо.
Андрей
хук register_form будет работать на мультисайтах (см. CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form ). Вы можете найти много других хуков, но это было бы правильным, чтобы использовать ИМХО .. насчет других комментариев, я не очень понимаю суть, хотите объяснить?
krembo99
Спасибо за примечание о плагине для регистрации пользователей. У меня уже есть этот плагин, но он не позволяет выбрать тему, когда пользователь регистрируется на сайте, поэтому мой вопрос.
Андрей
1

Я знаю, что это обман, но я использую этот плагин. Он позволяет копировать любой существующий сетевой сайт, а затем делает его доступным в качестве шаблона при регистрации новых пользователей. Вы можете создать столько новых шаблонов блога, сколько пожелаете. Они будут содержать весь контент, плагины, настройки и т. Д. И т. Д., И пользователи могут выбрать один из них при создании нового сайта / учетной записи :)

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

speedypancake
источник
0

Этот вид отвечает на ваш вопрос: мы разместили на этом сайте плагин под названием « Переключатель тем »: focusww.com, а на боковой панели вы можете выбрать его из списка тем. Это позволяет вам выбрать, какие темы можно использовать и сколько времени до истечения срока действия файла cookie, чтобы вернуться к теме по умолчанию.

Нол
источник
Извините, я не после "переключателя тем". Я хотел бы, чтобы пользователь мог выбрать тему при регистрации в блоге с помощью wp-signup.php в многосайтовой установке.
Эндрю
Я только что наткнулся на плагин за 19 долларов, который позволяет пользователям устанавливать тему при регистрации: premium.wpmudev.org/project/new-blog-template <= проверить это :)
Nohl
0

Если все еще актуально, возможно, это могло бы помочь другим, ищущим подобные решения

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

Я написал пост в блоге ( http://artofcoding.in/select-theme- while-registering-wordpress-multisite-network/ ), когда у меня было подобное требование. Надеюсь, это полезно.

ankittiwaari
источник