Vyzkoušel jsem několik možností, jako je nastavení 'container' => false
a registrace theme_location a vyhledávání na fórech, ale nemohu se zbavit "div", který přichází s wp_nav_menu na mé stránce:
<?php get_nav_menu();?>
function get_nav_menu() {
$navMenuDefaults = array(
'theme_location' => 'header-nav',
'menu' => '',
'container' => false,
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'menu_id' => '',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'depth' => 0,
'walker' => ''
);
return wp_nav_menu($navMenuDefaults);
}
a ve function.php:
function register_top_nav() {
register_nav_menu('header-nav',__( 'Header Nav' ));
}
add_action( 'init', 'register_top_nav' );
Nejsem si jistý, proč dostávám následující výstup:
<div class="">
<ul>
<li class="page_item page-item-2">
<a href="url">Sample Page</a>
</li>
</ul>
</div>
Jak mohu získat něco podobného:
<ul class="abc">
<li>
<a href="#">dfdf</a>
</li>
</ul>
dík.
FYI: container => ''
je operace s řetězcem a je výchozím nastavením div
nemůžete použít true or false like bool expression
.
Stačí změnit container => 'ul'
pak doufám, že dostanete, co chcete vidět. pro více informací si prosím přečtěte toto: https://developer.wordpress.org/reference/functions/wp_nav_menu/
Díky Musa
Nemáte vytvořili jsme nabídku na panelu Appearance > Menus
v panelu pro správu aplikace WordPress .
Moje úvaha je založena na chybě, ke které dochází za následujících podmínek:
wp_nav_menu()
byl volán s výchozím 'fallback_cb'
argumentem 'wp_page_menu'
wp_nav_menu()
byl volán s argumentem 'container'
určeným k odstranění kontejneru (cokoli, co funkce empty()
vrátí true
pro)Každý z následujících by měl odstranit <div>
kontejner.
Appearance > Menus
. Externí <div>
by mělo zmizet, i když nepřiřadíte nové menu k vašemu registrovanému umístění 'header-nav'
.Změňte argument 'fallback_cb'
na vlastní funkci, která vrátí některé výchozí značky - nebo dokonce prázdný řetězec - tj.
'fallback_cb' => function() { return ''; },
V případě, že funkce wp_nav_menu()
nemůže najít uvedenou nabídku, pokusí se o další dvě věci, aby vytvořila značku nabídky:
'fallback_cb'
(standardně wp_page_menu()
).Vaše zaúčtované označení je pro page
post-type s ID příspěvku 2
a titulem "Sample Page", což může znamenat novou instalaci WordPressu, pro kterou by bylo rozumné předpokládat, že nebyla vytvořena žádná menu. To znamená, že vaše volání wp_nav_menu()
pravděpodobně klesá zpět na wp_page_menu()
, protože záložní funkce vytvoří impromptu menu z libovolného počtu stránek ve vaší instalaci.
Když je volána funkce 'fallback_cb'
, jsou předány stejné argumenty, které byly dány wp_nav_menu()
(sloučeny s výchozími argumenty). Zde je dokumentace Codexu o funkci wp_page_menu()
trochu zastaralá, protože od WordPress 4.4.0 tato funkce skutečně přijímá a zpracovává argument 'container'
. wp_page_menu()
je tedy volán se stejným argumentem 'container'
, který jste předali wp_nav_menu()
, což je ''
(prázdný literál literálu) nebo false
.
Maso problému je protichůdné chování, které pochází z tyto řádky v wp_page_menu()
:
// Fallback in case `wp_nav_menu()` was called without a container.
if ( empty( $container ) ) {
$container = 'div';
}
Takže, protože empty()
vyhodnocuje jak booleanfalse
, tak ''
na true
, tento malý bezpečný proti selhání si myslí, že jste blázen za to, že nechcete kontejner a přidáte ho zpět do "pro" vás.
Můžete vyzkoušet tento scénář.
Krok 1:
Vložte tento kód do souboru functions.php
motivu:
add_action( 'after_setup_theme', 'theme_nav_setup' );
if ( ! function_exists( 'theme_nav_setup' ) ){
function theme_nav_setup() {
register_nav_menu( 'header-nav_new', __( 'Main Menu', 'text-domain' ) );
}
}
Krok 2:
Potom zavolejte na toto místo, kde uvidíte tento výstup nabídky:
wp_nav_menu( array(
'menu' => 'header-nav_new',
'theme_location' => 'header-nav_new',
'depth' => 6,
'container' => 'ul',
'fallback_cb' => 'wp_page_menu',
'menu_class' => 'abc'
)
);
Z mé vlastní zkušenosti, pokud ještě nezadáte nabídku do zaregistrovaného umístění nabídky, nebudou všechna nastavení parametrů předpona container
fungovat. musíte před vytvořením změny přiřadit vytvořenou nabídku k zaregistrované poloze nabídky.
Ano, můžete použít tento kód
$nav_menu = array(
'title_li' => '',
'container' => '',
'theme_location' => 'header-nav',
'menu_class' => '',
'menu_id' => '',
);
wp_nav_menu( $nav_menu );
Výše uvedený kód zobrazí menu v ul a li formátu, aniž by nějaké třídy a id do obou ul a li tag
Když nastavíte "kontejner" na hodnotu false, mělo by to fungovat, pokud v prostředí nikde nenastane chyba ani konflikt s něčím jiným.
Ve skutečnosti jsem to testoval ve dvaceti patnácti a v jednom z témat Témata mého tématu.
Můžete zkontrolovat, zda máte interní mezipaměť, která neodráží vaše změny hned?
Dík