Cum elimin UL din wp_nav_menu?

28 ian. 2011, 10:32:27
Vizualizări: 54.1K
Voturi: 23

Am căutat pe acest site și am găsit multe răspunsuri pentru această întrebare. Majoritatea nu funcționează pe tema mea.

Iată o soluție pe care am găsit-o și care funcționează conform nevoilor mele.

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

Acest cod va elimina ul de la începutul și sfârșitul wp_nav_menu(). Așa că în tema mea scriu doar

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

Dar problema apare din nou când nu adaug sau nu activez niciun meniu prin admin. http://domain.com/wp-admin/nav-menus.php

Întrebare:

Cum elimin <div><ul>**</ul></div> indiferent dacă meniul este activ sau nu. Vă rog să mă ajutați


În final am reușit să îl fac să funcționeze :) functions.php

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'default_page_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function default_page_menu() {
   wp_list_pages('title_li=');
} 

header.php

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>
2
Comentarii

De ce vrei să elimini UL-ul când oricum îl adaugi din nou? Poți folosi parametrii menu_class și menu_id pentru a seta un atribut class și/sau id pe elementul UL.

User User
28 ian. 2011 15:52:37

Vreau să folosesc superfish. menu_class și menu_id vor funcționa doar dacă meniul este activat. Dacă meniul nu există, menu_class și menu_id nu se aplică pe <ul> ci pe <div>. De asta sunt atâtea întrebări despre wp_nav_menu(), poți să testezi :)

haha haha
28 ian. 2011 16:10:20
Toate răspunsurile la întrebare 7
7
80

De fapt, WordPress suportă acest lucru în mod implicit:

wp_nav_menu(array(
    'items_wrap' => '%3$s'
));

Valoarea implicită pentru items_wrap este <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.

7 dec. 2011 17:37:47
Comentarii

Acesta este răspunsul corect. Celelalte răspunsuri care sugerează o înlocuire programatică pentru a elimina <ul> după ce a fost deja adăugat sunt pur și simplu înapoiate.

mikemike mikemike
20 mar. 2015 12:51:34

'container' => false dacă doriți să scăpați și de <div>-ul care înfășoară elementele.

George Dimitriadis George Dimitriadis
10 aug. 2017 13:11:13

Este adevărat că este configurat implicit în WordPress. Mulțumesc!

Abdalla Arbab Abdalla Arbab
2 apr. 2018 14:44:36

cel mai bun răspuns, nu este nevoie de hack

Eman Eman
2 feb. 2019 04:58:03

nu funcționează pentru mine în wp 5.2

rafaelphp rafaelphp
30 iun. 2019 19:48:34

Am ales acest răspuns ca fiind cel mai bun. (WP 5.7)

iamdual iamdual
18 mar. 2021 13:37:05

Rețineți că acest lucru va afișa în continuare elementele încadrate în <li>-uri

kontur kontur
21 dec. 2024 16:43:16
Arată celelalte 2 comentarii
6
11

Funcția wp_nav_menu primește un argument fallback_cb care reprezintă numele funcției care va fi executată dacă meniul nu există. Așadar, modifică-ți codul în ceva de genul:

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'fall_back_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function fall_back_menu(){
    return;
}

Poți chiar să elimini containerul din meniu și să faci alte modificări folosind argumente suplimentare trimise către funcția wp_nav_menu.

Sper că acest lucru te ajută.

28 ian. 2011 11:07:37
Comentarii

@בניית אתרים - Mulțumesc pentru explicație. Dar sunt puțin confuz aici. Conform notei din nav-menu-template.php fallback_cb - Dacă meniul nu există, se va apela o funcție callback. Implicit este 'wp_page_menu'. Setează la false pentru a dezactiva funcția de fallback Ce ar trebui să înlocuiesc pentru a face wp_nav_menu_no_ul() funcțional dacă setez false la fallback_cb? Pentru că acum returnează gol.

haha haha
28 ian. 2011 13:49:46

Acum am înțeles :) Mulțumesc mult בניית אתרים. Apropo, cum se pronunță nickname-ul tău? Al meu e ha ha

haha haha
28 ian. 2011 14:08:00

LOL, mă bucur că ai reușit.

Bainternet Bainternet
28 ian. 2011 14:17:27

