Breadcrumbs care afișează paginile Părinte și Copil
Încercăm să creăm o funcție pentru breadcrumbs care să afișeze nu doar calea către pagina curentă, ci și către alte pagini cu același părinte.
De exemplu, pe example.com/parent1/child3, breadcrumbs ar trebui să arate Home > Parent1 > Child1 > Child2 > Child3 > Child4 în loc de simplul Home > Parent1 > Child3.
Folosim o versiune modificată a scriptului de breadcrumbs de la http://dimox.net/wordpress-breadcrumbs-without-a-plugin/:
function dimox_breadcrumbs( $args = array() ) {
$defaults = array(
'delimiter' => '»',
'home' => 'Acasă',
'before' => '<span class="current">',
'after' => '</span>',
'before_wrapper' => '<div id="crumbs">',
'after_wrapper' => '</div>',
'before_link' => '<li>',
'after_link' => '</li>'
);
$opts = wp_parse_args( $args, $defaults );
$delimiter = $opts['delimiter'];
$home = $opts['home']; // text pentru link-ul 'Acasă'
$showCurrent = 0; // 1 - afișează titlul postului/paginii curente în breadcrumbs, 0 - nu afișa
$before = $opts['before']; // tag înainte de elementul curent
$after = $opts['after']; // tag după elementul curent
$b_link = $opts['before_link'];
$a_link = $opts['after_link'];
$title = '';
$sub_title = '';
if ( 1 || (!is_home() && !is_front_page()) || is_paged() ) {
echo $opts['before_wrapper'];
$out = '<ul>';
global $post;
$homeLink = get_bloginfo('url');
$out .= $b_link . '<a href="' . $homeLink . '">' . $home . '</a>' . $a_link . $delimiter;
if ( is_category() ) {
global $wp_query;
$cat_obj = $wp_query->get_queried_object();
$thisCat = $cat_obj->term_id;
$thisCat = get_category($thisCat);
$parentCat = get_category($thisCat->parent);
if ($thisCat->parent != 0) {
$out .= $b_link . (get_category_parents($parentCat, TRUE, $delimiter)) . $a_link;
}
$title = __( 'Arhivă după categoria "%"', LANGUAGE_ZONE );
$sub_title = single_cat_title('', false);
$title = str_replace( '%', $sub_title, $title );
}elseif ( is_day() ) {
$out .= $b_link . '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a>' . $a_link . $delimiter;
$out .= $b_link . '<a href="' . get_month_link(get_the_time('Y'),get_the_time('m')) . '">' . get_the_time('F') . '</a>' . $a_link . $delimiter;
$title = $sub_title = get_the_time('d');
}elseif ( is_month() ) {
$out .= $b_link . '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a>' . $a_link . $delimiter;
$title = $sub_title = get_the_time('F');
}elseif ( is_year() ) {
$title = $sub_title = get_the_time('Y');
}elseif ( is_search() ) {
$title = __( 'Rezultate căutare pentru "%"', LANGUAGE_ZONE );
$sub_title = get_search_query();
$title = str_replace( '%', $sub_title, $title );
}elseif ( is_single() && !is_attachment() ) {
if ( get_post_type() != 'post' ) {
$post_type = get_post_type_object(get_post_type());
$slug = $post_type->rewrite;
// echo $b_link . $post_type->labels->singular_name . $a_link . $delimiter;
// echo $b_link . '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>' . $a_link . $delimiter;
$title = $sub_title = get_the_title();
}else {
// blog și alte elemente
$menu_data = dt_current_menu_item();
// $cat = get_the_category(); $cat = $cat[0];
// echo $b_link . get_category_parents($cat, TRUE, ' ' . $delimiter . ' ') . $a_link;
$out .= $b_link . '<a href=' . esc_url($menu_data['link']) . '>' . $menu_data['title'] . '</a>' . $a_link;
$title = get_the_title();
$sub_title = $menu_data['title'];
}
}elseif ( !is_single() && !is_page() && get_post_type() != 'post' && !is_404() ) {
$post_type = get_post_type_object(get_post_type());
$title = $sub_title = $post_type->labels->singular_name;
}elseif ( is_attachment() ) {
$parent = get_post($post->post_parent);
// $cat = get_the_category($parent->ID); $cat = $cat[0];
// $out .= get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
$out .= $b_link . '<a href="' . get_permalink($parent) . '">' . $parent->post_title . '</a>' . $a_link . $delimiter;
$title = $sub_title = get_the_title();
}elseif ( is_page() && !$post->post_parent ) {
$title = $sub_title = get_the_title();
}elseif ( is_page() && $post->post_parent ) {
$parent_id = $post->post_parent;
$breadcrumbs = array();
while ($parent_id) {
$page = get_page($parent_id);
$breadcrumbs[] = $b_link . '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>' . $a_link;
$parent_id = $page->post_parent;
}
$breadcrumbs = array_reverse($breadcrumbs);
foreach ($breadcrumbs as $crumb) $out .= $crumb . $delimiter;
$title = $sub_title = get_the_title();
}elseif ( is_tag() ) {
$title = __( 'Postări etichetate "%"', LANGUAGE_ZONE );
$sub_title = single_tag_title('', false);
$title = str_replace( '%', $sub_title, $title );
}elseif ( is_author() ) {
global $author;
$userdata = get_userdata($author);
$title = __( 'Articole postate de %', LANGUAGE_ZONE );
$sub_title = $userdata->display_name;
$title = str_replace( '%', $sub_title, $title );
}elseif ( is_404() ) {
$title = $sub_title = __( 'Eroare 404', LANGUAGE_ZONE );
}elseif( is_home() ) {
$title = $sub_title = __( 'Blog', LANGUAGE_ZONE );
}
if( strlen($title) > 50 ) {
$title = substr( $title, 0, 50 );
$title .= '...';
}
$out .= $before . $title . $after;
if ( get_query_var('paged') ) {
if( is_category() ||
is_day() ||
is_month() ||
is_year() ||
is_search() ||
is_tag() ||
is_author() )
{
$out .= ' (';
}
$out .= ' ' . __('Pagina', LANGUAGE_ZONE) . ' ' . get_query_var('paged');
if( is_category() ||
is_day() ||
is_month() ||
is_year() ||
is_search() ||
is_tag() ||
is_author() )
{
$out .= ')';
}
}
$out .= '</ul>';
if( $opts['show_trail'] ) {
echo $out;
}
echo '<h1>' . dt_first_letter_filter( $sub_title ) . '</h1>';
echo $opts['after_wrapper'];
}
} // sfârșit dimox_breadcrumbs
Ce idei aveți? Apreciem orice sugestie.

