Поле входа/выхода в строке меню не на своем месте и не работает (Wordpress)

Последние два дня я пытался узнать, как добавить красивое поле входа/выхода/регистрации в верхнюю строку меню моего сайта. Я только недавно начал знакомиться с редактором. Я откопал этот код здесь, в stackoverflow. Мне нравится, как он выглядит, и я надеюсь его немного изменить.

    /* Custom Login Menu Field */
add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);

function add_login_logout_link($items, $args) {
// start buffering
ob_start();
// this is the actual form function
wp_login_form($args); // $args optional see below ..
// get buffering
$loginoutform = ob_get_contents();
// clean buffering
ob_end_clean();
$items .= $loginoutform ; // concatenate buffering with items ...
return $items;
}

Я хотел бы сделать так, чтобы область поля входа располагалась по центру горизонтально в середине верхней/основной строки меню. Как вы можете видеть, в настоящее время он полностью смещен вправо и растягивает все это. Когда я его использую, он входит в систему, но не переключается на опцию «выход из системы» при входе в систему.

Если у кого-то есть какие-либо знания в этой области о том, как я могу добавить или изменить свой стартовый код, я был бы очень признателен. С уважением - Сайфер.

Сайт: cypherbeats.com Тема: Jarvis (последняя) Код добавлен в functions.php


person Cypher    schedule 03.01.2016    source источник


Ответы (1)


На момент написания я не вижу эту панель входа в систему, о которой вы говорите. Поэтому не могу сказать, работает ли ваш код.

В своем коде вы можете использовать функцию is_user_logged_in() в качестве условия для проверки того, вошел ли посетитель в систему. Поэтому вы можете использовать ее, чтобы решить, следует ли выводить код входа или выхода. Функция wp_loginout() отображает кнопку выхода из системы. Итак, что-то вроде этого может работать:

add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);

function add_login_logout_link($items, $args) {
// start buffering
ob_start();
// this is the actual form function
if( !is_user_logged_in() )
    wp_login_form($args); // $args optional see below ..
else
    wp_loginout();
// get buffering
$loginoutform = ob_get_contents();
// clean buffering
ob_end_clean();
$items .= $loginoutform ; // concatenate buffering with items ...
return $items;
}

Предупреждение. Я не проверял это, и это всего лишь предложение для начала.

Вот альтернативный подход, который может быть удобным. Сначала установите этот подключаемый модуль: https://wordpress.org/plugins/nav-menu-roles/ Затем создайте ссылку для входа, которая будет видна только для вышедших из системы пользователей, и ссылку для выхода, которая будет видна только для вошедших в систему пользователей. Затем вы можете написать некоторый javascript, который вызывает всплывающее окно формы входа в лайтбокс при нажатии кнопки входа. Я использую этот подход на странице https://ptofchoice.com.au/.

person James Jones    schedule 03.01.2016
comment
Благодарю за ваш ответ! Я ценю, что вы нашли время, чтобы помочь мне. И извините за то, что меня не было в то время, когда вы пошли проверять, я добавил некоторый код самостоятельно и вызвал фатальную ошибку во всем моем Wordpress, и мне пришлось восстановить резервную копию ... лол. Я собираюсь дать вашей информации шанс и очень скоро отвечу с результатами. - person Cypher; 03.01.2016
comment
Переключатель для отображения выхода сработал :) Меню снова растягивается, чтобы показать форму, и после входа в систему опция выхода появляется рядом с моей опцией меню поддержки. К сожалению, я недостаточно осведомлен, чтобы склеить эту идею в отполированную рабочую функцию. Я проверил ваш сайт и должен сказать, что мне нравится его внешний вид. Определенно, это был бы лучший подход для меня, но я упрямый и не хочу отказываться от этого. - Кроме того, я пока оставлю этот код входа, чтобы вы могли еще раз взглянуть на то, что происходит. - person Cypher; 03.01.2016
comment
В основном вы пытаетесь сделать вход в систему частью меню. Поскольку вы размещаете форму входа в центре, ее может быть проще вывести в коде, где вы создаете заголовок. Сделать форму красивой — это отдельная проблема, чтобы заставить ее работать. - person James Jones; 03.01.2016
comment
Да, не думаю, что я действительно возражаю, как хорошо это выглядит сейчас ^-^ Мой header.php ничего не дал, поэтому я попробовал свой menu_section.php, просто возился, и код поместил себя, написанный в середине меню. когда я обновил домашнюю страницу (смущенно) Но, по крайней мере, это дало мне подсказку. Я хотел бы показать вам мой код menu_section, чтобы посмотреть, сможете ли вы найти подходящее место для добавления в мой код входа. Могу ли я вставить это в комментарий здесь? - person Cypher; 03.01.2016
comment
Я бы посоветовал вам создать новый вопрос и опубликовать ссылку. Ваша форма входа не будет частью меню. Я настоятельно рекомендую не впихивать его в какой-либо код меню. - person James Jones; 03.01.2016
comment
Спасибо за отмеченный ответ! Когда вы публикуете другой вопрос, обязательно включите код header.php. Мне нужно лечь спать, поэтому я не смогу атаковать его около 10 часов. - person James Jones; 03.01.2016
comment
Эй, нет проблем. Я очень благодарен за вашу помощь. Мне было сложно все уложить в голове, поэтому кто-то, кто нашел время, чтобы помочь мне учиться, просто великолепен. Вот продолжение сообщения: stackoverflow.com/questions/34578323/ - person Cypher; 03.01.2016