<<<Размещаем вкладки ЛК на всех страницах сайта! (часть 2)
Всем привет!
В прошлых частях "Размещаем вкладки ЛК на всех страницах сайта!", мы вывели гостевые вкладки на всех страницах сайта, потом смогли вывести все вкладки ЛК на всех страницах сайта, в этой части поговорим о том, как их сделать активными!
В php есть очень полезный инструмент, кодеры его называют одним словом "Регулярка"!
Регуля́рные выраже́ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.
Выписка из Википедии
Сегодня мы решим вопрос касаемо не хватающей кракозябры user=1&, решим его с помощью магии регулярки!
В прошлых статьях у нас получился код выводящий все вкладки на всех страницах,
global $user_ID; echo apply_filters( 'the_button_wprecall', $content, $user_ID );
единственное активных только на странице ЛК.
Давайте немного изменим наш код, засунем наш фильтр в переменную которой дадим название $rcl_menu_button
$rcl_menu_button = apply_filters( 'the_button_wprecall', $content, $user_ID );
и сразу выведем ее на сайт
echo $rcl_menu_button;
, на сайте получаем тоже самое, но теперь у нас наши вкладки в переменной и мы можем ее использовать в регулярных выражениях!
Есть регулярка,
preg_replace("/A/","B" );
которая заменяет одно на другое, ее мы и будем использовать, в примере «А» меняем на «Б».
Для начала рассмотрим и сравним две ссылки/вкладки, не активной и активной:
http://домен/profil/?tab=profile
http://домен/profil/?user=1&tab=profile
, сравним их и увидим, что нам нужно заменить:
http://домен/profil/?tab=profile
http://домен/profil/?user=1&tab=profile
, я выделю красным то, что мы будем удалять и выделил зеленым то, что будем вставлять с помощью регулярки. Обратите внимание, что вместо единички мы будем добавлять переменную $user_ID, так как нам нужно получать ID авторизованного пользователя!
Таким образом, наше регулярное выражение будет выглядеть следующим образом:
preg_replace("/tab/","user=$user_ID&tab",$rcl_menu_button);
где мы заменяем tab, на user=$user_ID&tab и подставляем ID пользователя с помощью переменной $user_ID.
Все, теперь собираем все вместе и проверяем результат, распишу все по этапам из чего будет состоять наш код:
1 – глобальные переменные, а именно $user_ID
global $user_ID;
2 – фильтр заключенный в переменную $rcl_menu_button
$rcl_menu_button = apply_filters( 'the_button_wprecall', $content, $user_ID );
3 – полученное нами регулярное выражение
$rcl_menu_button = preg_replace("/tab/","user=$user_ID&tab",$rcl_menu_button);
4 – вывод переменной $rcl_menu_button на сайт
echo $rcl_menu_button;
В итоге получаем следующий код, позволяющий выводить активные вкладки на всех страницах сайта:
global $user_ID; $rcl_menu_button = apply_filters( 'the_button_wprecall', $content, $user_ID ); $rcl_menu_button = preg_replace("/tab/","user=$user_ID&tab",$rcl_menu_button); echo $rcl_menu_button;
Все, мы решили поставленную задачу, а именно вывели активные вкладки на всех страницах сайта, причем полученные нами вкладки, сортируются и переименовываются с помощью пункта меню "Настройки вкладок" так же как и вкладки в ЛК! Данный способ работает, если ЛК выводится с помощью шорткода, не работает с ЛК на странице автора, но если пошаманить с регулярными выражениями и настройками постоянных ссылок, то и это не проблема!
Дальше, полученный код можно пропускать через регулярные выражения, дописывать классами и стилями и получать полноценное меню, в принципе уже есть рабочее дополнение по выводу меню ЛК в header, но я пока его не выкладывал!
Предлагаю обсудить, услышать критику и замечания, а так же комментария по применению и доработке данного способа!
P.S. я не так давно начал кодить и я понимаю, что иногда мои методы колхозны и не профессиональны, но для меня главное, что они работают
Всем добра и позитива!!!
3 строчки кода на 3 серии урока... 😕
Уж чем так, лучше html-ом вбить в реколлбар или куда там надо. html-ом мы не получим переизбыток кнопок (например если вкладок в лк более 10-ти) - они ведь не все нужны по сути. Конечно кому как.
Отшельник, прошу прощения, не знаю как вас по имени, но бывают ситуации, когда нужно вывести и все вкладки, к тому же что бы не было перенасыщение, кто мешает сделать выпадающее меню...
HTML-ем конечно можно, но тут стояла совсем иная задача и я разбирал именно ее!
На три урока, так как не хотел тупо выложить код! Мне важно было изложить ход действий, моих мыслей и не расписывать это одним большим куском! 😉
В конце, или в начале, надо сделать ссылки на первые части уроков. Тогда будет полная картина. Не спорю - может быть кому-нибудь и понадобится вывести все вкладки.
СПС за совет, сейчас добавлю! 😉
Вот как пример, данный способ применения вкладок ЛК на всех страницах сайта, смотрим скрин или переходим сюды: http://web-blog.su/ ! 😀