Rimozione del container da wp_nav_menu non funziona

8 nov 2010, 16:47:12
Visualizzazioni: 46.4K
Voti: 15

Sto convertendo questo menu HTML in WordPress:

<ul>
    <li><a href="/" class="current"><span>Home</span></a></li>
    <li><a href="/"><span>About</span></a></li>
</ul>

Utilizzo:

wp_nav_menu(array(
 'menu'=>'mainmenu' ,
 'container'       => false, 
 'link_before'     => '<span>',
 'link_after'      => '</span>',
 'theme_location'  => 'primary')
 );

ma l'HTML che ottengo è:

<div class="menu">
    <ul>
        <li class="current_page_item"><a href="http://localhost/goodsoil/" title="Home"><span>Home</span></a></li>
        <li class="page_item page-item-2"><a href="http://localhost/goodsoil/?page_id=2" title="About"><span>About</span></a></li>
    </ul>
</div>

Se uso un menu personalizzato ottengo:

<ul id="menu-test" class="menu">
    <li id="menu-item-6" class="menu-item menu-item-type-custom current-menu-item current_page_item menu-item-home menu-item-6"><a href="url/"><span>Home</span></a></li>
    <li id="menu-item-5" class="menu-item menu-item-type-post_type menu-item-5"><a href="url/?page_id=2"><span>About</span></a></li>
</ul>

ma se non uso un menu personalizzato 'container'=>false non funziona. Qualche soluzione?

2
Commenti

Cosa intendi con se non uso un menu personalizzato? Potresti descrivere più chiaramente in quali condizioni ottieni il risultato desiderato e quando no?

Rarst Rarst
8 nov 2010 22:33:48

Il mio tema supporta i menu personalizzati. Se uso un menu personalizzato, 'container'=>false funziona bene, ma altrimenti non funziona. Se uso 'container'=>'' succede la stessa cosa.

Oterox Oterox
9 nov 2010 17:29:11
Tutte le risposte alla domanda 7
4
19

[RISOLTO] NON FUNZIONA quando si fa riferimento a una posizione inesistente. Ad esempio, quando hai copiato il codice da un'altra parte o non hai ancora creato il tuo menu o la posizione nel pannello di controllo.

Ad esempio, rimuovi ", 'theme_location' => 'primary'" dal seguente codice:

    wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel', 'theme_location' => 'primary' ) );

quindi dovrebbe apparire così

    wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel' ) );

Funziona bene SENZA container nel mio sito SocialBlogsiteWebDesign.com

26 apr 2011 01:28:10
Commenti

Sembra non funzionare in WordPress 3.9

tepkenvannkorn tepkenvannkorn
22 apr 2014 03:42:46

Prima crea il tuo menu nell'area di amministrazione in appearance->menu e poi chiama wp_nav_menu(array('menu'=>'<menu_name>','container'=>false))

Warface Warface
11 mag 2014 03:40:44

Beh, questo è un comportamento piuttosto strano :/ Penso che sia un problema che dovrebbe essere tracciato.

enguerranws enguerranws
26 mag 2020 11:12:44

... oppure non rimuoverlo, e dedicare effettivamente un minuto per creare una posizione del menu.

squarecandy squarecandy
14 lug 2023 06:15:56
3

Trovata la soluzione.

Basta usare "ul" per 'container'

wp_nav_menu(array(
 'menu'=>'mainmenu' ,
 'container' => 'ul',
 'menu_class'=> '',
 'link_before'     => '<span>',
 'link_after'      => '</span>',
 'theme_location'  => 'primary')
 );
7 gen 2020 18:20:46
Commenti

Penso che sia esattamente quello che sto cercando anche io, come rimuovere il div non necessario dal mio menu di navigazione!

Krys Krys
5 ott 2020 17:21:22

In qualche modo questa risposta funziona ma non con una stringa vuota o false. Grazie.

Alexander Ivashchenko Alexander Ivashchenko
13 mag 2021 15:41:36

questo mi ha salvato la vita da un inferno, ho provato tutti i tutorial e nessuno funzionava con le ultime versioni, questo ha funzionato esattamente come volevo

Amir Rahman Amir Rahman
12 ott 2021 06:00:59
4
Prova: <?php wp_nav_menu( array( 'container' => '' ) ); ?>

http://codex.wordpress.org/Function_Reference/wp_nav_menu

8 nov 2010 17:34:07
Commenti

Viene verificato come if ( $args->container ) nel codice, quindi false o stringa vuota non fanno differenza.

Rarst Rarst
8 nov 2010 22:34:52

Rarst, l'ho appena testato su un sito a cui stavo lavorando ultimamente, e impostare 'container' => '' ha effettivamente funzionato. Penso che non stia testando il valore, ma piuttosto impostandolo a null e quindi non producendo l'output dei dati.

tw2113 tw2113
9 nov 2010 00:21:57

'container' => '' non funziona per me. Sto usando wp 3.0.1

Oterox Oterox
9 nov 2010 17:25:42

non funziona neanche per me... con wp 3.2.1

