На форуме вордпресса ни на ангоязычном, ни на русском никто ничерта как всегда не понимает.
Собственно меня интересует получение ссылки на профиль ни по никнейму, а по 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) ); }