wake-up-neo.net

wie erstelle ich ein Menü mit allen Unterkategorien?

Ist es möglich, ein Menü mit einer Kategorie zu erstellen, sodass jedes Mal, wenn ich eine Unterkategorie hatte, diese automatisch im Menü angezeigt wird?

Soweit ich weiß, muss ich ein Menü mit der Kategorie "Obst" manuell hinzufügen, wenn ich die Unterkategorie "Bananen" erstelle.

6
nsn

Dies hängt davon ab, über welche Art von Menü Sie sprechen:

1)

Wenn Sie von "benutzerdefinierten Menüs" sprechen (im Backend unter Design -> Menüs), können Sie Folgendes tun:

  • Erstelle eine neue Funktion mit dem Aktions-Hook add_category

  • innerhalb dieser Funktion können Sie einen neuen Beitrag vom Typ Menüelementtyp erstellen, der Ihrem Menü korrekt hinzugefügt wird

  • sobald eine neue Kategorie veröffentlicht wird, wird der Menüpunkt hinzugefügt

  • sie sollten sich auch in die Kategorie "Löschen" einhängen, um Ihr Menü auf dem neuesten Stand zu halten

2)

Ohne ein WordPress-Menü geht es viel einfacher:

  • schreiben Sie einfach eine Funktion, um Ihre Kategorien aufzulisten (oder verwenden Sie die vordefinierte Funktion wp_list_categories)
  • wenn dies nicht ausreicht, schreiben Sie eine angepasste, die (vielleicht)
    recursivley) liest Ihre Kategorien aus der Datenbank

Für Option 1 zum Codieren benötigen Sie jedoch einige Kenntnisse über WordPress.

3
Blackbam

Ich bevorzuge die Verwendung von wp_list_categories . Hier ist mein Code, den ich in meinem letzten Projekt verwendet habe:

<?php wp_list_categories('orderby=ID&exclude=3,10,1,16,38&title_li=<span class="sidebar_heading d_shadow">' . __('Categories') . '</span>'); ?>

Sie erhalten eine Liste aller Ihrer Kategorien und Unterkategorien.

2

Nach vielen Recherchen habe ich eine vertrauenswürdige und nützliche Lösung gefunden. Diese Klasse funktioniert gut:

class EntexAutoSubmenu {

    /**
     * Constructor
     */
    function __construct(){
        add_action('created_category', array($this, 'on_publish_category'));
    }

    /**
     * When publishing a new child category, add it to the appropriate custom menu.
     */
    function on_publish_category($cat_id){

        // Theme supports custom menus?
        if (!current_theme_supports('menus')) return;

        // Published taxonomy has parent?
        $cat = get_category($cat_id);
        if (!$cat->category_parent) return;

        $all_menus = get_terms('nav_menu', array('hide_empty' => true));

        // Loop through the menus to find page parent
        foreach ($all_menus as $menu) {

            $menu_parent = NULL;
            $menu_items = wp_get_nav_menu_items($menu->term_id, array('post_status' => 'publish,draft'));

            if (!is_array($menu_items)) continue;

            foreach ($menu_items as $menu_item){
                // Item already in menu?
                if ($menu_item->object_id == $cat_id) continue 2;
                if ($menu_item->object_id == $cat->category_parent) $menu_parent = $menu_item;
            }

            // Add new item
            if ($menu_parent) {
                wp_update_nav_menu_item($menu->term_id, 0, array(
                    'menu-item-object-id' => $cat_id,
                    'menu-item-object' => $cat->taxonomy,
                    'menu-item-parent-id' => $menu_parent->ID,
                    'menu-item-type' => 'taxonomy',
                    'menu-item-status' => 'publish'
                ));
            }
        }
    }
}

$auto_submenu = new EntexAutoSubmenu();
1
Jonas Lundman

Eine andere Alternative wäre die Verwendung von Benutzerdefiniertes Taxonomie-Widget auflisten . Dies funktioniert möglicherweise in Ihrem Anwendungsfall (wenn Sie nicht vorhaben, WP nav_menu zu verwenden).

1
David Senkus

Ich habe mein eigenes für einen meiner Kunden programmiert

<div class="menu">
  <ul id="MenuBar1" class="MenuBarHorizontal">
    <li><a <?PHP if( count($_GET) == 0 ){ echo 'class="-current"';} ?> href="<?php echo esc_url( home_url( '/' ) ); ?>">home</a></li>
    <?php
        $category_ids = get_all_category_ids();
        sort($category_ids);
        foreach($category_ids as $cat_id) {
            $cat_name = get_cat_name($cat_id);

            echo '<li><a href="' . get_category_link( $cat_id ) . '">' . $cat_name . '</a>';            
            $args = array( 'numberposts' => -1, 'offset'=> 0, 'cat' => $cat_id, 'orderby' => 'ID', 'order' => 'ASCE' );     

            echo '<ul>';

            /* The 2nd Query (without global var) */
            $query2 = new WP_Query( $args );
            // The 2nd Loop
            while( $query2->have_posts() ):
                $query2->next_post();
                echo '<li><a href="' . get_permalink( $query2->post->ID ) . '">' . get_the_title( $query2->post->ID ) . '</a></li>';
            endwhile;

            // Restore original Query & Post Data
            wp_reset_query();
            wp_reset_postdata();
            echo '</ul>';
        echo '</li>';
        }
    ?>
  </ul>