papachan papachan
1 dic 2011 14:11:43
0

Ti riferisci alla funzione di fallback dei nav_menus. Questa è "wp_page_menu" e purtroppo non produce lo stesso tipo di markup che un menu personalizzato fa.

Per risolvere questo problema, crea il tuo menu di fallback personalizzato. Io uso questo:

function my_page_menu($args){
  $menu = '';
  $args['echo'] = false;
  $args['title_li'] = '';

  // Se la pagina iniziale è una pagina, aggiungila alla lista di esclusione
  if (get_option('show_on_front') == 'page') $args['exclude'] = get_option('page_on_front');

  $menu .= str_replace(array("\r", "\n", "\t"), '', wp_list_pages($args));

  if($menu):
    if($args['container']) $menu = '<'.$args['container'].' class="'.$args['container_class'].'">'.$menu;
    $menu .= '<ul class="'.$args['menu_class'].'">'.$menu;

    // aggiungi la voce del menu 'home'
    $menu .= '<li class="home '.((is_front_page() && !is_paged()) ? 'current-menu-item' : null).'"><a href="'.home_url('/').'" title="'.__("Pagina Home").'">'.$args['link_before'].__("Home").$args['link_after'].'</a></li>';

    $menu .= '</ul>';
    if($args['container']) $menu .= '</'.$args['container'].'>\n"';
    $menu = apply_filters('wp_page_menu', $menu, $args);
  endif;

  echo $menu;
}

Potresti dover modificarlo poiché il mio tema gestisce i menu a modo suo, ma penso che tu abbia capito l'idea di base.

E quando chiami wp_nav_menu fallo così: wp_nav_menu(array('fallback_cb' => 'my_page_menu'));

Puoi anche far corrispondere le classi a quelle di un menu personalizzato usando questo:

add_filter('page_css_class', 'atom_page_css_classes', 420, 2);
function atom_page_css_classes($classes, $page){
  // sovrascrivi e usa il nome (sicuro) della pagina invece dell'ID; nessuno stila gli ID...
  $new_classes = array('page-'.$page->post_name);

  // modifica le classi del menu attivo per farle corrispondere a quelle aggiunte da wp_nav_menu()
  foreach($classes as $class)
    if($class == 'current_page_item') $new_classes[] = 'current-menu-item';
    elseif($class == 'current_page_parent') $new_classes[] = 'current-menu-parent';
    elseif($class == 'current_page_ancestor') $new_classes[] = 'current-menu-ancestor';

  return $new_classes;
}

In questo modo riduci alcune regole CSS...

23 dic 2010 17:05:26
1

Ho sviluppato una soluzione semplice ed efficiente utilizzando str_replace, che può essere applicata separatamente per l'utilizzo in tabelle di menu anziché ul li:

$menu = wp_nav_menu( array( 
    'theme_location' => 'main-menu', 
    'container_id' => 'mainMenu', 
    'container_class' => 'ddsmoothmenu',
    'echo' => FALSE
));

$menu = str_replace(
    array('ul id="main-menu" class="menu">','/ul>','li','/li>'), 
    array('table id="main-menu" class="menu">tr>','/tr>/table>','td','/td>'), 
    $menu
);

echo $menu;
13 giu 2012 00:09:07
Commenti

Questa è una pessima idea perché fallirà se ci saranno mai modifiche al codice generato dal core.

squarecandy squarecandy
14 lug 2023 06:13:26
0

TL;DR - usa

<?php
wp_nav_menu(
    array(
        // qui va il tuo ID del menu ecc.
        'items_wrap' => '%3$s', // rimuove il <ul> predefinito
        'container'  => '', // rimuove il <div> esterno
    )
);

La struttura predefinita per wp_nav_menu con il minor numero di argomenti possibile sarà

<div class="menu-blahblah-container">
  <ul id="blahblah">
    <li class="menu-item">
    <li class="menu-item">
    <!-- ecc. -->

Il parametro items_wrap di default è <ul id="%1$s" class="%2$s">%3$s</ul> - quindi ci sono alcuni modi divertenti e semplici per manipolare le cose al di là di quanto richiesto qui. Ma se vuoi semplicemente rimuovere completamente quel ul cambialo in %3$s che fondamentalmente significa "tutto il contenuto dentro l'ul; nessun ul".

Quindi ora abbiamo:

<div class="menu-blahblah-container">
  <li class="menu-item">
  <li class="menu-item">
  <!-- ecc. -->

Ti ritrovi con un mucchio di li che è fantastico! Ma sono intrappolati dentro un div, il che non è fantastico se vuoi usarli insieme ad altri li personalizzati nel tuo bel ul fatto in casa.

Quindi ora aggiungi il bit 'container' => '' che altri hanno suggerito e sei a posto: solo la parte degli elementi della lista del menu senza elementi contenitore!

<li class="menu-item">
<li class="menu-item">
<!-- ecc. -->
14 lug 2023 06:12:13
0
-1

Prova Questo

<?php wp_nav_menu( array( 'menu' => 'Menu','link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
17 gen 2012 11:02:38