How to show category AND brand on breadcrumbs

Hi,

I need to set my breadcrumbs to show “SHOP NAME/CATEGORY/BRAND/PRODUCT”

With one of your tweak I managed to set the breadcrumbs to show only “SHOP NAME/CATEGORY/PRODUCT/” with this code on function.php

// Breadcrumbs Display Category Name
// =============================================================================

function get_breadcrumb_category( $cat ) {
   $post = get_post( $post->ID );
   $post_type = $post->post_type;
   $taxonomy = $cat;

   $f_categories = wp_get_post_terms( $post->ID, $taxonomy );
   $f_category = $f_categories[0];

   if ( $f_category->parent != 0 ) {
      $f_category_id    = $f_category->parent;
      $parent_array     = get_term_by('id', $f_category_id, $taxonomy, 'ARRAY_A');
      $f_category_name  = $parent_array["name"];
      $term_link        = get_term_link( $f_category_id, $taxonomy );
   } else {
      $f_category_id    = $f_category->term_id;
      $f_category_name  = $f_category->name;
      $term_link        = get_term_link( $f_category_id, $taxonomy );
   }

   if ( $f_categories && ! is_wp_error($f_categories) ) {
      return '<a href="' . $term_link . '">' . $f_category_name . '</a>';
   } else {
      return '';
   }
}

function x_breadcrumbs() {

  if ( x_get_option( 'x_breadcrumb_display', '1' ) ) {

    GLOBAL $post;

    $is_ltr         = ! is_rtl();
    $stack          = x_get_stack();
    $delimiter      = x_get_breadcrumb_delimiter();
    $home_text      = x_get_breadcrumb_home_text();
    $home_link      = home_url();
    $current_before = x_get_breadcrumb_current_before();
    $current_after  = x_get_breadcrumb_current_after();
    $page_title     = get_the_title();
    $blog_title     = get_the_title( get_option( 'page_for_posts', true ) );

    if ( ! is_404() ) {
      $post_parent = $post->post_parent;
    } else {
      $post_parent = '';
    }

    if ( X_WOOCOMMERCE_IS_ACTIVE ) {
      $shop_url   = x_get_shop_link();
      $shop_title = x_get_option( 'x_' . $stack . '_shop_title', __( 'The Shop', '__x__' ) );
      $shop_link  = '<a href="'. $shop_url .'">' . $shop_title . '</a>';
    }

    echo '<div class="x-breadcrumbs"><a href="' . $home_link . '">' . $home_text . '</a>' . $delimiter;

      if ( is_home() ) {

        echo $current_before . $blog_title . $current_after;

      } elseif ( is_category() ) {

        $the_cat = get_category( get_query_var( 'cat' ), false );
        if ( $the_cat->parent != 0 ) echo get_category_parents( $the_cat->parent, TRUE, $delimiter );
        echo $current_before . single_cat_title( '', false ) . $current_after;

      } elseif ( x_is_product_category() ) {

        if ( $is_ltr ) {
          echo $shop_link . $delimiter . $current_before . single_cat_title( '', false ) . $current_after;
        } else {
          echo $current_before . single_cat_title( '', false ) . $current_after . $delimiter . $shop_link;
        }

      } elseif ( x_is_product_tag() ) {

        if ( $is_ltr ) {
          echo $shop_link . $delimiter . $current_before . single_tag_title( '', false ) . $current_after;
        } else {
          echo $current_before . single_tag_title( '', false ) . $current_after . $delimiter . $shop_link;
        }

      } elseif ( is_search() ) {

        echo $current_before . __( 'Search Results for ', '__x__' ) . '“' . get_search_query() . '”' . $current_after;

      } elseif ( is_singular( 'post' ) ) {

        if ( get_option( 'page_for_posts' ) == is_front_page() ) {
          echo $current_before . $page_title . $current_after;
        } else {
          if ( $is_ltr ) {

            $f_category = get_the_category();

            if ( $f_category[0]->parent != 0 ) {
               $f_category_id = $f_category[0]->parent;
               $f_category_name = get_cat_name( $f_category_id );
            } else {
               $f_category_id = $f_category[0]->term_id;
               $f_category_name = $f_category[0]->name;
            }

            echo '<a href="' . get_category_link( $f_category_id ) . '">' . $f_category_name . '</a>' . $delimiter . $current_before . $page_title . $current_after;
          } else {
            echo $current_before . $page_title . $current_after . $delimiter . '<a href="' . get_permalink( get_option( 'page_for_posts' ) ) . '">' . $blog_title . '</a>';
          }
        }

      } elseif ( x_is_portfolio() ) {

        echo $current_before . get_the_title() . $current_after;

      } elseif ( x_is_portfolio_item() ) {

        $link  = x_get_parent_portfolio_link();
        $title = x_get_parent_portfolio_title();

        if ( $v = get_breadcrumb_category('portfolio-category') ) {
          $portfolio_category = $delimiter . $v;
        } else {
          $portfolio_category = '';
        }

        if ( $is_ltr ) {
          echo '<a href="' . $link . '">' . $title . '</a>' . $portfolio_category . $delimiter . $current_before . $page_title . $current_after;
        } else {
          echo $current_before . $page_title . $current_after . $portfolio_category . $delimiter . '<a href="' . $link . '">' . $title . '</a>';
        }

      } elseif ( x_is_product() ) {

       if ( $v = get_breadcrumb_category('product_cat') ) {
         $product_category = $delimiter . $v;
       } else {
         $product_category = '';
       }

        if ( $is_ltr ) {
          echo $shop_link . $product_category . $delimiter . $current_before . $page_title . $current_after;
        } else {
          echo $current_before . $page_title . $current_after . $product_category . $delimiter . $shop_link;
        }

      } elseif ( x_is_buddypress() ) {

        if ( bp_is_group() ) {
          echo '<a href="' . bp_get_groups_directory_permalink() . '">' . x_get_option( 'x_buddypress_groups_title', __( 'Groups', '__x__' ) ) . '</a>' . $delimiter . $current_before . x_buddypress_get_the_title() . $current_after;
        } elseif ( bp_is_user() ) {
          echo '<a href="' . bp_get_members_directory_permalink() . '">' . x_get_option( 'x_buddypress_members_title', __( 'Members', '__x__' ) ) . '</a>' . $delimiter . $current_before . x_buddypress_get_the_title() . $current_after;
        } else {
          echo $current_before . x_buddypress_get_the_title() . $current_after;
        }

      } elseif ( x_is_bbpress() ) {

        remove_filter( 'bbp_no_breadcrumb', '__return_true' );

        if ( bbp_is_forum_archive() ) {
          echo $current_before . bbp_get_forum_archive_title() . $current_after;
        } else {
          echo bbp_get_breadcrumb();
        }

        add_filter( 'bbp_no_breadcrumb', '__return_true' );

      } elseif ( is_page() && ! $post_parent ) {

        echo $current_before . $page_title . $current_after;

      } elseif ( is_page() && $post_parent ) {

        $parent_id   = $post_parent;
        $breadcrumbs = array();

        if ( is_rtl() ) {
          echo $current_before . $page_title . $current_after . $delimiter;
        }

        while ( $parent_id ) {
          $page          = get_page( $parent_id );
          $breadcrumbs[] = '<a href="' . get_permalink( $page->ID ) . '">' . get_the_title( $page->ID ) . '</a>';
          $parent_id     = $page->post_parent;
        }

        if ( $is_ltr ) {
          $breadcrumbs = array_reverse( $breadcrumbs );
        }

        for ( $i = 0; $i < count( $breadcrumbs ); $i++ ) {
          echo $breadcrumbs[$i];
          if ( $i != count( $breadcrumbs ) -1 ) echo $delimiter;
        }

        if ( $is_ltr ) {
          echo $delimiter . $current_before . $page_title . $current_after;
        }

      } elseif ( is_tag() ) {

        echo $current_before . single_tag_title( '', false ) . $current_after;

      } elseif ( is_author() ) {

        GLOBAL $author;
        $userdata = get_userdata( $author );
        echo $current_before . __( 'Posts by ', '__x__' ) . '“' . $userdata->display_name . $current_after . '”';

      } elseif ( is_404() ) {

        echo $current_before . __( '404 (Page Not Found)', '__x__' ) . $current_after;

      } elseif ( is_archive() ) {

        if ( x_is_shop() ) {
          echo $current_before . $shop_title . $current_after;
        } else {
          echo $current_before . __( 'Archives ', '__x__' ) . $current_after;
        }

      }

    echo '</div>';

  }

}

