Cho phép người dùng chọn một chủ đề để cài đặt khi họ đăng ký


11

Có thể cho phép người dùng chọn chủ đề họ muốn cài đặt từ trang đăng ký trang web mới không? Và một khi trang web được tạo, nó rõ ràng sẽ cài đặt bất kỳ chủ đề nào họ chọn.

Tôi tìm thấy wp_get_theme . Đây có phải là cách bạn sẽ thực hiện trước khi điền vào một menu thả xuống với tất cả các chủ đề có sẵn? Làm thế nào để bạn chuyển thông tin của chủ đề cho quá trình đăng ký thực tế để trang web được tạo với chủ đề chính xác?

Nếu ai đó biết cách làm điều này với Gravity Forms, điều đó cũng sẽ rất tuyệt.

Cập nhật:

Đây là những gì tôi có cho đến nay, nó không tính đến các chủ đề con, sẽ hoạt động trên đó sau

Hàm này sẽ xuất danh sách các chủ đề bằng các nút radio, lưu trữ chủ đề đã chọn trong $ _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' );

Tôi nghĩ rằng tôi đã thêm một trường ẩn như một cách để chuyển giá trị của chủ đề vào việc tạo trang web. Có điều gì đó không đúng với điều này mặc dù - ở bước cuối cùng, nó mất đi giá trị của nó, không biết tại sao.

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

Và cuối cùng là một chức năng để chuyển tên chủ đề đến trang web mới được tạo. Điều này hoạt động nếu tôi mã hóa các biến, nhưng tôi chưa thể chuyển giá trị của custom_theme. Trang web được tạo tốt nhưng các tùy chọn mẫu và biểu định kiểu trống. Chỉ là tôi không nhận được giá trị cho dù tôi có cố gắng thế nào. Tôi đoán tôi phải sử dụng $ _GET để truy cập vào trường ẩn mà tôi đã tạo trước đó. Một lần nữa, tất cả những gì tôi muốn làm vào thời điểm này là chuyển cùng tên chủ đề cho các tùy chọn mẫu và biểu định kiểu, tôi sẽ tìm ra cách phân biệt chúng sau khi tôi làm cho nó hoạt động.

