Как я могу разделить неосновное меню основного домена мультисайта на все поддомены в виде вкладок в виде ссылок?

У меня есть мультисайт с основным доменом (www.valleysgroup.co.uk) и различные поддомены (brickslipsdirect.valleysgroup.co.uk, tradeporcelain.valleysgroup.co.uk и т. д.).

Я хочу поделиться настраиваемой верхней панелью, содержащей меню, которое не является основным меню основного домена, от основного домена до всех поддоменов. В этом меню будут простые ссылки на каждый из поддоменов, но в виде вкладок. Вкладка 1 приведет к brickslipsdirect.valleysgroup.co.uk, вкладка 2 приведет к tradeporcelain.valleysgroup.co.uk и т. д.

Я провел несколько дней, пробуя различные решения, которые затем наткнулся на плагин: Мультисайтовое общее меню

Это прекрасно работает, за исключением того, что будет применяться только основное меню из основного домена, а не другие меню. В идеале я хотел бы создать новое расположение меню с именем Глобальная верхняя панель в основном домене и всех подчиненных, создать мое меню с именем Глобальное меню на основном домене, а затем перетащите меню во все подчиненные.

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

Пожалуйста, смотрите изображение для ясности того, что я ищу в отношении внешнего вида основного домена и сабвуферов:

Глобальная верхняя панель

Любая помощь будет принята с благодарностью!


person Dayley    schedule 11.02.2021    source источник
comment
Я много работаю с несколькими сайтами и могу сказать вам, что, хотя обмен данными между сайтами возможен на 100%, это почти всегда тяжелая битва. В настоящее время мы создаем установку для 30 сайтов для университета, и нижний колонтитул будет общим для всех 30 сайтов. Там есть несколько меню, и мы могли бы поделиться ими, но мы решили просто сохранить эту информацию в HTML, потому что на самом деле она не сильно изменится. Я не знаю, так ли это для вас, но я бы рекомендовал взвесить это.   -  person Chris Haas    schedule 11.02.2021
comment
Если вы хотите продолжить этот путь, я бы просто использовал switch_to_blog, делал обычное меню WordPress, а затем вызывал restore_current_blog и не возился с плагином.   -  person Chris Haas    schedule 11.02.2021
comment
Будет ли еще способ возиться с меню, чтобы получить внешний вид вкладок, хотя, возможно, с помощью CSS? Чтобы на вкладке было видно, на каком из поддоменов находится пользователь?   -  person Dayley    schedule 11.02.2021
comment
Абсолютно. Фактический макет должен быть довольно простым, но будет зависеть от вашей темы. Чтобы выяснить, какой сайт является текущим относительно каждого элемента меню, вы можете использовать такие функции, как get_site_url и get_current_blog_id. То, как вы это сделаете, будет зависеть от того, хотите ли вы использовать WordPress для управления меню или просто делаете это на PHP. Для последнего вы можете просто использовать простой цикл for и проверить, является ли текущий элемент текущим сайтом, используя функции, которые я упомянул.   -  person Chris Haas    schedule 11.02.2021


Ответы (2)


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

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

// Just the Site IDs from WordPress
$siteIds = [2, 3, 4];

// This will hold <li> tags for each
$menuItems = [];
foreach ($siteIds as $siteId) {

    // Get the WordPress WP_Site object
    $site = get_site($siteId);

    // Sanity check that it was found and public
    if (!$site || !$site->public) {
        continue;
    }

    // Optional attributes classes on the <li>, default none
    $extraAttributes = '';

    // For the current site, add a class
    if ($siteId === get_current_blog_id()) {
        $extraAttributes = ' class="current-site"';
    }

    // Append an HTML node
    $menuItems[] = sprintf(
        '<li %3$s><a href="%2$s">%1$s</a></li>',
        esc_html($site->blogname),
        esc_attr($site->siteurl),
        $extraAttributes
    );
}

// Make sure the above worked
if ($menuItems) {
    // Output wrapped
    echo '<ul>' . implode('', $menuItems) . '</ul>';
}
person Chris Haas    schedule 12.02.2021
comment
Если я прав, это добавит имена поддоменов, но предпочтительно я хотел бы использовать меню из моего домена, где имена ссылок полностью настраиваемы. - person Dayley; 16.02.2021

Теперь я пошел дальше и добавил свое новое расположение в меню под названием Глобальная верхняя панель, используя в своих основных доменах следующее: Дочерняя темаФункции. .php файл:

function register_new_menu_location() {
   register_nav_menu('global-menu-location',__( 'Global Top Bar' ));
}
add_action( 'init', 'register_new_menu_location' );

Я также создал свое меню с именем Общее меню и пометил, чтобы оно отображалось во вновь созданном месте.

Снимок экрана глобального меню

Затем я зашел в файл Child ThemeHeader.php и добавил следующее, которое, кажется, работает:

switch_to_blog(1);
wp_nav_menu( array(
    'menu' => '16',
    'container_class' => 'GlobalMenuContainerClass',
    'menu_class' => 'GlobalMenuClass'
) );
restore_current_blog();

Меню «16» — это идентификатор моего меню, найденный в моем основном домене. Это отображает меню для всех поддоменов следующим образом:

Меню верхней панели

Я добавил немного CSS, чтобы немного оживить его и сделать его более похожим на вкладки, используя следующий код CSS:

.GlobalMenuContainerClass {
  height: 45px;
  padding-top: 8px;
  padding-right: 100px;
  padding-left: 100px;
  width: 100%;
  margin-right: auto;
  margin-left: auto;
  background: #cc2325;
}

.GlobalMenuClass {
  list-style: none;
  margin: 0;
  padding: 0;
}

.GlobalMenuClass li a {
  text-decoration: none;
  float: left;
  margin-right: 5px;
  color: white;
  border: 1px solid #777777;
  padding: 5px 10px 5px 10px;
  min-width: 100px;
  text-align: center;
  display: block;
  background: #777777;
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
}

.GlobalMenuClass li a:hover:not(.active) {
  background: #4e4e4e;
  border: 1px solid #4e4e4e;
}

.active {
  background: white;
  color: black;
  border: 1px solid white;
}

И вот как это выглядит сейчас:

конечный результат без .active

Вы можете видеть, что есть другой цвет при наведении для вкладок более темно-серого цвета, но я еще не реализовал CSS для вкладок .active. Пока не совсем уверен, как я это сделаю.

Надеюсь, это может помочь другим в подобной ситуации.

person Dayley    schedule 16.02.2021