사용자가 가입 할 때 설치할 테마를 선택할 수 있도록 허용


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
이론적으로 등록 양식에 추가 필드를 추가하면 가능하지만 사용자는 테마가 어떻게 표시되는지 어떻게 알 수 있습니까? 미리보기는 등록 과정을 좀 더 복잡하게 만듭니다 ...
krembo99

@ krembo99 페어 포인트. 나는 질문을 단순화하려고 노력했다. 썸네일 미리보기와 함께 라디오 필드를 사용하거나 각 테마 페이지에 "이 테마로 가입"이라는 버튼이 있습니다. 버튼은 단순히 테마 이름을 가입 양식에 전달합니다. 내가 간단하게 시작할 것이라고 생각했다 :)
Andrew

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 : 당신은 당신의 uodate에 중력 형태에 대해 물었습니다- 그것들에 대한 추가 기능이 있습니다


당신의 도움을 주셔서 감사합니다. 나는 함께 무언가를 조각하고 거의 작동했습니다. 숨겨진 필드를 가져 와서 마지막 함수에 값을 전달하는 데 문제가 있습니다. 지금까지의 진행 상황을 포함하도록 내 질문을 업데이트했습니다.
앤드류

내 기능을 시도 했습니까? 작동합니다 ..
krembo99

예제의 register_form 후크는 다중 사이트에서 작동하지 않습니다. 라디오 버튼을 추가 할 다른 후크를 찾았습니다. 또한 get_themes ()는 더 이상 사용되지 않으며 테마 정보를 얻는 더 좋은 방법을 찾았습니다. 마지막으로 필자는 사용자의 메타 테이블에 테마의 이름을 추가하는 가장 좋은 방법은, 테마의 생각하지 않습니다 template및이 stylesheet옵션 테이블에 저장됩니다. 말하자면, 귀하의 코드는 지금까지 큰 도움이되었습니다.
Andrew

register_form 후크 다중 사이트에서 작동합니다 (CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form 참조 ). 당신은 다른 많은 갈고리를 찾을 수 있지만 IMHO를 사용하는 것이 맞을 것입니다.
krembo99

중력 양식 사용자 등록 플러그인에 대한 메모에 감사드립니다. 플러그인이 이미 있지만 사용자가 사이트에 등록 할 때 테마를 선택할 수 없으므로 내 질문입니다.
Andrew

1

나는 이것이 일종의 부정 행위라는 것을 알고 있지만이 플러그인을 사용합니다. 기존 네트워크 사이트를 복사 한 다음 새 사용자가 가입 할 때 템플릿으로 사용할 수 있습니다. 원하는만큼 새 블로그 템플릿을 만들 수 있습니다. 그들은 모든 콘텐츠, 플러그인, 설정 등을 포함하며 사용자는 새 사이트 / 계정을 설정할 때 하나를 선택할 수 있습니다 :)

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


0

이런 종류의 질문에 대한 답변 : 우리는 이 사이트에 ' 테마 스위치 ' 라는 플러그인을 넣습니다 : focusww.com 그리고 테마 목록에서 선택할 수있는 사이드 바를 넣습니다. 사용할 수있는 테마와 쿠키가 만료되기까지 얼마나 걸리는지를 선택하여 기본 테마로 되돌릴 수 있습니다.


"테마 스위처"를 따르지 않아서 죄송합니다. 다중 사이트 설치에서 wp-signup.php를 사용하여 블로그에 가입 할 때 사용자가 테마를 선택할 수 있기를 바랍니다.
Andrew

방금 사용자가 등록시 테마를 설치할 수있게하는 $ 19 플러그인을 우연히 발견했습니다 : premium.wpmudev.org/project/new-blog-template <= check it :)
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/ ) 을 작성했습니다 . 이것이 도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.