উত্তর:
আমি যতটা অবগত আছি, আপনি যা করতে পারেন তা হ'ল প্রদর্শনের নামটি ফিল্টার করে pre_user_display_name
এটি ইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করে দেখুন। দুর্ভাগ্যক্রমে WP_User_Query
জিজ্ঞাসাবাদ সমর্থন করে না display_name
, সুতরাং আমাদের মাধ্যমেও এই WHERE
ধারাটিতে যুক্ত করতে হবে pre_user_query
। অতিরিক্ত হিসাবে, display_name
ইতিমধ্যে কিছুই না ফেরানোর বাইরে ইতিমধ্যে বিদ্যমান কেসটি পরিচালনা করার জন্য আমি ভাবতে পারি এমন কোনও মার্জিত উপায় নেই, যেহেতু আমরা এই সম্ভাব্য ডিসপ্লে নামটি ব্যবহারকারীর সাথে কী ব্যবহার করেছি তা ফিল্টারের মাধ্যমে আমরা জানি না। অথবা সম্ভবত আমি ক্লান্ত হয়ে পড়েছি এবং স্পষ্ট কিছু মিস করছি! যাইহোক, এখানে আমি তৈরি করেছি একটি দ্রুত পরীক্ষা:
class wpa82239_display_name {
private $display_name;
public function __construct(){
add_filter( 'pre_user_display_name', array( $this, 'display_name_filter' ) );
}
public function display_name_filter( $display_name ){
$this->display_name = $display_name;
add_action( 'pre_user_query', array( $this, 'user_query_filter' ) );
$args = array(
'number' => 1,
'fields' => 'ID'
);
$user_search = new WP_User_Query( $args );
remove_action( 'pre_user_query', array( $this, 'user_query_filter' ) );
if( 0 == $user_search->total_users )
return $display_name;
return null;
}
public function user_query_filter( $query ){
global $wpdb;
$query->query_where .= $wpdb->prepare(
" AND $wpdb->users.display_name = %s",
$this->display_name
);
}
}
$wpa82239_display_name = new wpa82239_display_name();
এটি বেশ নোংরা, তবে কাজটি করে, কেবল এটি আপনার থিম ফাংশন.ফ্যাপে কোনও একক সাইটে রাখুন, বা একটি মাল্টিসাইটে আপনার মু-প্লাগিন ফোল্ডারের ভিতরে একটি ফাংশন.এফপি ফাইলে রাখুন।
স্ক্রিপ্টটি বিদ্যমান ব্যবহারকারীদের স্ক্যান করবে (যদি আপনার সাইটে ইতিমধ্যে অনেকগুলি থাকে) এবং কোনও অনন্য প্রদর্শন নাম আপডেট করা হবে এবং ব্যবহারকারীর নাম দিয়ে প্রতিস্থাপন করা হবে।
আমি জানি এটি সম্পূর্ণ আদর্শ নয়, তবে বিদ্যমান ব্যবহারকারীদের সাথে ডিল করার জন্য বা পরামর্শগুলির জন্য সর্বদা স্বাগত।
// Make nickname & display_name unique
// and automatically change non unique nicks & display name to username
// in case you already have existing users
// by Ashok & Vaughan Montgomery
/*
* adding action when user profile is updated
*/
add_action('personal_options_update', 'check_display_name');
add_action('edit_user_profile_update', 'check_display_name');
function check_display_name($user_id) {
global $wpdb;
// Getting user data and user meta data
$err['display'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users WHERE display_name = %s AND ID <> %d", $_POST['display_name'], $_POST['user_id']));
$err['nick'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname' AND meta.meta_value = %s AND users.ID <> %d", $_POST['nickname'], $_POST['user_id']));
foreach($err as $key => $e) {
// If display name or nickname already exists
if($e >= 1) {
$err[$key] = $_POST['username'];
// Adding filter to corresponding error
add_filter('user_profile_update_errors', "check_{$key}_field", 10, 3);
}
}
}
/*
* Filter function for display name error
*/
function check_display_field($errors, $update, $user) {
$errors->add('display_name_error',('Sorry, Display Name is already in use. It needs to be unique.'));
return false;
}
/*
* Filter function for nickname error
*/
function check_nick_field($errors, $update, $user) {
$errors->add('display_nick_error',('Sorry, Nickname is already in use. It needs to be unique.'));
return false;
}
/*
* Check for duplicate display name and nickname and replace with username
*/
function display_name_and_nickname_duplicate_check() {
global $wpdb;
$query = $wpdb->get_results("SELECT * FROM $wpdb->users");
$query2 = $wpdb->get_results("SELECT * FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname'");
$c = count($query);
for($i = 0; $i < $c; $i++) {
for($j = $i+1; $j < $c; $j++) {
if($query[$i]->display_name == $query[$j]->display_name){
wp_update_user(
array(
'ID' => $query[$i]->ID,
'display_name' => $query[$i]->user_login
)
);
}
if($query2[$i]->meta_value == $query2[$j]->meta_value){
update_user_meta($query2[$i]->ID, 'nickname', $query2[$i]->user_login, $prev_value);
}
}
}
}
// Call the function
display_name_and_nickname_duplicate_check();
/*
* Calling the display_name_and_nickname_duplicate_check() again when a new user is registered
*/
add_action( 'user_register', 'check_nickname', 10, 1 );
function check_nickname() {
display_name_and_nickname_duplicate_check();
}
এটা চেষ্টা কর:
add_action('personal_options_update', 'check_display_name');
add_action('edit_user_profile_update', 'check_display_name');
function check_display_name($user_id) {
global $wpdb;
// Getting user data and user meta data
$err['display'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users WHERE display_name = %s AND ID <> %d", $_POST['display_name'], $_POST['user_id']));
$err['nick'] = $wpdb->get_var($wpdb->prepare("SELECT COUNT(ID) FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname' AND meta.meta_value = %s AND users.ID <> %d", $_POST['nickname'], $_POST['user_id']));
foreach($err as $key => $e) {
// If display name or nickname already exists
if($e >= 1) {
$err[$key] = $_POST['username'];
// Adding filter to corresponding error
add_filter('user_profile_update_errors', "check_{$key}_field", 10, 3);
}
}
}
/*
* Filter function for display name error
*/
function check_display_field($errors, $update, $user) {
$errors->add('display_name_error',__('Sorry, Display Name is already in use. It needs to be unique.'));
return false;
}
/*
* Filter function for nickname error
*/
function check_nick_field($errors, $update, $user) {
$errors->add('display_nick_error',__('Sorry, Nickname is already in use. It needs to be unique.'));
return false;
}
/*
* Check for duplicate display name and nickname and replace with username
*/
function display_name_and_nickname_duplicate_check() {
global $wpdb;
$query = $wpdb->get_results("select * from $wpdb->users");
$query2 = $wpdb->get_results("SELECT * FROM $wpdb->users as users, $wpdb->usermeta as meta WHERE users.ID = meta.user_id AND meta.meta_key = 'nickname'");
$c = count($query);
for($i = 0; $i < $c; $i++) {
for($j = $i+1; $j < $c; $j++) {
if($query[$i]->display_name == $query[$j]->display_name){
wp_update_user(
array(
'ID' => $query[$i]->ID,
'display_name' => $query[$i]->user_login
)
);
}
if($query2[$i]->meta_value == $query2[$j]->meta_value){
update_user_meta($query2[$i]->ID, 'nickname', $query2[$i]->user_login, $prev_value);
}
}
}
}
// Call the function
display_name_and_nickname_duplicate_check();
/*
* Calling the display_name_and_nickname_duplicate_check() again when a new user is registered
*/
add_action( 'user_register', 'check_nickname', 10, 1 );
function check_nickname() {
display_name_and_nickname_duplicate_check();
}
লিঙ্ক: http://bappi-d-great.com/unique-display-name-and-nickname-in-wordpress/