Nu știu sigur cum să integrezi asta în breadcrumbs-ul tău... care, prin definiție, cred că sunt ierarhice.
Dar acest cod ar trebui să îți ofere o listă cu paginile care au același părinte ca pagina curentă (adică frații ei), deși într-un mod complet nestilizat.
global $post;
$args = array('child_of' => $post->post_parent, 'exclude'=> $post->ID);
if ($post->post_parent) $pages = get_pages($args);
if ($pages) foreach ($pages as $page):
echo $page->post_title .'<br/>';
endforeach;
Dacă listezi pagina curentă și apoi afișezi frații ei, poți recrea programatic ceea ce cauți, cred.
edit 1: Am configurat postdata pentru a putea folosi get_permalink(), get_the_title() în interiorul unei "bucle" etc. în loc de metode ale obiectului. get_permalink() obține URL-ul elementului curent din buclă
global $post;
$args = array('child_of' => $post->post_parent, 'exclude'=> $post->ID);
if ($post->post_parent) $pages = get_pages($args);
if ($pages) :
//stocăm variabila $temp
$temp = $post;
$siblings = '<ul>';
foreach ($pages as $post): setup_postdata($post);
$siblings .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
endforeach;
//restabilim variabila $post
$post = $temp;
$siblings .= '</ul>';
echo $siblings;
endif;
Argumentele sunt diferite, dar http://codex.wordpress.org/Function_Reference/get_posts#Reset_after_Postlists_with_offset este bucla foreach pe care o folosesc de obicei. Este pentru get_posts, dar get_pages funcționează la fel, cu excepția faptului că returnează doar pagini.

Mulțumesc mult, helga! A funcționat perfect pentru a afișa celelalte pagini... cum le-aș putea face să se lege? Îmi cer scuze, sunt începător în PHP. Apreciez foarte mult ajutorul tău!

MULȚUMESC!!! Le-a mutat pe paginile surori pe aceeași linie, dar din nu știu ce motiv încă nu se leagă de paginile lor respective...

"paginile surori pe aceeași linie"? Le-am făcut să fie afișate într-o listă neordonată ca să le poți formata cum dorești. Legăturile funcționează bine pentru mine. Tocmai am testat din nou. Ai modificat ceva? Nu e chiar menit să fie lipit în funcția de breadcrumbs, deci probabil ar putea... doar că nu am testat așa.

Da, scuze. Am avut nevoie să ajustez ceva în CSS. Acum funcționează perfect. Mulțumesc pentru ajutor! Apreciez foarte mult!
