13ответ(ов) в теме
pro100maxik
не в сети 3 года
На сайте с 30.04.2017
Участник
Тем 16
Сообщения 60
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)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
2
00:05

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

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

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

0
pro100maxik
не в сети 3 года
На сайте с 30.04.2017
Участник
Тем 16
Сообщения 60
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)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
4
01:25

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

1
pro100maxik
не в сети 3 года
На сайте с 30.04.2017
Участник
Тем 16
Сообщения 60
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
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
6
09:10

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

1
pro100maxik
не в сети 3 года
На сайте с 30.04.2017
Участник
Тем 16
Сообщения 60
7
11:18

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

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

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

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

1
Вова (Otshelnik-Fm)
не в сети 4 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18654
9
12:03

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

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

0
pro100maxik
не в сети 3 года
На сайте с 30.04.2017
Участник
Тем 16
Сообщения 60
10
12:12

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

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

0
pro100maxik
не в сети 3 года
На сайте с 30.04.2017
Участник
Тем 16
Сообщения 60
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Причина: не указано
4
bek
не в сети 5 лет
На сайте с 10.12.2013
Участник
Тем 14
Сообщения 46
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Причина: не указано
1
Whatis
не в сети 4 года
На сайте с 09.10.2020
Участник
Тем 4
Сообщения 10
13
18:54

В 2020 году изменился малясь способ изменения...
А все потому-что определение страницы автора и подключение шаблона было так:

if($u!='author') continue;

А стало так:

if ( $u != $wp_rewrite->author_base ){
   continue;
}

И почему-то простая привязка к action-у init и в нем изменение $wp_rewrite->author_base срабатывало позже, чем срабатывал этот код, и поэтому я начал пересматривать все action-ы которые идут до init и по порядку начал их проверять. Сработал этот код:

add_action( 'after_setup_theme', function(){
   global $wp_rewrite;
   $wp_rewrite->author_base = 'account';
}, 1);

И потом остается просто переделать ссылки( кстати то, что предложено выше работает корявенько. Ссылка начинает дублироваться типа:

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

://сайт/author/name ), и в общем у меня получился такой рабочий код:

add_action( 'after_setup_theme', function(){
	global $wp_rewrite;
	$wp_rewrite->author_base = 'account';
}, 1);

// Первая часть //
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/|", 'account/', $link);
    return $link;
}

+ тут ещё проблема в том, что если у вас не будет стоят в постоянных ссылках "/%postname%/", то изменение ссылок не будет срабатывать и вас закинет на "http://сайт/?author=...", так что тут ещё нужно додумывать
+ Ещё есть проблема с выводом названия страницы, который прописывается в теге head в теге title. У меня высвечивалась( Неизвестная страница ) и нужно добавить в код сайта вот такой код:
add_filter( 'pre_get_document_title', 'my_pre_get_document_title' );
function my_pre_get_document_title( $title ) {
  global $user_LK;

  if ( (boolean) $user_LK ) {
    $title = 'Профиль пользователя - ' . get_the_author_meta( 'display_name', $user_LK );
  }

  return $title;
}

Надеюсь кому-то помогу!

Редакции сообщения
29.10.2020 18:55WhatisПричина: Немного непонятный код
29.10.2020 18:56WhatisПричина: Немного непонятный код
29.10.2020 19:00WhatisПричина: Немного непонятный код
29.10.2020 19:12WhatisПричина: Добавить ещё
04.11.2020 22:54WhatisПричина: Ещё кое-что добавить.
1
Вы не имеете права на публикацию сообщений в этой теме