Now, how can I resolve my problem?

Also, I need to change the Woocommerce permalink so I can se “/shop-name/%product_cat%/BRAND”. Can you explain me how can I do this? Because I can only set the permalink to “/shop-name/%product_cat%/”.

Thanks in advance :slight_smile:

Hi there,

Thanks for writing in.

This is a bit complex since these aren’t part of Woocommerce by default at all (the brand). I recommend contacting a developer, customizing the permalinks is a bit tricky and could lead to broken rewrites that result to 404 pages.

The idea is rewrite the URL and pass the data through query_var, then check query_var to create proper custom query, then based on that query, compose the breadcrumbs.

Thanks!

Hi,

some updates: with a third-part plug-in I managed to set a permalink with the brand but there’s some design issues that makes me deactivate the plug-in itself. Also this create TWO “brand” voices in WooCommerc backend menu and I don’t really like it. Anyway, at least I know I can change permalink, somehow…

Regarding the breadcrumb structure, I know it is possible to achieve what I need to do,I read it on a post on your forum but I can’t find it no more :frowning_face:

Are you sure I can’t edit the function.php to show the brand base?

Thanks in advance

We’re sorry but this would require custom development. We do have an in-house custom development team that offer paid services, who may be able to assist. They can be contacted at [email protected] if this is of interest to you.

Thank you for your understanding.

I see…

Unfortunately the site is not mine, is for a client, and I’m preatty sure he won’t pay for this type of support.

I’ll find a way to fix this, maybe with Yoast… I don’t know.

Anyway, I’ll save this email in case I need support on my personal website :slight_smile:

Thanks again :slight_smile:

You’re welcome! :slight_smile: