На форуме вордпресса ни на ангоязычном, ни на русском никто ничерта как всегда не понимает.
Собственно меня интересует получение ссылки на профиль ни по никнейму, а по id.
Например:
Сейчас //sitename.ru/author/user
Хочу получить //sitename.ru/author/49
Не смог сделать так, чтобы выбирал по nicename а выводил id
Ссылка такого вида получается (//sitename.ru/author/49), но ведет на страницу с nicename=49, которой не существует.
Решил пойти в лоб и при регистрации записывать ID в user_nicename. Вот тут и произошла загвоздка. Не могу понять как происходит запись.
Что и куда передается? Понятное дело что используется wp_insert_user, но я не нашел то что передается в массиве. Где все это дело находится в файлах WP? 
Короче:
У меня не получается записать ID в user_nicename
Произвольное число записывается, но $ID не записывает ничего. Как я понимаю ID генерируется где то дальше в цикле.
Как это решить?
Так а мне нужно вообще заменить ссылку. Полностью. И чтобы в все тайтлы и в строке браузера показывалась именно //sitename.ru/author/49
Либо я чего то не понимаю.
Я сейчас пытаюсь каким либо макаром изменить
if ( empty($user_nicename) )
$user_nicename = sanitize_title( $user_login );
$user_nicename = apply_filters('pre_user_nicename', $user_nicename);
Либо я как то не туда думаю, но по моему было бы норм записывать вместо $user_login $ID.
Думал получать последний из таблицы и +1, но это совсем огород.
Покурил маны на wordpress codex, ничего полезного не вынес.
salatproduction сказал(а)
Я сейчас пытаюсь каким либо макаром изменить
if ( empty($user_nicename) )
$user_nicename = sanitize_title( $user_login );
$user_nicename = apply_filters('pre_user_nicename', $user_nicename);
Попробуйте так:
function get_new_nicename($user_nicename){
global $user_ID;
return $user_ID;
}
add_filter('pre_user_nicename','get_new_nicename',100);
Ну блин никто не понимает чего я хочу)
Вот предположим есть юзер с именем user, и второй человек тоже зарегался с ником user у него в итоге будет ссылка с именем user-2
Так вот ссылку то получить то можно через ?author=ID, но /author/user-2 все равно остается доступным, я хочу чтобы доступ был только по id
Не хочу чтобы юзер ни при каких обстоятельствах не смогли узнать что существует ссылка через author/username а тем более user-2
ну я понял, проще всего при регистрации пользователя менять его nicename.
Делать это надо когда юзер уже будет создан в БД, тк мы должны уже знать его идентификатор, чтобы использовать его для записи в nicename, поэтому необходимо использовать хук "user_register" Он срабатывает после регистрации пользователя.
function get_new_nicename($user_id){
wp_update_user( array ('user_nicename' => $user_id) ) ;
}
add_action('user_register','get_new_nicename',10);
А через что его пропускать? Через функшнс темы?
Нашел тред с такой штукой
function add_ID_v2_wpse_99390($login) {
remove_filter('sanitize_user','add_ID_v2');
$uexists = username_exists( $login );
if (!empty($uexists)) {
$incr = get_option('_uname_incre');
$incr = (!empty($incr)) ? $incr + 1 : 1;
$login = $login.'_'.$incr;
update_option('_uname_incre',$incr);
}
return $login;
}
add_filter('sanitize_user','add_ID_v2_wpse_99390');
$wpdb->get_var("SELECT MAX(ID) FROM {$wpdb->users} LIMIT 1");
0 эффекта. Пишет username-2
Хук срабатывает var_dump($user_id) возвращает int(число)
Не пишет вообще ни в одну таблицу даже так
add_action('user_register','write_new_nicename',10);
function write_new_nicename($user_id){
global $wpdb;
$wpdb->update(
$wpdb->prefix . 'users',
array('user_url' => $user_id),
array(
'ID' => $user_id,
'user_login' => 'display_name'
),
array( '%s' ),
array(
'%d',
'%s'
)
);}
хм, что то странное вы написали, конечно, писать не будет.
Вот правильный вариант.
add_action('user_register','write_new_nicename',10);
function write_new_nicename($user_id){
global $wpdb;
$wpdb->update(
$wpdb->prefix . 'users',
array('user_nicename' => $user_id),
array('ID' => $user_id)
);
}



