И так... Сегодня хочу рассказать вам как можно добавить страницу личного кабинета (ЛК) отличную от стандартной страницы, за вывод содержимого, который отвечает файл autor.php. Если вы пользуетесь плагином WP_RECALL, вы должны были уже быть знакомым с этим файлом. Так как для работы плагина необходимо вызвать функцию wp_recall().
Для начала немного теории. Зачем автор задействовал именно этот файл? Дело в том что в Вордпрессе на запросы к определённым данным, в данном случае данные пользователя, за это отвечает отдельный файл. Самым главным файлом является index.php, если WordPress не находит нужный ему файл для вывода определённого контента, то загружается именно этот файл.
Данную статью я решил написать потому, что на сайте один из пользователей задал вопрос "Как добавить ЛК на любой странице сайта?". И ответ был "Никак", потому что за вывод страниц отвечает файл page.php, а в него, по умолчанию, не передаются данные пользователя.
И как вы уже наверное догадались, простым нажатием кнопочки это не сделать, поэтому будем писать дополнительные функции. Как всегда для этого нам понадобиться наш файл functions.php, прямые руки, PHP редактор (например Notepad++) ну и файл шаблона пусть будет page.php. Я буду показывать на примере шаблона который идёт в комплекте с WordPress, под названием twentythirteen.
Теперь нам нужно сделать копию файла page.php и переименовать его например в profile.php. Открываем наш новый файл в PHP редакторе. Если вы хотите что бы под личным кабинетом выводились все посты которые были опубликованы пользователем, то ничего не удаляем, а лишь вставляем код if(function_exists('wp_recall')) wp_recall();
в том месте где хотите что бы отображался личный кабинет. Главное что бы это было до начала вызова основного цикла loop или после него. Т.е. либо перед while ( have_posts() ) : the_post();
либо после него endwhile;
. Ну а если вам не нужно показывать публикации пользователя, а нужен только ЛК, то просто удалите весь этот цикл. И вместо него вставьте код if(function_exists('wp_recall')) wp_recall();
Далее нам необходимо сообщить вордпрессу какой файл у нас отвечает за вывод личного кабинета. Открываем наш файл functions.php и пишем в нём следующий код:
function loadWordPressTemplate($template) { global $wp_query; if ($wp_query->is_404) { $wp_query->is_404 = false; $wp_query->is_archive = true; } header("HTTP/1.1 200 OK"); include($template); exit; } function templateRedirect() { global $wp_query; if( array_key_exists('author_name', $wp_query->query_vars) && !empty($wp_query->query_vars['author_name']) ) { loadWordPressTemplate(TEMPLATEPATH . '/profile.php'); } } add_action('template_redirect', 'templateRedirect');
Особо в подробности вас вникать не буду, кому интересно как это работает сам узнает. А остальным главное что бы это работало =) Скажу лишь то, что одна функция у нас отсекает ошибку 404, а другая проверяет если ли запрос к личному кабинету пользователя или нет, и если есть такой запрос то загружает наш файл profile.php.
На этом этапе можно остановиться. Сейчас мы получили только отдельный файл шаблона ЛК, который можно оформить как хотим, но по сути это можно было сделать и со стандартным шаблоном author.php. Но при этом мы так же имеем стандартную ссылку на личный кабинет /author/kalbac . Мне захотелось что бы ссылка выглядела немного иначе. Например: /profile/kalbac.html Для этого нам добавить ещё одну функцию в файл functions.php
function change_author_permalinks() { global $wp_rewrite; $wp_rewrite->author_base = 'profile'; $wp_rewrite->author_structure = '/' . $wp_rewrite->author_base. '/%author%.html'; $wp_rewrite->flush_rules(); } add_action('init','change_author_permalinks');
После этого вам, возможно ещё, придётся обновить структуру постоянных ссылок. Для этого просто заходим в админку вашего сайта, и в разделе "Параметры" -> "Постоянные ссылки" нажимаем кнопку "Сохранить изменения"
Спасибо, что дочитали до конца. Надеюсь вам понравилась статья. Ставим лайки =)
Что ж, очень интересно, но решает ли ваш способ задачу по размещения ЛК на любой странице?
Как я понял тут приведен способ обойти необходимость создания файла author.php, путем создания другого. По мне так это крюк вместо прямого пути.
А вот к примеру создать страничку в админке и в ней вывести ЛК, ваш способ может помочь?)
Андрей, мой ответ нет! А знаеТе почему?)) Короткий ответ - потому, что нету apply_filters и do_action. А вот длинный ответ. У себя я это организовал путём создания шорткода [wp_recall], который, как вы знаете, можно размещать где угодно. И всё бы ни чё, если бы по переходу на страницу с этим шорткодом открывалась не только ЛК текущего пользователя, но и любого другого. Для этого мне пришлось дописывать/переписывать саму функцию wp_recall(). Но так как большинство читателей этого сайта, как я уже понял, вообще не бум-бум с PHP, то не стал описывать тут этот способ. Причём мне ещё нужно было в настройках плагина добавить ещё один пункт "Страница профиля" с выпадающим списком. Для того что бы плагин знал на какую страницу необходимо переадресовывать пользователя.
В общем думаю, что из всего этого комментария, только ты меня и понял сейчас =)))
ну хорошо) а почему бы все же не реализовать вывод ЛК на странице созданной через админку и имеющей идентификатор 50(для примера)? Почему бы не создать отдельный файл шаблона этой страницы страницы с этим идентификатором (page-50.php) и не вставить туда этот код
if(function_exists('wp_recall')) wp_recall();
? А дальше просто использовать твои функции где вместо profile.php прописать page-50.phpВот ещё такой вариант
add_shortcode('wp_recall','wp_recall_shortcode_func');
function wp_recall_shortcode_func ( $atts, $content = null ) {
if(function_exists('wp_recall')) return wp_recall();
}
Вставляем этот код в functions.php, сохраняем. Далее создаём страницу в админке и вставляем шорткод
[wp_recall]
Теперь на этой странице мы видем что шорткод работает и плагин функционирует, нооо.. Самое главное НО - это то, что ворпресс не получил значение author_name, а что бы его получить нужно дописывать функцию плагина wp_recall(). Но это уже совсем другая история =)))