/**     
 * 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
Tôi nghĩ rằng đây là một câu hỏi hay, +1
Anh Tran

1
về mặt lý thuyết là có thể bằng cách thêm các trường bổ sung vào biểu mẫu đăng ký, nhưng làm thế nào để người dùng biết các chủ đề trông như thế nào? việc xem trước sẽ khiến quá trình đăng ký trở nên phức tạp hơn một chút ...
krembo99

@ krembo99 điểm công bằng. Tôi đã cố gắng đơn giản hóa nó cho câu hỏi. Tôi sẽ sử dụng các trường radio với xem trước hình thu nhỏ hoặc có một nút trên mỗi trang chủ đề có nội dung "đăng ký với chủ đề này". Nút chỉ đơn giản là chuyển tên của tên chủ đề vào mẫu đăng ký. Nghĩ rằng tôi sẽ bắt đầu đơn giản :)
Andrew

1
ok - trong trường hợp đó, nếu bạn thực sự muốn làm như vậy, hãy xem câu trả lời của tôi ..
krembo99

Câu trả lời:


5

Để thực hiện những gì bạn muốn, bạn có thể thêm bất kỳ trường nào bạn muốn và sau đó lưu trữ chúng trong user_meta...

(Người ta cũng có thể lưu trữ chúng trong $user_infomảng / đối tượng, nhưng tôi không chắc điều gì sẽ mang lại lợi ích ..)

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

}

sau tất cả những điều đó bạn có thể truy xuất user_theme như vậy:

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

LƯU Ý: Điều này đã được viết On-The-Fly. Nó không được xác minh trên nhiều blog, nhưng trên một cài đặt wp đơn giản, và mặc dù không có nhiều khác biệt - đây vẫn không phải là một chức năng sản xuất, nó chỉ đưa bạn đi đúng hướng. Cần vệ sinh và kiểm tra các biến, mã làm sạch và FORM MARKUP, cũng như thêm trường vào các màn hình liên quan đến người dùng khác (tạo người dùng, chỉnh sửa người dùng, chỉnh sửa hồ sơ, v.v.).

CHÚ THÍCH II: bạn đã hỏi về các dạng trọng lực trong uodate của bạn - họ có một tiện ích bổ sung cho điều đó


Cảm ơn bạn đã giúp đỡ. Tôi đã xoay sở để ghép một cái gì đó và gần như làm cho nó hoạt động. Chỉ cần gặp khó khăn để có được trường ẩn để dính và chuyển giá trị vào hàm cuối cùng. Đã cập nhật câu hỏi của tôi để bao gồm tiến bộ của tôi cho đến nay.
Andrew

bạn đã thử chức năng của tôi? nó sẽ hoạt động ..
krembo99

Móc register_form trong ví dụ của bạn sẽ không hoạt động trong nhiều trang. Tìm thấy một cái móc khác để thêm các nút radio. Ngoài ra get_theme () không được dùng nữa và tôi đã tìm thấy một cách tốt hơn để lấy thông tin của chủ đề. Cuối cùng, tôi không nghĩ việc thêm tên của chủ đề vào bảng meta của người dùng là cách tốt nhất, chủ đề templatestylesheetđược lưu trữ trong bảng tùy chọn. Nói rằng, mã của bạn đã giúp đỡ rất nhiều cho đến nay, cảm ơn.
Andrew

hook register_form sẽ hoạt động trên multisite (xem CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form ). bạn có thể tìm thấy nhiều hook khác, nhưng đó sẽ là cái phù hợp để sử dụng IMHO .. về các bình luận khác, tôi không thực sự hiểu vấn đề, quan tâm giải thích?
krembo99

Cảm ơn các lưu ý về các plugin đăng ký người dùng hình thức trọng lực. Tôi đã có plugin đó nhưng nó không cho phép bạn chọn một chủ đề khi người dùng đăng ký một trang web, do đó câu hỏi của tôi.
Andrew

1

Tôi biết đây là loại gian lận, nhưng tôi sử dụng plugin này. Nó cho phép bạn sao chép bất kỳ trang web mạng hiện có nào và sau đó làm cho nó có sẵn dưới dạng mẫu khi người dùng mới đăng ký. Bạn có thể tạo nhiều mẫu blog mới như bạn muốn. Chúng sẽ chứa tất cả nội dung, plugin, cài đặt, v.v. và người dùng có thể chọn một khi thiết lập trang web / tài khoản mới :)

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


0

Đây là loại câu trả lời cho câu hỏi của bạn: Chúng tôi đặt một plugin có tên ' Theme Switch ' trên trang web này: Focusww.com và nó đặt một thanh bên nơi bạn có thể chọn từ danh sách các chủ đề. Nó cho phép bạn chọn chủ đề nào có thể được sử dụng và thời gian trước khi cookie hết hạn để trở lại chủ đề mặc định.


Xin lỗi tôi không theo "trình chuyển đổi chủ đề". Tôi muốn người dùng có thể chọn một chủ đề khi họ đăng ký blog bằng wp-signup.php trong bản cài đặt nhiều trang.
Andrew

Tôi vừa vấp vào một plugin $ 19 cho phép người dùng cài đặt một chủ đề khi đăng ký: premium.wpmudev.org/project/new-blog-template <= kiểm tra xem :)
Nohl

0

Nếu vẫn còn liên quan, có lẽ điều này có thể giúp những người khác tìm kiếm giải pháp tương tự

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

Tôi đã viết một bài đăng trên blog ( http://artofcoding.in/select-theme-fter-registering-wordpress-multisite-network/ ) tại đây khi tôi có yêu cầu tương tự. Hy vọng điều này là hữu ích.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.