</div>
1
0_0

Um dieses Problem zu lösen, habe ich versucht, ein Plugin zu erstellen, das automatisch ein Menüelement für die Veröffentlichungskategorie unter der übergeordneten Kategorie erstellt, wenn es sich im Menü befindet.

Idee zum Plugin:

1. Im Code habe ich "created_ $ taxonomy" action hook verwendet.

2.alle Menüpunkte sammeln (mit wp_get_nav_menu_item s)

3. und setze die Bedingung, wenn das übergeordnete Element der Veröffentlichungskategorie im Menüelement liegt, als ein Menüelement, das als Untermenü der übergeordneten Kategorie erstellt wurde (mit wp_update_nav_menu_item ).

<?php
/*
Plugin Name: Auto Category Submenu
Plugin URI: 
Description: Create menu item when category publish/create if it's parent category in menu item.
Version: 0.1
Author: Mayank Gupta/Ravinder Kumar
Author URI: 
License: GPL2
*/

class AutoSubmenu {

    /**
     * Constructor
     */
    function __construct() {
        add_action( 'created_category', array( &$this, 'on_publish_cat' ) );
    }

    /**
     * When publishing a new child page, add it to the appropriate custom menu.
     */
    function on_publish_cat( $cat_id ) {
        $cat = get_category( $cat_id );

        //menu id for you menus in which your sub-category's parent category as menu item 
        $menu_ids = array(101,100);

        //retrieve all meu items from menu
        foreach($menu_ids as $menu_id){
            $menu_items[] = wp_get_nav_menu_items( $menu_id, array('post_status' => 'publish','post_type' => 'nav_menu_item','output' => ARRAY_A, ) );
        }
        foreach($menu_items as $menu_item){
            $counter = 0 ;
            echo'<!--';
            print_r($menu_item);
            echo'-->';
            foreach($menu_item as $menu_term){
                $menu_terms_id[] = $menu_term->object_id; //all menu items id
            }
        }
        //print_r($menu_terms_id); //test for items in menu
        foreach( $menu_terms_id as $menu_term ){
            if( $cat->category_parent == $menu_term){
                wp_update_nav_menu_item( $cat_id, 0, array(
                'menu-item-object-id' => $cat_id,
                'menu-item-object' => $cat->taxonomy,
                'menu-item-parent-id' => $menu_term,
                'menu-item-type' => 'category',
                'menu-item-status' => 'publish'
            ) );
            }else{
                return;
            }
        }
    }

}
$auto_submenu = new AutoSubmenu();

Hinweis: Plugin gibt Fehler (Header bereits gesendet) und Menüelement nicht erstellt, wenn Kategorie veröffentlichen. Dies ist möglicherweise ein anderes Thema für das Problem, aber ich habe es hier, weil dies eine Lösung sein kann, wenn einige mir vorschlagen, wo ich falsch liege wenn ich etwas falsch mache, indem ich es hier setze

1
Ravinder Kumar

ich benutze, um alle Kategorie und Unterkategorie der Kategorie als Menü in meinem Projekt anzuzeigen.

$all_categories = get_categories( $args );
echo "<div class='container'>";
 echo "<div class='productsubmenu'>";
echo "<ul>";

foreach ($all_categories as $cat)
{           

if($cat->category_parent == 0)
 {
  $category_id = $cat->term_id;
   $thumbnail_id = get_woocommerce_term_meta( $cat->term_id,    'thumbnail_id', true );
$image = wp_get_attachment_url( $thumbnail_id );

echo '<li class="parent '.$my.' "><a href="'.get_term_link( $cat ) . '">'.$cat->name.'</a>';


$args2 = array(
'taxonomy' => $taxonomy,
'child_of' => 0,
'parent' => $category_id,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty

);
   $args = array(
   'hierarchical' => 1,
   'show_option_none' => '',
   'hide_empty' => 0,
   'parent' => $parent_cat_ID,
   'taxonomy' => 'product_cat'
);
 $subcats = get_categories($args2);
 echo '<ul class="wooc_sclist">';

  foreach ($subcats as $sc) { 

        }

    $link = get_term_link( $sc->slug, $sc->taxonomy );
    echo '<li class="'.$my.'" ><a href="'. $link .'">'.$sc->name.'</a></li>';
  }
echo '</ul>';
echo "</li>";
}
else
{

 }
 }

    echo "</ul>";
   echo "</div>";
   echo "</div>";
0