WordPress.org

Ready to get started?Download WordPress

Forums

WordPress SEO by Yoast
Rich Snippets on Breadcrumbs of YOAST (3 posts)

  1. EmanueleT
    Member
    Posted 1 year ago #

    Hi,

    i wanted to fix my breadcrumbs with Rich Snippets, i found this topic and i tried to follow the instructions but i have some problems, for example in my file class.breadcrumbs.php i dont find the lines to replace. Could be that the problem is in the headr in the code of the breadcrumbs?

    here is the code on class.breadcrumbs.php

    <?php
    /**
     * @package Frontend
     */
    
    /**
     * This class handles the Breadcrumbs generation and display
     */
    class WPSEO_Breadcrumbs {
    
    	/**
    	 * Class constructor
    	 */
    	function __construct() {
    		// If breadcrumbs are active (which they are otherwise this class wouldn't be instantiated), there's no reason
    		// to have bbPress breadcrumbs as well.
    		add_filter( 'bbp_get_breadcrumb', '__return_false' );
    	}
    
    	/**
    	 * Wrapper function for the breadcrumb so it can be output for the supported themes.
    	 */
    	function breadcrumb_output() {
    		$this->breadcrumb( '<div id="wpseobreadcrumb">', '</div>' );
    	}
    
    	/**
    	 * Get a term's parents.
    	 *
    	 * @param object $term Term to get the parents for
    	 * @return array
    	 */
    	function get_term_parents( $term ) {
    		$tax     = $term->taxonomy;
    		$parents = array();
    		while ( $term->parent != 0 ) {
    			$term      = get_term( $term->parent, $tax );
    			$parents[] = $term;
    		}
    		return array_reverse( $parents );
    	}
    
    	/**
    	 * Display or return the full breadcrumb path.
    	 *
    	 * @param string $before  The prefix for the breadcrumb, usually something like "You're here".
    	 * @param string $after   The suffix for the breadcrumb.
    	 * @param bool   $display When true, echo the breadcrumb, if not, return it as a string.
    	 * @return string
    	 */
    	function breadcrumb( $before = '', $after = '', $display = true ) {
    		$options = get_wpseo_options();
    
    		global $wp_query, $post;
    
    		$on_front  = get_option( 'show_on_front' );
    		$blog_page = get_option( 'page_for_posts' );
    
    		$links = array(
    			array(
    				'url'  => get_home_url(),
    				'text' => ( isset( $options['breadcrumbs-home'] ) && $options['breadcrumbs-home'] != '' ) ? $options['breadcrumbs-home'] : __( 'Home', 'wordpress-seo' )
    			)
    		);
    
    		if ( "page" == $on_front && 'post' == get_post_type() && !is_home() ) {
    			if ( $blog_page && ( !isset( $options['breadcrumbs-blog-remove'] ) || !$options['breadcrumbs-blog-remove'] ) )
    				$links[] = array( 'id' => $blog_page );
    		}
    
    		if ( ( $on_front == "page" && is_front_page() ) || ( $on_front == "posts" && is_home() ) ) {
    
    		} else if ( $on_front == "page" && is_home() ) {
    			$links[] = array( 'id' => $blog_page );
    		} else if ( is_singular() ) {
    			if ( get_post_type_archive_link( $post->post_type ) ) {
    				$links[] = array( 'ptarchive' => $post->post_type );
    			}
    
    			if ( 0 == $post->post_parent ) {
    				if ( isset( $options['post_types-' . $post->post_type . '-maintax'] ) && $options['post_types-' . $post->post_type . '-maintax'] != '0' ) {
    					$main_tax = $options['post_types-' . $post->post_type . '-maintax'];
    					$terms    = wp_get_object_terms( $post->ID, $main_tax );
    					if ( count( $terms ) > 0 ) {
    						if ( is_taxonomy_hierarchical( $main_tax ) && $terms[0]->parent != 0 ) {
    							foreach ( $this->get_term_parents( $terms[0] ) as $parent_term ) {
    								$links[] = array( 'term' => $parent_term );
    							}
    						}
    						$links[] = array( 'term' => $terms[0] );
    					}
    				}
    			} else {
    				if ( isset( $post->ancestors ) ) {
    					if ( is_array( $post->ancestors ) )
    						$ancestors = array_values( $post->ancestors );
    					else
    						$ancestors = array( $post->ancestors );
    				} else {
    					$ancestors = array( $post->post_parent );
    				}
    
    				// Reverse the order so it's oldest to newest
    				$ancestors = array_reverse( apply_filters( 'wp_seo_get_bc_ancestors', $ancestors ) );
    
    				foreach ( $ancestors as $ancestor ) {
    					$links[] = array( 'id' => $ancestor );
    				}
    			}
    			$links[] = array( 'id' => $post->ID );
    		} else {
    			if ( is_post_type_archive() ) {
    				$links[] = array( 'ptarchive' => get_post_type() );
    			} else if ( is_tax() || is_tag() || is_category() ) {
    				$term = $wp_query->get_queried_object();
    
    				if ( isset( $options['taxonomy-' . $term->taxonomy . '-ptparent'] ) && $options['taxonomy-' . $term->taxonomy . '-ptparent'] != '' ) {
    					if ( 'post' == $options['taxonomy-' . $term->taxonomy . '-ptparent'] && get_option( 'show_on_front' ) == 'page' ) {
    						if ( get_option( 'page_for_posts' ) ) {
    							$links[] = array( 'id' => get_option( 'page_for_posts' ) );
    						}
    					} else {
    						$links[] = array( 'ptarchive' => $options['taxonomy-' . $term->taxonomy . '-ptparent'] );
    					}
    				}
    
    				if ( is_taxonomy_hierarchical( $term->taxonomy ) && $term->parent != 0 ) {
    					foreach ( $this->get_term_parents( $term ) as $parent_term ) {
    						$links[] = array( 'term' => $parent_term );
    					}
    				}
    
    				$links[] = array( 'term' => $term );
    			} else if ( is_date() ) {
    				if ( isset( $options['breadcrumbs-archiveprefix'] ) )
    					$bc = $options['breadcrumbs-archiveprefix'];
    				else
    					$bc = __( 'Archives for', 'wordpress-seo' );
    				if ( is_day() ) {
    					global $wp_locale;
    					$links[] = array(
    						'url'  => get_month_link( get_query_var( 'year' ), get_query_var( 'monthnum' ) ),
    						'text' => $wp_locale->get_month( get_query_var( 'monthnum' ) ) . ' ' . get_query_var( 'year' )
    					);
    					$links[] = array( 'text' => $bc . " " . get_the_date() );
    				} else if ( is_month() ) {
    					$links[] = array( 'text' => $bc . " " . single_month_title( ' ', false ) );
    				} else if ( is_year() ) {
    					$links[] = array( 'text' => $bc . " " . get_query_var( 'year' ) );
    				}
    			} elseif ( is_author() ) {
    				if ( isset( $options['breadcrumbs-archiveprefix'] ) )
    					$bc = $options['breadcrumbs-archiveprefix'];
    				else
    					$bc = __( 'Archives for', 'wordpress-seo' );
    				$user    = $wp_query->get_queried_object();
    				$links[] = array( 'text' => $bc . " " . $user->display_name );
    			} elseif ( is_search() ) {
    				if ( isset( $options['breadcrumbs-searchprefix'] ) && $options['breadcrumbs-searchprefix'] != '' )
    					$bc = $options['breadcrumbs-searchprefix'];
    				else
    					$bc = __( 'You searched for', 'wordpress-seo' );
    				$links[] = array( 'text' => $bc . ' "' . esc_html( get_search_query() ) . '"' );
    			} elseif ( is_404() ) {
    				if ( isset( $options['breadcrumbs-404crumb'] ) && $options['breadcrumbs-404crumb'] != '' )
    					$crumb404 = $options['breadcrumbs-404crumb'];
    				else
    					$crumb404 = __( 'Error 404: Page not found', 'wordpress-seo' );
    				$links[] = array( 'text' => $crumb404 );
    			}
    		}
    
    		$links = apply_filters( 'wpseo_breadcrumb_links', $links );
    
    		$output = $this->create_breadcrumbs_string( $links );
    
    		if ( isset( $options['breadcrumbs-prefix'] ) && $options['breadcrumbs-prefix'] != "" )
    			$output = $options['breadcrumbs-prefix'] . " " . $output;
    
    		if ( $display ) {
    			echo $before . $output . $after;
    			return true;
    		} else {
    			return $before . $output . $after;
    		}
    	}
    
    	/**
    	 * Take the links array and return a full breadcrumb string.
    	 *
    	 * Each element of the links array can either have one of these keys:
    	 *       "id"            for post types;
    	 *    "ptarchive"  for a post type archive;
    	 *    "term"         for a taxonomy term.
    	 * If either of these 3 are set, the url and text are retrieved. If not, url and text have to be set.
    	 *
    	 * @link http://support.google.com/webmasters/bin/answer.py?hl=en&answer=185417 Google documentation on RDFA
    	 *
    	 * @param array  $links   The links that should be contained in the breadcrumb.
    	 * @param string $wrapper The wrapping element for the entire breadcrumb path.
    	 * @param string $element The wrapping element for each individual link.
    	 * @return string
    	 */
    	function create_breadcrumbs_string( $links, $wrapper = 'span', $element = 'span' ) {
    		global $paged;
    
    		$opt    = get_wpseo_options();
    		$sep    = ( isset( $opt['breadcrumbs-sep'] ) && $opt['breadcrumbs-sep'] != '' ) ? $opt['breadcrumbs-sep'] : '&raquo;';
    		$output = '';
    
    		foreach ( $links as $i => $link ) {
    			if ( !empty( $output ) )
    				$output .= " $sep ";
    
    			if ( isset( $link['id'] ) ) {
    				$link['url']  = get_permalink( $link['id'] );
    				$link['text'] = wpseo_get_value( 'bctitle', $link['id'] );
    				if ( empty( $link['text'] ) )
    					$link['text'] = strip_tags( get_the_title( $link['id'] ) );
    				$link['text'] = apply_filters( 'wp_seo_get_bc_title', $link['text'], $link['id'] );
    			}
    
    			if ( isset( $link['term'] ) ) {
    				$bctitle = wpseo_get_term_meta( $link['term'], $link['term']->taxonomy, 'bctitle' );
    				if ( !$bctitle )
    					$bctitle = $link['term']->name;
    				$link['url']  = get_term_link( $link['term'] );
    				$link['text'] = $bctitle;
    			}
    
    			if ( isset( $link['ptarchive'] ) ) {
    				if ( isset( $opt['bctitle-ptarchive-' . $link['ptarchive']] ) && '' != $opt['bctitle-ptarchive-' . $link['ptarchive']] ) {
    					$archive_title = $opt['bctitle-ptarchive-' . $link['ptarchive']];
    				} else {
    					$post_type_obj = get_post_type_object( $link['ptarchive'] );
    					$archive_title = $post_type_obj->labels->menu_name;
    				}
    				$link['url']  = get_post_type_archive_link( $link['ptarchive'] );
    				$link['text'] = $archive_title;
    			}
    
    			$element     = apply_filters( 'wpseo_breadcrumb_single_link_wrapper', $element );
    			$link_output = '<' . $element . ' typeof="v:Breadcrumb">';
    			if ( isset( $link['url'] ) && ( $i < ( count( $links ) - 1 ) || $paged ) ) {
    				$link_output .= '<a href="' . esc_attr( $link['url'] ) . '" rel="v:url" property="v:title">' . $link['text'] . '</a>';
    			} else {
    				if ( isset( $opt['breadcrumbs-boldlast'] ) && $opt['breadcrumbs-boldlast'] ) {
    					$link_output .= '<strong class="breadcrumb_last" property="v:title">' . $link['text'] . '</strong>';
    				} else {
    					$link_output .= '<span class="breadcrumb_last" property="v:title">' . $link['text'] . '</span>';
    				}
    			}
    			$link_output .= '</' . $element . '>';
    
    			$output .= apply_filters( 'wpseo_breadcrumb_single_link', $link_output, $link );
    		}
    
    		$id = apply_filters( 'wpseo_breadcrumb_output_id', false );
    		if ( !empty( $id ) )
    			$id = ' id="' . $id . '"';
    
    		$class = apply_filters( 'wpseo_breadcrumb_output_class', false );
    		if ( !empty( $class ) )
    			$class = ' class="' . $class . '"';
    
    		$wrapper = apply_filters( 'wpseo_breadcrumb_output_wrapper', $wrapper );
    		return apply_filters( 'wpseo_breadcrumb_output', '<' . $wrapper . $id . $class . ' xmlns:v="http://rdf.data-vocabulary.org/#">' . $output . '</' . $wrapper . '>' );
    	}
    
    }
    
    global $wpseo_bc;
    $wpseo_bc = new WPSEO_Breadcrumbs();
    
    if ( !function_exists( 'yoast_breadcrumb' ) ) {
    	/**
    	 * Template tag for breadcrumbs.
    	 *
    	 * @param string $before  What to show before the breadcrumb.
    	 * @param string $after   What to show after the breadcrumb.
    	 * @param bool   $display Whether to display the breadcrumb (true) or return it (false).
    	 * @return string
    	 */
    	function yoast_breadcrumb( $before = '', $after = '', $display = true ) {
    		global $wpseo_bc;
    		return $wpseo_bc->breadcrumb( $before, $after, $display );
    	}
    }

    and here is the code i put in the hedaer:

    <?php if ( function_exists('yoast_breadcrumb') ) {
    	yoast_breadcrumb('<p id="breadcrumbs">','</p>');
    } ?>

    hope someone can help or explain me better.

    thanks a lot

    http://wordpress.org/extend/plugins/wordpress-seo/

  2. janubande007
    Member
    Posted 1 year ago #

    There's a BUG with Breadcrumbs, I've filed a detailed report here: http://wordpress.org/support/topic/bug-nested-categories-with-breadcrumbs-navigation

  3. Caroline
    Member
    Posted 1 year ago #

    So is it impossible to fix this by using Yoast?

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic

Tags

No tags yet.