12 ответ(ов) в теме
pro100maxik
не в сети 2 месяца
На сайте с 30.04.2017
Участник
Тем 15
Сообщения 58
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
не в сети 2 часа
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11770
2
00:05

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

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

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

0
pro100maxik
не в сети 2 месяца
На сайте с 30.04.2017
Участник
Тем 15
Сообщения 58
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
не в сети 2 часа
На сайте с 27.01.2013
Модератор
Тем 26
Сообщения 11770
4
01:25

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

1
pro100maxik
не в сети 2 месяца
На сайте с 30.04.2017
Участник
Тем 15
Сообщения 58
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
не в сети 8 часов
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 10451
6
09:10

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

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

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

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

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

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

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

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

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

0
pro100maxik
не в сети 2 месяца
На сайте с 30.04.2017
Участник
Тем 15
Сообщения 58
10
12:12

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

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

0
pro100maxik
не в сети 2 месяца
На сайте с 30.04.2017
Участник
Тем 15
Сообщения 58
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Причина: не указано
3
bek
не в сети 2 дня
На сайте с 10.12.2013
Участник
Тем 13
Сообщения 44
12
22:45

pro100maxik, спасибо очень полезно и актуально!

Вопрос к разработчикам wp-recall - а как сделать так, чтобы каждое следующее обновление не затирало изменения предложенные выше. Нельзя сделать, чтобы плагин брал тот слаг, который по умолчанию (или изменен) на wordpress сайте?

Хм, проверил только что - простой код смены слага вставленный в function.php прекрасно меняет слаг author. Без всяких плагинов и правок в самом wp-recall.

Вот код, который я вставил:
add_action('init','change_author_permalinks'); function change_author_permalinks() { global $wp_rewrite; $wp_rewrite->author_base = 'member'; // Change 'member' to be the base URL you wish to use $wp_rewrite->author_structure = '/' . $wp_rewrite->author_base. '/%author%'; }

Так и должно быть? :)

Редакции сообщения
15.05.2018 22:59bekПричина: не указано
0
Вы не имеете права на публикацию сообщений в этой теме