M-am întrebat același lucru, presupun că e ebraică, care ar fi traducerea corectă, din curiozitate.. :)

t31os t31os
28 ian. 2011 17:55:33

:) da, e ebraică și e un poreclă pe care mi-am ales-o acum ceva timp și care, dacă e tradusă corect, înseamnă ceva de genul "web design".

Bainternet Bainternet
28 ian. 2011 18:17:17

Te rog să vezi celălalt răspuns de la Martti despre asta. În loc să adaugi <ul> și apoi să rulezi un find & replace pentru a-l elimina din nou, ar trebui pur și simplu să nu îl adaugi de la început. Poți face asta folosind opțiunea items_wrap

mikemike mikemike
20 mar. 2015 12:52:33
Arată celelalte 1 comentarii
0

Codul de mai jos ar trebui să facă exact asta.

<?php 

  $my_menu = array( 
  'menu' => 'main-menu',
  'container' => '',
  'items_wrap' => '%3$s' 
  );

  wp_nav_menu( $my_menu );

?>

Consultă acest link pentru funcția wp_nav_menu http://codex.wordpress.org/Function_Reference/wp_nav_menu

14 mai 2014 11:06:37
1

Dacă doriți să afișați doar tag-urile <a>, puteți proceda astfel:

$primaryMenu = array(
    'theme_location'  => 'primary', // Locația temei
    'menu'            => '', // Meniul
    'container'       => '', // Containerul
    'container_class' => false, // Clasa containerului
    'container_id'    => '', // ID-ul containerului
    'menu_class'      => 'menu', // Clasa meniului
    'menu_id'         => 'primary-menu', // ID-ul meniului
    'echo'            => false, // Afișare directă sau returnare
    'fallback_cb'     => 'wp_page_menu', // Callback pentru fallback
    'before'          => '', // Conținut înaintea link-ului
    'after'           => '', // Conținut după link
    'link_before'     => '', // Conținut înaintea textului link-ului
    'link_after'      => '', // Conținut după textul link-ului
    'depth'           => 0, // Adâncimea meniului
    'walker'          => '' // Walker personalizat
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' ); // Afișează doar tag-urile <a>
17 nov. 2015 09:02:21
Comentarii

funcționează perfect pentru mine, setarea doar a 'items_wrap' => '%3$s' nu are efect în wp 5.2

rafaelphp rafaelphp
30 iun. 2019 19:50:39
0

Pentru mine, ce a funcționat a fost aceasta soluție:

<?php wp_nav_menu( array(
       'container' => '',
       'items_wrap' => '%3$s' 
) ); ?>

Sper să te ajute.

5 apr. 2014 23:58:36
0

Știu că acest răspuns nu este complet pentru această întrebare, dar există atât de mulți oameni care vor să afle cum să înlocuiască tagurile ul și li în WordPress și să adauge alte taguri.

Înainte de a aplica codul meu, WordPress afișează meniul în acest format:

<ul class="*****"><li>abc</li></ul>

Dar dacă cineva dorește să schimbe tagul ul în div și li în tagul a, atunci ar trebui să folosească următorul cod:

<?php
    $menuParameters = array(
        'menu' => 'primary_menu',
        'link_before' => '<span>',
        'link_after' => '</span>',
        'before' => '<div class="tp-primary-header mui-top-home">',
        'after' => '</div>',
        'container' => false,
        'echo' => false,
        'depth' => 0,
    );

    echo strip_tags(wp_nav_menu($menuParameters), '<a><span><div>');
?>

Acest cod va genera următorul rezultat:

<div class="tp-primary-header mui-top-home"><a href="#"><span>ABC</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>def</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>XYZ</span></a></div>
28 dec. 2019 22:41:42
0
<?php
// Definirea parametrilor pentru meniul WordPress
$params = array(
    'theme_location' => 'menu_location', // Locația temei pentru meniu
    'container' => false, // Fără container în jurul meniului
    'echo' => false, // Nu afișa direct, ci returnează conținutul
    'items_wrap' => '%3$s', // Formatarea elementelor meniului
);

// Afișarea meniului, eliminând toate tagurile HTML exceptând <a>
echo strip_tags(wp_nav_menu($params), '<a>');
?>
13 iul. 2024 16:45:50