อนุญาตให้ผู้ใช้เลือกชุดรูปแบบที่จะติดตั้งเมื่อสมัครใช้งาน


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
ok - ในกรณีที่ถ้าคุณอยากที่จะทำเช่นนั้นดูคำตอบของฉัน ..
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);

หมายเหตุ:นี่เป็นลายลักษณ์อักษร On-The-Fly มันไม่ได้รับการยืนยันในหลายบล็อก แต่เป็นการติดตั้ง WP แบบง่ายและถึงแม้ว่าจะไม่ควรมีความแตกต่างมากนัก แต่นี่ก็ไม่ใช่ฟังก์ชั่นการใช้งานจริง การสุขาภิบาลและการตรวจสอบเกี่ยวกับตัวแปร, จำเป็นต้องใช้รหัสการทำความสะอาดและ FORM MARKUP รวมถึงการเพิ่มฟิลด์ไปยังหน้าจอที่เกี่ยวข้องกับผู้ใช้อื่น ๆ (สร้างผู้ใช้แก้ไขผู้ใช้แก้ไขโปรไฟล์ ฯลฯ )

หมายเหตุ II:คุณถามเกี่ยวกับรูปแบบแรงโน้มถ่วงใน uodate ของคุณ - มันมีส่วนเสริมสำหรับสิ่งนั้น


ขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันจัดการบางอย่างเข้าด้วยกันและเกือบจะใช้งานได้แล้ว เพียงแค่มีปัญหาในการรับฟิลด์ที่ซ่อนอยู่เพื่อติดและส่งผ่านค่าไปยังฟังก์ชันสุดท้าย ได้อัปเดตคำถามของฉันเพื่อรวมความคืบหน้าของฉันแล้ว
แอนดรู

คุณลองใช้ฟังก์ชั่นของฉันหรือไม่ มันควรจะทำงาน ..
krembo99

hook register_form ในตัวอย่างของคุณจะไม่ทำงานในหลายไซต์ พบเบ็ดอื่นเพื่อเพิ่มปุ่มตัวเลือก get_themes () เลิกใช้แล้วและฉันก็พบวิธีที่ดีกว่าในการรับข้อมูลของชุดรูปแบบ ในที่สุดฉันไม่คิดว่าการเพิ่มชื่อธีมลงในตารางเมตาของผู้ใช้เป็นวิธีที่ดีที่สุดของธีมtemplateและstylesheetถูกเก็บไว้ในตารางตัวเลือก ในการบอกว่ารหัสของคุณได้รับการช่วยเหลืออย่างมากจนถึงตอนนี้ขอบคุณ
แอนดรู

hook register_form จะทำงานกับหลายไซต์ (ดู CODEX codex.wordpress.org/Plugin_API/Action_Reference/register_form ) คุณสามารถหา hooks อื่น ๆ อีกมากมาย แต่นั่นจะเป็นสิ่งที่ถูกต้องในการใช้ IMHO .. เกี่ยวกับความคิดเห็นอื่น ๆ ฉันไม่เข้าใจจุดสนใจอธิบายเพื่ออธิบายหรือไม่
krembo99

ขอขอบคุณสำหรับข้อความในแบบฟอร์มลงทะเบียนผู้ใช้แรงโน้มถ่วงปลั๊กอิน ฉันมีปลั๊กอินนั้นแล้ว แต่มันไม่อนุญาตให้คุณเลือกชุดรูปแบบเมื่อผู้ใช้ลงทะเบียนสำหรับเว็บไซต์ดังนั้นคำถามของฉัน
แอนดรู

1

ฉันรู้ว่านี่เป็นการโกง แต่ฉันใช้ปลั๊กอินนี้ ช่วยให้คุณสามารถคัดลอกไซต์เครือข่ายใด ๆ ที่มีอยู่แล้วทำให้เป็นแม่แบบเมื่อผู้ใช้ใหม่ลงทะเบียน คุณสามารถสร้างเทมเพลตบล็อกใหม่ได้มากเท่าที่คุณต้องการ พวกเขาจะมีเนื้อหาทั้งหมดปลั๊กอินการตั้งค่า ฯลฯ และผู้ใช้สามารถเลือกหนึ่งเมื่อตั้งค่าไซต์ / บัญชีใหม่ :)

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


0

ประเภทของคำตอบสำหรับคำถามของคุณ: เราใส่ปลั๊กอินที่ชื่อว่า ' Theme Switch ' บนเว็บไซต์นี้: focusww.com และวางแถบด้านข้างที่คุณสามารถเลือกจากรายการของธีม ช่วยให้คุณเลือกธีมที่จะใช้และระยะเวลาก่อนที่คุกกี้จะหมดอายุเพื่อเปลี่ยนกลับเป็นธีมเริ่มต้น


ขออภัยฉันไม่ได้อยู่หลัง "theme switcher" ฉันต้องการให้ผู้ใช้สามารถเลือกชุดรูปแบบเมื่อพวกเขาสมัครใช้งานบล็อกโดยใช้ 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/ ) ที่นี่เมื่อฉันมีข้อกำหนดที่คล้ายกัน หวังว่านี่จะเป็นประโยชน์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.