it-swarm-eu.dev

Odebrat prvek kontejneru Z označení wp_nav_menu ()

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.

4
me_digvijay

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

3
MD MUSA

Problém

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:

  • Nebylo vytvořeno žádné navigační menu
  • 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)

Řešení

Každý z následujících by měl odstranit <div> kontejner.

  • Vytvořte nabídku v panelu 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 ''; },
    

Vysvětlení

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:

  1. Zobrazí první nalezené menu.
  2. Zobrazení značek nabídky generovaných funkcí označenou argumentem '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.

1
bosco

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'
 )
);
0
MD MUSA

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.

0

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

0
Aftab

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

0