web-dev-qa-db-fra.com

Ajouter un élément statique à wp_nav_menu

J'essaie d'ajouter un élément de menu statique à Wordpress Menu. J'utilise le filtre 'wp_nav_menu_items' pour cela dans functions.php. Cela fonctionne mais ne le met pas sous la balise conteneur de menu.

function add_nav_menu_items( $items , $args ) { ?>
    <ul>
        <li><a href="#">PRODUCTS</a>
            <ul>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Sci-Fi')));?>">SCI-FI</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'scifi','showposts'=>-1,'order'=>'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Drama')));?>">Drama</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'drama','showposts'=>-1,'order'=>'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Horror')));?>">HORROR</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'horror','showposts'=>-1,'order'=> 'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
<?php return $items;}

add_filter( 'wp_nav_menu_items', 'add_nav_menu_items',10,2);

Quand je mets le code en ligne firebug le montrer comme ça

<div id="navigation_top">
    <div id="navmenu_top">
        <ul>  **-->> This is my static menu**
            <li>  
        </ul>
        <ul id="menu-menu-1" class="menu-container">  **-->> This is WP_nav_menu**
            <li class="type menu-item-object-page menu-item-587">
            <li class="type menu-item-object-page menu-item-122">
            <li class="type menu-item-object-page menu-item-121">
            **I want my menu appear here **  
        </ul>
    </div>
</div>

Y at-il de toute façon je peux le faire ???

Merci pour tout conseil ...

2
drgky

La raison pour laquelle votre menu PRODUIT s'affiche en premier lieu est que vous le renvoyez à la page en tant que partie intégrante de la fonction de filtrage. L'attente des filtres est que votre fonction reçoive un argument, $items dans ce cas, le modifie, puis le renvoie pour qu'il soit utilisé par le code principal.

Afin d'éviter d'avoir à réécrire le code qui génère votre menu PRODUITS, nous allons utiliser le tampon de sortie:

add_filter( 'wp_nav_menu_items', 'add_nav_menu_items', 10, 2 );
function add_nav_menu_items( $items, $args ) {
     ob_start(); // start the output buffer
     ?>
     <ul>
        <li><a href="#">PRODUCTS</a>
            <ul>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Sci-Fi')));?>">SCI-FI</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'scifi','showposts'=>-1,'order'=>'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Drama')));?>">Drama</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'drama','showposts'=>-1,'order'=>'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
                <li><a href="<?php echo esc_url(get_category_link(get_cat_ID('Horror')));?>">HORROR</a>
                    <ul>
                        <?php query_posts( array ('post_type'=>'horror','showposts'=>-1,'order'=> 'ASC') ); while ( have_posts() ) : the_post(); ?>
                            <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
                        <?php endwhile; wp_reset_query(); ?>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
    <?php
    $products = ob_get_clean(); // store all output from above
    return $items . $products; // add stored output to end of $items and return
}
1
karpstrucking

Codez le conteneur à la place, supprimez-le comme ceci:

$args = array(
    'theme_location' => 'XXX',
    'container' => false
)

et codez-le en dur dans le wp_nav_menu, sans oublier d’ajouter votre section statique à l’endroit où vous en avez besoin:

echo '<ul>';
echo '<li><a href="http://...">Static Link</a></li>';
wp_nav_menu($args);
echo '</ul>';

Vous pouvez utiliser cette information pour créer votre navigateur comme bon vous semble. En gros, supprimer le conteneur fera en sorte de cracher un tas d’éléments LI avec vos liens, donc installez le wp_nav_menu où vous le souhaitez et codez-le.

1
efreeman