Дозволити користувачеві вибирати тему, яку потрібно встановити під час реєстрації


11

Чи можна дозволити користувачеві вибрати, яку тему вони б хотіли встановити, з нової сторінки реєстрації на сайті? І коли сайт створений, він, очевидно, встановлює будь-яку тему, яку вони обрали.

Я знайшов wp_get_themes . Це так, як ви б вирішили попередньо заповнити спадне меню з усіма доступними темами? Як ви передаєте інформацію теми про власне процес реєстрації, щоб сайт створювався з правильною темою?

Якщо хтось знає, як це зробити з гравітаційними формами, це теж було б чудово.

Оновлення:

Ось що я маю досі, воно не враховує дитячі теми, над цим працюватиме

Ця функція виводить список тем за допомогою перемикачів, зберігаючи вибрану тему у $ _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
Ань Tran

1
теоретично це можливо, додавши додаткові поля до форми реєстрації, але як би користувач знав, як виглядають теми? попередній перегляд зробить процес реєстрації дещо складнішим ...
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

Гак register_form у вашому прикладі не працюватиме у багатосторонніх сайтах. Знайшли ще один гачок, до якого можна додати радіо кнопки. Також get_themes () застаріле, і я знайшов кращий спосіб отримати інформацію про тему. Нарешті, я не думаю, що додавання імені теми до мета-таблиці користувача є найкращим способом, темою templateі stylesheetзберігається в таблиці параметрів. Сказавши це, ваш код до цього часу був надзвичайною допомогою, дякую.
Андрій

гачок register_form буде працювати на багатосайтовій платформі (див. код CODEX.wordpress.org/Plugin_API/Action_Reference/register_form ). Ви можете знайти багато інших гачків, але це було б правильним для використання ІМХО .. про інші коментарі, я не дуже розумію суть, обережно пояснити?
krembo99

Дякуємо за увагу на плагіні реєстрації користувачем гравітації. У мене вже є цей плагін, але він не дозволяє вам вибрати тему, коли користувач реєструється на сайті, звідси і моє запитання.
Андрій

1

Я знаю, що це свого роду обман, але я використовую цей плагін. Це дозволяє копіювати будь-який існуючий мережевий сайт, а потім надає його як шаблон, коли нові користувачі підписуються. Ви можете створити стільки нових шаблонів блогу, скільки бажаєте. Вони містять увесь вміст, плагіни, налаштування тощо тощо, і користувачі можуть вибрати його під час створення нового сайту / облікового запису :)

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


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-time-registering-wordpress-multisite-network/ ) тут, коли у мене були подібні вимоги. Сподіваюся, це корисно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.