প্রোগ্রামগতভাবে ব্যবহারকারী তৈরি করার সময় ব্যবহারকারীর অ্যাক্টিভেশন ইমেল প্রেরণ করুন


9

আমি ভাবলাম যে এখানে কেউ যদি সহায়তা করতে সক্ষম হয় তবে।

মূলত, আমি একটি কাস্টম নিবন্ধকরণ ফর্ম তৈরি করেছি যা যখন বৈধ হয়ে যায়, তখন ব্যবহারকারীকে ব্যবহারকারীর টেবিলে serোকায়।

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 () থেকে ইউজার_আইডি পেতে সক্ষম হবেন?
s1lv3r

1
জঘন্য ... :) ভাল পয়েন্ট, এক মিনিটের মধ্যে এটি ঠিক করবে :)
ইউজিন মানুয়িলভ

এই চমত্কার তথ্যের জন্য ধন্যবাদ। আমি দেখছিলাম যে কেবলমাত্র একটি অ্যাক্টিভেশন ই-মেইল প্রেরণার জন্য কোনও প্রাথমিক সমাধান আছে যেহেতু আপনি অ্যাডমিন প্যানেলে 'সক্রিয়করণ পুনরায় পাঠাতে' পারবেন। আমি ভেবেছিলাম যে কোনও ব্যবহারকারীকে মুলতুবি হিসাবে প্রবেশ করিয়ে একটি অ্যাক্টিভেশন কোড উত্পন্ন এবং ডাটাবেসে প্রবেশ করা যেতে পারে, তবে আরও পরিদর্শন করার পরে আমি আবিষ্কার করেছি যে 'স্পষ্টতই' এরকম ভাগ্য নেই :) যাইহোক। এটি সমস্ত অর্থ এবং আবার ধন্যবাদ দেয়।
জো বাকল

@ জোবাকল এটি আশ্চর্যজনক আপনার resend activationভ্যানিলা ইনস্টলে কোনও লিঙ্ক থাকা উচিত নয় । আপনি কি এর জন্য ইতিমধ্যে একটি প্লাগইন ইনস্টল করেছেন? এছাড়াও বুডিপ্রেস বাক্সের বাইরে ব্যবহারকারীর অ্যাক্টিভেশন কার্যকারিতা নিয়ে আসে।
s1lv3r

@ s1lv3r থিম-মাই-লগইনের সাথে এটির কিছু থাকতে পারে?
জো বাকল

1

দুটি থেকে বেছে নিতে বিকল্প:

  1. একটি প্লাগইন ব্যবহার করুন, উদাহরণস্বরূপ ব্যবহারকারী অ্যাক্টিভেশন ইমেল বা নতুন ব্যবহারকারী অনুমোদন rove

  2. এটি নিজের কোড করুন

কিছু ফাংশন যা আপনাকে শুরু করা উচিত:

  • wp_mail () ইমেল পাঠাতে,
  • ব্যবহারকারীর জন্য একটি অ্যাক্টিভেশন কী সংরক্ষণ করতে add_user_meta () ,
  • কী যুক্ত একটি লিঙ্ক তৈরি করুন এবং এটি ইমেলটিতে রাখুন, ওয়ার্ডপ্রেসে একটি পৃষ্ঠা তৈরি করুন যা আপনার কী- প্যারামকে ধরবে ( উদাহরণস্বরূপ add_shortcode () ব্যবহার করে ),
  • ডিবিতে সঞ্চিত একের বিপরীতে অ্যাক্টিভেশন কীটি পরীক্ষা করতে get_user_meta () ব্যবহার করুন , এই ব্যবহারকারীর সক্রিয় হিসাবে সফল হিসাবে চিহ্নিত করতে অন্য ব্যবহারকারী মেটা কী রাখুন,
  • লগ ইন থেকে সক্রিয় নয় এমন কোনও ব্যবহারকারীকে আটকাতে প্রমাণীকরণকারী ফিল্টারে একটি ফাংশন যুক্ত করুন ।

0

প্রমাণীকরণের সময় আপনি এটি করে ব্যবহারকারী_আইডি পেতে পারেন:

$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...
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.