प्रोग्राम बनाने वाले उपयोगकर्ता को उपयोगकर्ता सक्रियण ईमेल भेजें


9

मुझे आश्चर्य हुआ कि क्या यहाँ कोई मदद कर सकता है।

असल में, मैंने एक कस्टम पंजीकरण फॉर्म बनाया है, जिसे जब मान्य किया जाता है, तो उपयोगकर्ता को उपयोगकर्ता तालिका में सम्मिलित करता है।

function _new_user($data) {

    // Separate Data
    $default_newuser = array(
        'user_pass' =>  wp_hash_password( $data['user_pass']),
        'user_login' => $data['user_login'],
        'user_email' => $data['user_email'],
        'first_name' => $data['first_name'],
        'last_name' => $data['last_name'],
        'role' => 'pending'
    );

    wp_insert_user($default_newuser);
} 

अब, मुझे जो करने की आवश्यकता है वह पुष्टि ई-मेल भेजने के बजाय है जो मुझे पता है कि मैं निम्नलिखित कोड के साथ कर सकता हूं।

wp_new_user_notification($user_id, $data['user_pass']);

मैं इसके बजाय एक उपयोगकर्ता सक्रियण ई-मेल भेजना चाहता हूं। मैंने कुछ चीजों की कोशिश की है, लेकिन मुझे लगता है कि कुछ भी ठोस नहीं मिल सकता है। किसी से उम्मीद करना शायद पहले यह समस्या थी।

जवाबों:


10

उपयोगकर्ता सक्रियण प्रक्रिया को पूरा करने के लिए आपको निम्नलिखित कदम उठाने की आवश्यकता है:

  1. नया उपयोगकर्ता बनाने के बाद एक कस्टम उपयोगकर्ता फ़ील्ड जोड़ें जो इंगित करता है कि इस उपयोगकर्ता को अपना खाता सक्रिय करना है
  2. सक्रियण कोड के साथ एक ईमेल भेजें, इस ईमेल में एक लिंक एक पृष्ठ पर प्रदान करें जहां उपयोगकर्ता सक्रिय हो जाएगा
  3. सक्रियण पृष्ठ लागू करें
  4. जब उपयोगकर्ता यह जाँचने का प्रयास करता है कि क्या कस्टम उपयोगकर्ता फ़ील्ड मौजूद है या नहीं। यदि यह मौजूद है, तो उसे लॉग इन न करें और इसके बजाय सक्रियण त्रुटि संदेश दिखाएं।

कस्टम फ़ील्ड जोड़ें और ईमेल भेजें:

function _new_user($data) {

    // Separate Data
    $default_newuser = array(
        'user_pass' =>  wp_hash_password( $data['user_pass']),
        'user_login' => $data['user_login'],
        'user_email' => $data['user_email'],
        'first_name' => $data['first_name'],
        'last_name' => $data['last_name'],
        'role' => 'pending'
    );

    $user_id = wp_insert_user($default_newuser);
    if ( $user_id && !is_wp_error( $user_id ) ) {
        $code = sha1( $user_id . time() );
        $activation_link = add_query_arg( array( 'key' => $code, 'user' => $user_id ), get_permalink( /* YOUR ACTIVATION PAGE ID HERE */ ));
        add_user_meta( $user_id, 'has_to_be_activated', $code, true );
        wp_mail( $data['user_email'], 'ACTIVATION SUBJECT', 'CONGRATS BLA BLA BLA. HERE IS YOUR ACTIVATION LINK: ' . $activation_link );
    }
}

लॉगिन पर उपयोगकर्ता सक्रियण की जाँच करें:

// override core function
if ( !function_exists('wp_authenticate') ) :
function wp_authenticate($username, $password) {
    $username = sanitize_user($username);
    $password = trim($password);

    $user = apply_filters('authenticate', null, $username, $password);

    if ( $user == null ) {
        // TODO what should the error message be? (Or would these even happen?)
        // Only needed if all authentication handlers fail to return anything.
        $user = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));
    } elseif ( get_user_meta( $user->ID, 'has_to_be_activated', true ) != false ) {
        $user = new WP_Error('activation_failed', __('<strong>ERROR</strong>: User is not activated.'));
    }

    $ignore_codes = array('empty_username', 'empty_password');

    if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes) ) {
        do_action('wp_login_failed', $username);
    }

    return $user;
}
endif;

सक्रियण पृष्ठ:

