Cum elimin UL din wp_nav_menu?
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>
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.

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

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

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ă.

@בניית אתרים - 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.

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

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

:) 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".

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

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>

Ș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>

<?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>');
?>
