14ответ(ов) в теме
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
1
20:17

На форуме вордпресса ни на ангоязычном, ни на русском никто ничерта как всегда не понимает.
Собственно меня интересует получение ссылки на профиль ни по никнейму, а по id.

Например:
Сейчас //sitename.ru/author/user
Хочу получить //sitename.ru/author/49

Не смог сделать так, чтобы выбирал по nicename а выводил id
Ссылка такого вида получается (//sitename.ru/author/49), но ведет на страницу с nicename=49, которой не существует.

Решил пойти в лоб и при регистрации записывать ID в user_nicename. Вот тут и произошла загвоздка. Не могу понять как происходит запись.
Что и куда передается? Понятное дело что используется wp_insert_user, но я не нашел то что передается в массиве. Где все это дело находится в файлах WP? Confused

Короче:
У меня не получается записать ID в user_nicename
Произвольное число записывается, но $ID не записывает ничего. Как я понимаю ID генерируется где то дальше в цикле.
Как это решить?

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
2
20:59

а /?author=ID не работает?

0
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
3
21:08

Так а мне нужно вообще заменить ссылку. Полностью. И чтобы в все тайтлы и в строке браузера показывалась именно //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, ничего полезного не вынес.

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
4
21:10

ну как я понял, первоочередная задача была получить ссылку на профиль по ID. Вот я и дал решение.
Формируйте ссылку на профиль как /?author=ID и получиться ссылка на профиль этого пользователя, чей идентификатор передан.

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
5
21:15

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);

0
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
6
21:16

Ну блин никто не понимает чего я хочу)

Вот предположим есть юзер с именем user, и второй человек тоже зарегался с ником user у него в итоге будет ссылка с именем user-2
Так вот ссылку то получить то можно через ?author=ID, но /author/user-2 все равно остается доступным, я хочу чтобы доступ был только по id
Не хочу чтобы юзер ни при каких обстоятельствах не смогли узнать что существует ссылка через author/username а тем более user-2

0
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
7
21:22

function get_new_nicename($user_nicename){
global $user_ID;
return  $user_ID;
}
add_filter('pre_user_nicename','get_new_nicename',100);

Первый раз записало 0, последующий вообще ничего не происходит.
с +1 записало 0-2 LaughLaughLaugh

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
8
21:34

ну я понял, проще всего при регистрации пользователя менять его 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); 

0
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
9
21:41

А через что его пропускать? Через функшнс темы?
Нашел тред с такой штукой

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");

Походу это ацкий геморой Cry

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
10
23:06

ну я же дал готовый код. Размещайте его в functions.php

0
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
11
00:06

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'
	)
);}

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
12
10:28

хм, что то странное вы написали, конечно, писать не будет.
Вот правильный вариант.

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)
);
} 

0
Salat Production
не в сети 9 лет
На сайте с 03.12.2013
Участник
Тем 7
Сообщения 44
13
16:27

О. Отлично! Surprised
Вот почему на других форумах нету таких людей как вы, которые действительно шарят, а не пишут глупые советы?
Спасибо, все получилось Cool

0
Андрей CS
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16873
14
16:36

Как правило, таким людям просто некогда на форумах сидеть) Меня там тоже не найдете, я только на свой сайт захожу.

0
Тема закрыта. Публикация новых сообщений запрещена.