add_action( 'template_redirect', 'wpse8170_activate_user' );
function wpse8170_activate_user() {
    if ( is_page() && get_the_ID() == /* YOUR ACTIVATION PAGE ID HERE */ ) {
        $user_id = filter_input( INPUT_GET, 'user', FILTER_VALIDATE_INT, array( 'options' => array( 'min_range' => 1 ) ) );
        if ( $user_id ) {
            // get user meta activation hash field
            $code = get_user_meta( $user_id, 'has_to_be_activated', true );
            if ( $code == filter_input( INPUT_GET, 'key' ) ) {
                delete_user_meta( $user_id, 'has_to_be_activated' );
            }
        }
    }
}

यह आपका शुरुआती बिंदु है, आगे बढ़ें और इसे अपनी आवश्यकताओं के लिए समायोजित करें।


अच्छी पोस्ट। लेकिन मुझे लगता है कि आप एक चीज से चूक गए। जब आप अन-अधिकृत उपयोगकर्ताओं को लॉग इन करने से रोकते हैं, तो आप सक्रिय पृष्ठ पर get_current_user_id () से user_id कैसे प्राप्त कर सकते हैं?
s1lv3r 14

1
धिक्कार है ... :) अच्छा बिंदु, इसे एक मिनट में ठीक कर लेंगे :)
यूजीन मनुइलोव

इस शानदार जानकारी के लिए धन्यवाद। मैं देख रहा था कि क्या कोई सक्रियण ई-मेल भेजने के लिए ट्रिगर करने के लिए कोई कोर समाधान था क्योंकि आप व्यवस्थापक पैनल में 'सक्रियण पुनः भेजें' कर सकते हैं। मैंने सोचा था कि लंबित एक सक्रियण कोड के रूप में एक उपयोगकर्ता को सम्मिलित करके उत्पन्न किया जा सकता है और डेटाबेस में डाला जा सकता है, लेकिन आगे के निरीक्षण पर मुझे पता चला कि 'स्पष्ट रूप से' ऐसा कोई भाग्य नहीं है :) वैसे भी। यह सब समझ में आता है और फिर से धन्यवाद।
जो बकले

@JoeBuckle यह अजीब है। आप resend activationएक वेनिला स्थापित पर बिल्कुल नहीं होना चाहिए । क्या आपके पास पहले से ही इसके लिए एक प्लगइन स्थापित है? इसके अलावा BuddyPress बॉक्स से बाहर एक उपयोगकर्ता सक्रियण कार्यक्षमता के साथ आता है।
s1lv3r

@ s1lv3r में थीम-माय-लॉगिन के साथ कुछ करना हो सकता है?
जो बकले

1

से चुनने के लिए दो विकल्प:

  1. एक प्लगइन का उपयोग करें, उदाहरण के लिए उपयोगकर्ता सक्रियण ईमेल या नया उपयोगकर्ता अनुमोदन

  2. इसे खुद कोड करें।

कुछ कार्य जो आपको आरंभ करने चाहिए:

  • ईमेल भेजने के लिए wp_mail ()
  • add_user_meta ()उपयोगकर्ता के लिए सक्रियण कुंजी सहेजने के लिए
  • कुंजी युक्त लिंक जेनरेट करें और इसे ईमेल में रखें, वर्डप्रेस में एक पेज बनाएं जो आपके की- पैराम को पकड़ता है ( उदाहरण के लिए add_shortcode () का उपयोग करके )
  • get_user_meta का उपयोग करें () का db में संग्रहित एक के खिलाफ सक्रियकरण कुंजी की जांच करने के लिए करें, इस उपयोगकर्ता को चिह्नित करने के लिए किसी अन्य उपयोगकर्ता मेटा कुंजी को सक्रिय करें यदि सफल हुआ,
  • किसी भी उपयोगकर्ता को रोकने के लिए प्रामाणिक फ़िल्टर में एक फ़ंक्शन जोड़ें जो लॉग इन करने से सक्रिय नहीं है।

0

प्रमाणीकरण के दौरान आप ऐसा करके user_id प्राप्त कर सकते हैं:

$username='user email provided by the user at login panel.';
$results = $wpdb->get_row( "SELECT ID FROM wp_users WHERE user_email='".$username."'");
   $activation_id = $results->ID;
   $activation_key =  get_user_meta( $activation_id, 'has_to_be_activated', true );
 if($activation_key != false )
 {
  echo '<h4 class="error">Your account has not been activated yet.<br /> To activate it check your email and clik on the activation link.</h4>';
 }
else{
//authenticate your user login here...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.