Шорткод для вставки меню в тело страницы?

1 февр. 2018 г., 20:18:13
Просмотры: 45.6K
Голосов: 4

Мне нужно вставить меню в текст одной страницы. Я нашел эти два плагина, но ни один из них не работает. Оба не обновлялись 6 лет:

https://wordpress.org/plugins/custom-menu/

https://wordpress.org/plugins/custom-menu-shortcode/

Я нашел этот код для создания собственного шорткода

function print_menu_shortcode($atts, $content = null) {
extract(shortcode_atts(array( 'name' => null, 'class' => null ), $atts));
return wp_nav_menu( array( 'menu' => $name, 'menu_class' => $class, 'echo' => false ) );
}

add_shortcode('menu', 'print_menu_shortcode');

И тогда шорткод должен быть:

[menu name="-название вашего меню-" class="-ваш класс-"]

Это работает, но класс совсем не выводится. Что не так в функции? Мне нужно вывести класс.

2
Комментарии

Нет, WordPress сам по себе этого не делает. Да, вы можете создать функцию для этого.

janh janh
1 февр. 2018 г. 21:53:26

Я только что отредактировал свой вопрос, чтобы вставить код

JPashs JPashs
2 февр. 2018 г. 10:07:43
Все ответы на вопрос 2
0
12

Этот код должен работать. Вы используете "myclass" как класс, а не ".myclass"?

Это для конкретного случая, когда класс всегда будет одинаковым? Если вам нужно использовать это только в одном месте, вы можете сделать так:

    function print_menu_shortcode($atts, $content = null) {
extract(shortcode_atts(array( 'name' => null, 'class' => null ), $atts));
return wp_nav_menu( array( 'menu' => $name, 'menu_class' => 'myclass', 'echo' => false ) );
}

add_shortcode('menu', 'print_menu_shortcode');

Затем замените раздел 'menu_class' => 'myclass' на нужный вам класс. Это позволит избежать необходимости указывать класс. И снова, не используйте "." перед классом здесь.

Использование шорткода:

[menu name="menu_name"]
2 февр. 2018 г. 20:47:27
0

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

function print_menu_shortcode($atts=[], $content = null) {
    $shortcode_atts = shortcode_atts([ 'name' => '', 'class' => '' ], $atts);
    $name   = $shortcode_atts['name'];
    $class  = $shortcode_atts['class'];
    return wp_nav_menu( array( 'menu' => $name, 'menu_class' => $class, 'echo' => false ) );
}

Шорткод: [menu name="menu_name" class="your_class"]

Надеюсь, это поможет тем, кому может понадобиться в будущем!

15 июн. 2021 г. 09:24:05