11 ответ(ов) в теме
pro100maxik
не в сети 11 часов
На сайте с 30.04.2017
Участник
Тем 14
Сообщения 54
1
23:17

Версия WP-Recall: 16.8.10

Доброго времени суток. Возникла проблема следующего характера. Личный кабинет выводится на странице автора (domain.ru/author/user). Изменил slug "author" на "user", но recall его не воспринимает, то есть ссылки везде так и выводятся "domain.ru/author/user" вместо нового "domain.ru/user/user", а при прямом ручном переходе ЛК не работает (пример на скриншоте). Как исправить? Заранее признателен.

0
Otshelnik-Fm
не в сети 5 часов
На сайте с 27.01.2013
Модератор
Тем 22
Сообщения 9578
2
00:05

pro100maxik сказал(а)
Изменил slug "author" на "user"

как изменили?

author - это стандартный ВП механизм. Его так вордпресс выводит. К плагину тут врядли отношение есть

0
pro100maxik
не в сети 11 часов
На сайте с 30.04.2017
Участник
Тем 14
Сообщения 54
3
00:17

Otshelnik-Fm сказал(а)

pro100maxik сказал(а)
Изменил slug "author" на "user"

как изменили?

author - это стандартный ВП механизм. Его так вордпресс выводит. К плагину тут врядли отношение есть

С помощью функции:
add_action('init', 'cng_author_base'); function cng_author_base() { global $wp_rewrite; $author_slug = 'user'; // slug name $wp_rewrite->author_base = $author_slug; }

Также с помощью плагина "Edit Author Slug" пробовал. Эффект одинаковый.

0
Otshelnik-Fm
не в сети 5 часов
На сайте с 27.01.2013
Модератор
Тем 22
Сообщения 9578
4
01:25

неверное решение. Этот метод не везде внутри вордпресса исправляет. Я гуглил как-то давно этот вопрос - предложенные, более функциональные методы, тоже имели проблемы и отказался от затеи.

1
pro100maxik
не в сети 11 часов
На сайте с 30.04.2017
Участник
Тем 14
Сообщения 54
5
01:36

Otshelnik-Fm сказал(а)
неверное решение. Этот метод не везде внутри вордпресса исправляет. Я гуглил как-то давно этот вопрос - предложенные, более функциональные методы, тоже имели проблемы и отказался от затеи.

Вот рабочая функция. Убирает полностью "author". Проблема только в том, что recall делает ЛК не активным.По идее должен быть выход.

// Первая часть //
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) {
    global $wpdb;
    $author_rewrite = array();
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");  
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }  
    return $author_rewrite;
}
 
// Вторая часть //
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}

Редакции сообщения
30.11.2017 01:51pro100maxikПричина: не указано
30.11.2017 01:52pro100maxikПричина: не указано
30.11.2017 01:53pro100maxikПричина: Опечатка
0
Андрей CS
не в сети 9 часов
На сайте с 30.11.-0001
Администратор
Тем 70
Сообщения 8974
6
09:10

откройте файл wp-recall.php, посмотрите метод init_frontend_globals() на 238 строке, пробуйте там заменить входеждения 'author' на нужное значение

1
pro100maxik
не в сети 11 часов
На сайте с 30.04.2017
Участник
Тем 14
Сообщения 54
7
11:18

Андрей CS сказал(а)
откройте файл wp-recall.php, посмотрите метод init_frontend_globals() на 238 строке, пробуйте там заменить входеждения 'author' на нужное значение

Спасибо, Андрей. Работает. Только теперь не меняет пути в виджете, блоке автора и в комментариях.

0
Андрей CS
не в сети 9 часов
На сайте с 30.11.-0001
Администратор
Тем 70
Сообщения 8974
8
11:59

в смысле формируется некорректный путь в ссылке до личного кабинета? урл формируется стандартной функцией get_author_posts_url(), надо смотреть, что внутри нее не дает это сделать, это уже ядро ВП

1
Otshelnik-Fm
не в сети 5 часов
На сайте с 27.01.2013
Модератор
Тем 22
Сообщения 9578
9
12:03

Андрей CS сказал(а)
урл формируется стандартной функцией get_author_posts_url(), надо смотреть, что внутри нее не дает это сделать, это уже ядро ВП

- да вот в том то и дело что ВП не дает так вот разом все сменить. Говорил же выше - проблем выскакивало в самых неожиданных местах я и бросил эту затею.

0
pro100maxik
не в сети 11 часов
На сайте с 30.04.2017
Участник
Тем 14
Сообщения 54
10
12:12

Андрей CS сказал(а)
в смысле формируется некорректный путь в ссылке до личного кабинета? урл формируется стандартной функцией get_author_posts_url(), надо смотреть, что внутри нее не дает это сделать, это уже ядро ВП

Да. Ладно. В любом случае спасибо, вечером попробую поковырятся и если получится напишу готовое решение. Надеюсь :mrgreen:

0
pro100maxik
не в сети 11 часов
На сайте с 30.04.2017
Участник
Тем 14
Сообщения 54
11
22:56

Решил данный вопрос, если кому станет интересно, вот таким образом.

Первый вариант полностью убрать "author" оставив только имя пользователя "domain.com/user" добавив ниже приведенную функцию в functions.php своей темы:

// убираем слово "author" из url'a на профиль пользователя
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;
    $author_rewrite = array();
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }   
    return $author_rewrite;
}

add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}
// конец

Далее заходим в /wp-content/plugins/wp-recall/wp-recall.php и на 278 строке меняем:
if($u!='author') continue;

на:
if($u!='') continue;

На этом первый вариант окончен.

Второй вариант заменить slug "author" на свой в произвольной форме:
1. Заходим в официальный репозиторий WP и устанавливаем плагин

Вы не можете просматривать опубликованные ссылки

. В настройках плагина выставляем свое произвольное значение вместо "author".
2. Далее нам нужно изменить все существующие пути автора в WP на новые, заданные нами. Для этого заходим в functions.php своей темы и добавляем следующую функцию, предварительно заменив значение profile на свое, которое выставили в Edit Author Slug:

add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", 'profile/', $link); //меняем "profile" на свое значение выставленное в плагине Edit Author Slug
    return $link_base . $link;
}

3. И на последок заходим в /wp-content/plugins/wp-recall/wp-recall.php и на 278 строке меняем:
if($u!='author') continue;

на:
if($u!='ваше значение') continue;

в котором нужно будет заменить строчку "ваше значение" на свой вариант, выставленный в Edit Author Slug.
На этом настройка закончена. Спасибо Андрей CS за помощь.

P.S. Если не хотите грузить свой сайт лишними плагинами, можете вместо плагина добавить следующую функцию в functions.php своей темы, предварительно заменив profile на свое значение:

add_action('init', 'cng_author_base');
function cng_author_base() {
    global $wp_rewrite;
    $author_slug = 'profile'; //значене slug'а
    $wp_rewrite->author_base = $author_slug;
}

Редакции сообщения
30.11.2017 23:03pro100maxikПричина: Добавил код.
30.11.2017 23:04pro100maxikПричина: не указано
1
Вы не имеете права на публикацию сообщений в этой теме