it-swarm.com.de

Fügen Sie dem wp_nav_menu statische Elemente hinzu

Ich versuche, Wordpress Menu einen statischen Menüpunkt hinzuzufügen. Ich verwende dazu den Filter 'wp_nav_menu_items' in functions.php. Es funktioniert, aber es wird nicht unter dem Menücontainer-Tag abgelegt.

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

Wenn ich den Code online stelle, zeige ich ihn so

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

Gibt es sowieso ich kann das machen ???

Danke für jeden Rat ...

2
drgky

Der Grund, warum das Menü PRODUKTE zuerst angezeigt wird, ist, dass Sie es als Teil der Filterfunktion auf der Seite wiedergeben. Die Erwartung bei Filtern ist, dass Ihre Funktion ein Argument empfängt, in diesem Fall $items, es ändert und es dann zur Verwendung durch den Kerncode zurückgibt.

Um zu vermeiden, dass der Code, der das Menü PRODUKTE generiert, neu geschrieben werden muss, verwenden wir den Ausgabepuffer:

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

Code den Container stattdessen hart, entferne ihn wie folgt:

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

und programmieren Sie es im wp_nav_menu. Denken Sie dabei daran, Ihren statischen Abschnitt dort hinzuzufügen, wo Sie ihn benötigen:

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

Sie können diese Informationen verwenden, um Ihr Navi zu erstellen, wie Sie möchten. Wenn Sie den Container entfernen, werden nur eine Reihe von LI-Elementen mit Ihren Links darin ausgespuckt. Platzieren Sie also das Menü wp_nav_ dort, wo Sie sie benötigen, und codieren Sie es einfach.

1
efreeman