उपयोगकर्ता को साइनअप करने पर इंस्टॉल करने के लिए थीम चुनने की अनुमति दें


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
अनह ट्रान

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 codex.wordpress.org/Plugin_API/Action_Reference/register_form देखें )। आप कई अन्य हुक पा सकते हैं, लेकिन यह IMHO का उपयोग करने के लिए सही होगा। अन्य टिप्पणियों के बारे में, मैं वास्तव में बात नहीं समझता, समझाने की परवाह करता हूं?
krembo99

गुरुत्वाकर्षण रूपों पर नोट के लिए धन्यवाद उपयोगकर्ता पंजीकरण प्लगइन। मेरे पास वह प्लगइन पहले से ही है, लेकिन यह आपको किसी विषय का चयन करने की अनुमति नहीं देता है जब उपयोगकर्ता किसी साइट के लिए पंजीकरण करता है, इसलिए मेरा प्रश्न है।
एंड्रयू

1

मुझे पता है कि यह एक तरह का धोखा है, लेकिन मैं इस प्लगइन का उपयोग करता हूं। यह आपको किसी भी मौजूदा नेटवर्क साइट को कॉपी करने देता है और फिर नए उपयोगकर्ताओं के साइन अप करने पर इसे टेम्पलेट के रूप में उपलब्ध कराता है। आप जितने चाहें उतने नए ब्लॉग टेम्पलेट बना सकते हैं। उनमें सभी सामग्री, प्लगइन्स, सेटिंग आदि होंगे और उपयोगकर्ता एक नई साइट / खाता सेट करते समय किसी एक को चुन सकते हैं :)

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


0

इस तरह के आपके प्रश्न का उत्तर: हमने इस साइट पर ' थीम स्विच ' नामक एक प्लगइन रखा है : focusww.com और इसने एक साइडबार रखा है जहाँ आप विषयों की सूची से चुन सकते हैं। यह आपको यह चुनने देता है कि कौन से थीम का उपयोग किया जा सकता है और कुकी को डिफ़ॉल्ट विषय पर वापस लाने से पहले कितनी देर तक समाप्त होना चाहिए।


क्षमा करें, मैं "थीम स्विचर" के बाद नहीं हूं। मैं चाहूंगा कि उपयोगकर्ता एक थीम का चयन करने में सक्षम हों जब वे एक मल्टीसाइट इंस्टॉलेशन में 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-ORE-registering-wordpress-multisite-network/ ) लिखी है, जब मुझे ऐसी ही आवश्यकता थी। आशा है कि यह उपयोगी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.