• Hello,

    I am trying to fetch post category in nav menu automatically, currently have some limited 4-5 category but it’s may be more in future and i want to fetch/add newly created category in “nav menu” automatically…

    Please suggest the solutions if anyone can help

    Thanks

    The page I need help with: [log in to see the link]

Viewing 2 replies - 1 through 2 (of 2 total)
  • Moderator bcworkz

    (@bcworkz)

    Try out a few menu plugins and see if any existing solutions will meet your needs.
    https://www.ads-software.com/plugins/search/category+menu/

    A custom coded solution is an option. There are two general approaches. Dynamically add menu items when the menu is output by using the “wp_nav_menu” filter. These items will not appear on the menu edit screen, only menu output.

    Or hook the “create_category” action to create persistent menu item posts which appear on the menu edit screen. Also hook “edit_category” action to manage changes to a category term. This latter approach is preferable but is more involved and requires that you learn how menu posts work and how they are associated with a particular menu (it’s done with taxonomy terms).

    I got this category walker

    // Custom_Walker_Category - in functions.php
    class Custom_Walker_Category extends Walker_Category {
    
            function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
                    extract($args);
                    $cat_name = esc_attr( $category->name );
                    $cat_name = apply_filters( 'list-cats', $cat_name, $category );
                    $link = '<a href="' . esc_url( get_term_link($category) ) . '" ';
                    if ( $use_desc_for_title == 0 || empty($category->description) )
                            $link .= 'title="' . esc_attr( sprintf(__( 'View all posts filed under %s' ), $cat_name) ) . '"';
                    else
                            $link .= 'title="' . esc_attr( strip_tags( apply_filters( 'category_description', $category->description, $category ) ) ) . '"';
                    $link .= '>';
                    $link .= $cat_name . '</a>';
                    if ( !empty($feed_image) || !empty($feed) ) {
                            $link .= ' ';
                            if ( empty($feed_image) )
                                    $link .= '(';
                            $link .= '<a href="' . esc_url( get_term_feed_link( $category->term_id, $category->taxonomy, $feed_type ) ) . '"';
                            if ( empty($feed) ) {
                                    $alt = ' alt="' . sprintf(__( 'Feed for all posts filed under %s' ), $cat_name ) . '"';
                            } else {
                                    $title = ' title="' . $feed . '"';
                                    $alt = ' alt="' . $feed . '"';
                                    $name = $feed;
                                    $link .= $title;
                            }
                            $link .= '>';
                            if ( empty($feed_image) )
                                    $link .= $name;
                            else
                                    $link .= "<img src='$feed_image'$alt$title" . ' />';
                            $link .= '</a>';
                            if ( empty($feed_image) )
                                    $link .= ')';
                    }
                    if ( !empty($show_count) )
                            $link .= ' (' . intval($category->count) . ')';
                    if ( 'list' == $args['style'] ) {
                            $output .= "\t<li";
                            $class = 'cat-item cat-item-' . $category->term_id;
    
                            // YOUR CUSTOM CLASS
                            $termchildren = get_term_children( $category->term_id, $category->taxonomy );
                            if(count($termchildren)>0){
                                $class .=  ' i-have-kids col-lg-2 col-md-4 col-sm-6 col-match-height';
                            }
    
                            if ( !empty($current_category) ) {
                                    $_current_category = get_term( $current_category, $category->taxonomy );
                                    if ( $category->term_id == $current_category )
                                            $class .=  ' current-cat';
                                    elseif ( $category->term_id == $_current_category->parent )
                                            $class .=  ' current-cat-parent';
                            }
                            $output .=  ' class="' . $class . '"';
                            $output .= ">$link\n";
                    } else {
                            $output .= "\t$link<br />\n";
                    }
            } // function start_el
    
    } // class Custom_Walker_Category

    Usage in header.php

    
    <ul class="lmd-catlist row match-height">
    
    	<?php 
    	$excat1 = get_term_by( 'slug', 'highlight', 'category' );
    	$exid1 = $excat1->term_id;
    	$excat2 = get_term_by( 'slug', 'uncategorized', 'category' );
    	$exid2 = $excat2->term_id;
    	
    	$args = array(
    		'orderby' => 'slug',
    		'show_count' => 0,
    		'hierarchical' => 1, 
    		'depth' => 2,
    		'exclude' => $exid1.','.$exid2,
    		'hide_empty' => 0, 
    		'title_li' => '', 
    		'hide_title_if_empty' => true,
    		'walker' => new Custom_Walker_Category(),
    	);
    	wp_list_categories($args);?>
    
    </ul></div>
    
    • This reply was modified 4 years, 7 months ago by amrinz.
Viewing 2 replies - 1 through 2 (of 2 total)
  • The topic ‘How to automatically add Categories & Sub Categories in WordPress nav menu’ is closed to new replies.