Using breadcrumb to return from single-page to list

Ok, so I didn’t get a reply, but I worked this out as as solution and I hope it will be useful to others.

I am using the evolve template, so when you see evolve it is referring to something in the evolve template; e.g. evolve_breadcrumb() is a function used by the evolve template.

This is the scenario:

  • Custom post type: boat
  • Types of boat: motor, sail
  • Languages: english, spanish

This has to select the correct menu for post or boat / motor or sail / english or spanish.

First step: select evolve_breadcrumb() for a standard post OR use new function for a custom single page single_boat_evolve_breadcrumb().

Some of the fields in the code refer to custom fields… e.g. $typeofboat refers to Motor or Sail boat.

/**
 * Start breadcrumbs
 */ 

// selects standard breadcrumb function or specific for single boat page
// standard returns to blog / boat returns to single page parent
function choose_and_display_breadcrumbs() {
  if(is_single() && is_singular("boat")) {
    single_boat_evolve_breadcrumb();
  } else {
    evolve_breadcrumb();
  }
}


// get a page ID by  page slug 
function get_ID_by_page_slug($page_slug) {
    $page = get_page_by_path($page_slug);
    if ($page) {
        return $page->ID;
    } else {
        return null;
    }
}
/**
 *  for single page which is a boat
 */
function single_boat_evolve_breadcrumb() {
        global $data,$post;

        echo '<ul class="breadcrumbs">';

        echo '<li><a class="home" href="';
        echo home_url();
        echo '">'.__('Home', 'evolve');
        echo "</a></li>";

        $params['link_none'] = '';
        $separator="";

        if(is_single() && is_singular("boat")) {

            $parentID = 0;
            $parentpagelink = ""; 
            $availability = strtolower( get_custom_field('availability'));
            $typeofboat = strtolower( get_custom_field('type_of_boat'));
            $currentlanguage = pll_current_language();

            if ( $currentlanguage == 'en') {
                if ($availability == 'sold') {
                  $parentID = get_ID_by_page_slug('boats-sold');
                  $parentpagelink = get_page_link( $parentID);

                } else {
                    switch ($typeofboat) {
                      case 'yacht':
                          $parentID = get_ID_by_page_slug('sail-brokerage');
                          $parentpagelink = get_page_link( $parentID);
                          break;

                      case 'motorboat':
                          $parentID = get_ID_by_page_slug('motor-brokerage');
                          $parentpagelink = get_page_link( $parentID); 
                          break;
                      default:

                        break;
                    }

                }

            } elseif ($currentlanguage == 'es') {
                if ($availability == 'sold') {
                  $parentID = get_ID_by_page_slug('barcos-vendidos');
                  $parentpagelink = get_page_link( $parentID);

                } else {

                  switch ($typeofboat) {
                    case 'yacht':
                        $parentID = get_ID_by_page_slug('corretaje-de-vela-2');
                        $parentpagelink = get_page_link( $parentID);
                        break;

                    case 'motorboat':
                        $parentID = get_ID_by_page_slug('corretaje-de-motor');
                        $parentpagelink = get_page_link( $parentID); 
                        break;

                    default:  
                      break;
                  } 
                } 
            }

        }  
        echo '<li>';
        echo '<a href="' . $parentpagelink . '" title="' . $typeofboat . '">' . get_the_title($parentID) . '</a>';
        echo '</li>';
        echo '<li>'. get_the_title() .'</li>';
      echo "</ul>";
}