2016-04-29 11 views
1

Der benutzerdefinierte Beitragstyp Slug heißt 'gallery', und wenn ich zu einem einzigen Galeriestand auf der Oberseite gehe, habe ich Brotkrumen, die ich die Funktion unten geben werde.Breadcrumbs Problem mit cstom Beitragstypen in WordPress

Die Brotkrumen sieht wie folgt aus: Home »Fotogalerie» Test Post aber die Fotogalerie ist der Titel der Seite, die ein eigenes Template die Fotos angezeigt hat, und das Problem ist hier, dass es hat keinen Link.

Wenn ich auf Fotogalerie in der Adressleiste klicke, sehe ich http://localhost//gallery/ Gibt es eine Möglichkeit, das zu beheben? Wenn ich auf den Link localhost/gallery gehe, ist es eine leere Seite, also wäre es besser, den gallery slug durch den page slug zu ersetzen.

Mein Paniermehl Funktionscode ist dies:

function the_breadcrumb() { 

    /* === OPTIONS === */ 
    $text['home']  = 'Home'; // text for the 'Home' link 
    $text['category'] = '%s'; // text for a category page 
    $text['search'] = '%s'; // text for a search results page 
    $text['tag']  = '%s'; // text for a tag page 
    $text['tax'] = '%s'; // text for a tag page 
    $text['author'] = '%s'; // text for an author page 
    $text['404']  = 'Error 404'; // text for the 404 page 

    $show_current = 1; // 1 - show current post/page/category title in breadcrumbs, 0 - don't show 
    $show_on_home = 0; // 1 - show breadcrumbs on the homepage, 0 - don't show 
    $show_home_link = 1; // 1 - show the 'Home' link, 0 - don't show 
    $show_title  = 1; // 1 - show the title for the links, 0 - don't show 
    $delimiter  = ' » '; // delimiter between crumbs 
    $before   = '<span class="current">'; // tag before the current crumb 
    $after   = '</span>'; // tag after the current crumb 
    /* === END OF OPTIONS === */ 

    global $post; 
    $home_link = home_url('/'); 
    $link_before = '<span typeof="v:Breadcrumb">'; 
    $link_after = '</span>'; 
    $link_attr = ' rel="v:url" property="v:title"'; 
    $link   = $link_before . '<a' . $link_attr . ' href="%1$s">%2$s</a>' . $link_after; 
    $parent_id = $parent_id_2 = $post->post_parent; 
    $frontpage_id = get_option('page_on_front'); 

    if (is_home() || is_front_page()) { 

     if ($show_on_home == 1) echo '<div class="breadcrumbs"><a href="' . $home_link . '">' . $text['home'] . '</a></div>'; 

    } else { 

     echo '<div class="breadcrumbs" xmlns:v="http://rdf.data-vocabulary.org/#">'; 
     if ($show_home_link == 1) { 
      echo '<a href="' . $home_link . '" rel="v:url" property="v:title">' . $text['home'] . '</a>'; 
      if ($frontpage_id == 0 || $parent_id != $frontpage_id) echo $delimiter; 
     } 

     if (is_category()) { 
      $this_cat = get_category(get_query_var('cat'), false); 
      if ($this_cat->parent != 0) { 
       $cats = get_category_parents($this_cat->parent, TRUE, $delimiter); 
       if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
       $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
       $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
       if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
       echo $cats; 
      } 
      if ($show_current == 1) echo $before . sprintf($text['category'], single_cat_title('', false)) . $after; 
} elseif(is_tax()){ 
$thisCat = get_category(get_query_var('cat'), false); 
if ($thisCat->parent != 0) { 
$cats = get_category_parents($thisCat->parent, TRUE, $delimiter); 
$cats = str_replace('<a', $linkBefore . '<a' . $linkAttr, $cats); 
$cats = str_replace('</a>', '</a>' . $linkAfter, $cats); 
echo $cats; 
} 
echo $before . sprintf($text['tax'], single_cat_title('', false)) . $after; 
     } elseif (is_search()) { 
      echo $before . sprintf($text['search'], get_search_query()) . $after; 

     } elseif (is_day()) { 
      echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter; 
      echo sprintf($link, get_month_link(get_the_time('Y'),get_the_time('m')), get_the_time('F')) . $delimiter; 
      echo $before . get_the_time('d') . $after; 

     } elseif (is_month()) { 
      echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter; 
      echo $before . get_the_time('F') . $after; 

     } elseif (is_year()) { 
      echo $before . get_the_time('Y') . $after; 

     } elseif (is_single() && !is_attachment()) { 
      if (get_post_type() != 'post') { 
       $post_type = get_post_type_object(get_post_type()); 
       $slug = $post_type->rewrite; 
       printf($link, $home_link . '/' . $slug['slug'] . '/', $post_type->labels->singular_name); 
       if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after; 
      } else { 
       $cat = get_the_category(); $cat = $cat[0]; 
       $cats = get_category_parents($cat, TRUE, $delimiter); 
       if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
       $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
       $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
       if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
       echo $cats; 
       if ($show_current == 1) echo $before . get_the_title() . $after; 
      } 

     } elseif (!is_single() && !is_page() && get_post_type() != 'post' && !is_404()) { 
      $post_type = get_post_type_object(get_post_type()); 
      echo $before . $post_type->labels->singular_name . $after; 

     } elseif (is_attachment()) { 
      $parent = get_post($parent_id); 
      $cat = get_the_category($parent->ID); $cat = $cat[0]; 
      $cats = get_category_parents($cat, TRUE, $delimiter); 
      $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
      $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
      if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
      echo $cats; 
      printf($link, get_permalink($parent), $parent->post_title); 
      if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after; 

     } elseif (is_page() && !$parent_id) { 
      if ($show_current == 1) echo $before . get_the_title() . $after; 

     } elseif (is_page() && $parent_id) { 
      if ($parent_id != $frontpage_id) { 
       $breadcrumbs = array(); 
       while ($parent_id) { 
        $page = get_page($parent_id); 
        if ($parent_id != $frontpage_id) { 
         $breadcrumbs[] = sprintf($link, get_permalink($page->ID), get_the_title($page->ID)); 
        } 
        $parent_id = $page->post_parent; 
       } 
       $breadcrumbs = array_reverse($breadcrumbs); 
       for ($i = 0; $i < count($breadcrumbs); $i++) { 
        echo $breadcrumbs[$i]; 
        if ($i != count($breadcrumbs)-1) echo $delimiter; 
       } 
      } 
      if ($show_current == 1) { 
       if ($show_home_link == 1 || ($parent_id_2 != 0 && $parent_id_2 != $frontpage_id)) echo $delimiter; 
       echo $before . get_the_title() . $after; 
      } 

     } elseif (is_tag()) { 
      echo $before . sprintf($text['tag'], single_tag_title('', false)) . $after; 

     } elseif (is_author()) { 
      global $author; 
      $userdata = get_userdata($author); 
      echo $before . sprintf($text['author'], $userdata->display_name) . $after; 

     } elseif (is_404()) { 
      echo $before . $text['404'] . $after; 
     } 

     if (get_query_var('paged')) { 
      if (is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author()) echo ' ('; 
      echo __('Page') . ' ' . get_query_var('paged'); 
      if (is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author()) echo ')'; 
     } 

     echo '</div><!-- .breadcrumbs -->'; 

    } 
} 

Jede Hilfe sehr geschätzt wird, danke.

+0

Ich habe versucht, Optionen '$ text ['page'] = '% s' hinzuzufügen;' aber kein Glück – Gazi

Antwort

0

Ich habe es herausgefunden, und ich würde gerne meine Lösung hier posten, weil vielleicht jemand es brauchen wird.

Zuerst habe ich die Funktion der benutzerdefinierten Galerie-URL aus der Datenbank retrive

function get_template_url($template_name){ 
    global $wpdb; 
    $permalink = '#'; // provide a default 

    $RetriveURL = $wpdb->get_results("SELECT post_id FROM wp_postmeta WHERE meta_value = '$template_name'"); 
    foreach ($RetriveURL as $slug) { 
     if (get_page($slug->post_id)) { 
      $permalink = get_permalink($slug->post_id); 
     } 
    } 

    return $permalink; 
} 

als $gallery_page_url = get_template_url('my-custom-gallery-page.php'); unter $home_link = home_url('/'); hinzugefügt

und zuletzt mit diesem printf($link, $gallery_page_url , $post_type->labels->singular_name);

diesen alten Code in der Funktion ersetzt
} elseif (is_single() && !is_attachment()) { 
      if (get_post_type() != 'post') { 
       $post_type = get_post_type_object(get_post_type()); 
       $slug = $post_type->rewrite; 

       printf($link, $home_link . '/' . $slug['slug'] . '/', $post_type->labels->singular_name); //this is the old code 

       if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after; 
      } 

Endgültiger Code:

function the_breadcrumb() { 
    /* === OPTIONS === */ 
    $text['home']  = 'Home'; // text for the 'Home' link 
    $text['category'] = '%s'; // text for a category page 
    $text['search'] = '%s'; // text for a search results page 
    $text['tag']  = '%s'; // text for a tag page 
    $text['tax'] = '%s'; // text for a tag page 
    $text['author'] = '%s'; // text for an author page 
    $text['404']  = 'Error 404'; // text for the 404 page 

    $show_current = 1; // 1 - show current post/page/category title in breadcrumbs, 0 - don't show 
    $show_on_home = 0; // 1 - show breadcrumbs on the homepage, 0 - don't show 
    $show_home_link = 1; // 1 - show the 'Home' link, 0 - don't show 
    $show_title  = 1; // 1 - show the title for the links, 0 - don't show 
    $delimiter  = ' &raquo; '; // delimiter between crumbs 
    $before   = '<span class="current">'; // tag before the current crumb 
    $after   = '</span>'; // tag after the current crumb 
    /* === END OF OPTIONS === */ 

    global $post; 
    $home_link = home_url('/'); 
    $gallery_page_url = get_template_url('my-custom-gallery-page.php'); 
    $link_before = '<span typeof="v:Breadcrumb">'; 
    $link_after = '</span>'; 
    $link_attr = ' rel="v:url" property="v:title"'; 
    $link   = $link_before . '<a' . $link_attr . ' href="%1$s">%2$s</a>' . $link_after; 
    $parent_id = $parent_id_2 = $post->post_parent; 
    $frontpage_id = get_option('page_on_front'); 

    if (is_home() || is_front_page()) { 

     if ($show_on_home == 1) echo '<div class="breadcrumbs"><a href="' . $home_link . '">' . $text['home'] . '</a></div>'; 

    } else { 

     echo '<div class="breadcrumbs" xmlns:v="http://rdf.data-vocabulary.org/#">'; 
     if ($show_home_link == 1) { 
      echo '<a href="' . $home_link . '" rel="v:url" property="v:title">' . $text['home'] . '</a>'; 
      if ($frontpage_id == 0 || $parent_id != $frontpage_id) echo $delimiter; 
     } 

     if (is_category()) { 
      $this_cat = get_category(get_query_var('cat'), false); 
      if ($this_cat->parent != 0) { 
       $cats = get_category_parents($this_cat->parent, TRUE, $delimiter); 
       if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
       $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
       $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
       if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
       echo $cats; 
      } 
      if ($show_current == 1) echo $before . sprintf($text['category'], single_cat_title('', false)) . $after; 
} elseif(is_tax()){ 
$thisCat = get_category(get_query_var('cat'), false); 
if ($thisCat->parent != 0) { 
$cats = get_category_parents($thisCat->parent, TRUE, $delimiter); 
$cats = str_replace('<a', $linkBefore . '<a' . $linkAttr, $cats); 
$cats = str_replace('</a>', '</a>' . $linkAfter, $cats); 
echo $cats; 
} 
echo $before . sprintf($text['tax'], single_cat_title('', false)) . $after; 
     } elseif (is_search()) { 
      echo $before . sprintf($text['search'], get_search_query()) . $after; 

     } elseif (is_day()) { 
      echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter; 
      echo sprintf($link, get_month_link(get_the_time('Y'),get_the_time('m')), get_the_time('F')) . $delimiter; 
      echo $before . get_the_time('d') . $after; 

     } elseif (is_month()) { 
      echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter; 
      echo $before . get_the_time('F') . $after; 

     } elseif (is_year()) { 
      echo $before . get_the_time('Y') . $after; 

     } elseif (is_single() && !is_attachment()) { 
      if (get_post_type() != 'post') { 
       $post_type = get_post_type_object(get_post_type()); 
       $slug = $post_type->rewrite; 
       printf($link, $gallery_page_url , $post_type->labels->singular_name); 
       if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after; 
      } else { 
       $cat = get_the_category(); $cat = $cat[0]; 
       $cats = get_category_parents($cat, TRUE, $delimiter); 
       if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats); 
       $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
       $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
       if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
       echo $cats; 
       if ($show_current == 1) echo $before . get_the_title() . $after; 
      } 

     } elseif (!is_single() && !is_page() && get_post_type() != 'post' && !is_404()) { 
      $post_type = get_post_type_object(get_post_type()); 
      echo $before . $post_type->labels->singular_name . $after; 

     } elseif (is_attachment()) { 
      $parent = get_post($parent_id); 
      $cat = get_the_category($parent->ID); $cat = $cat[0]; 
      $cats = get_category_parents($cat, TRUE, $delimiter); 
      $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats); 
      $cats = str_replace('</a>', '</a>' . $link_after, $cats); 
      if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats); 
      echo $cats; 
      printf($link, get_permalink($parent), $parent->post_title); 
      if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after; 

     } elseif (is_page() && !$parent_id) { 
      if ($show_current == 1) echo $before . get_the_title() . $after; 

     } elseif (is_page() && $parent_id) { 
      if ($parent_id != $frontpage_id) { 
       $breadcrumbs = array(); 
       while ($parent_id) { 
        $page = get_page($parent_id); 
        if ($parent_id != $frontpage_id) { 
         $breadcrumbs[] = sprintf($link, get_permalink($page->ID), get_the_title($page->ID)); 
        } 
        $parent_id = $page->post_parent; 
       } 
       $breadcrumbs = array_reverse($breadcrumbs); 
       for ($i = 0; $i < count($breadcrumbs); $i++) { 
        echo $breadcrumbs[$i]; 
        if ($i != count($breadcrumbs)-1) echo $delimiter; 
       } 
      } 
      if ($show_current == 1) { 
       if ($show_home_link == 1 || ($parent_id_2 != 0 && $parent_id_2 != $frontpage_id)) echo $delimiter; 
       echo $before . get_the_title() . $after; 
      } 

     } elseif (is_tag()) { 
      echo $before . sprintf($text['tag'], single_tag_title('', false)) . $after; 

     } elseif (is_author()) { 
      global $author; 
      $userdata = get_userdata($author); 
      echo $before . sprintf($text['author'], $userdata->display_name) . $after; 

     } elseif (is_404()) { 
      echo $before . $text['404'] . $after; 
     } 

     if (get_query_var('paged')) { 
      if (is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author()) echo ' ('; 
      echo __('Page') . ' ' . get_query_var('paged'); 
      if (is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author()) echo ')'; 
     } 

     echo '</div><!-- .breadcrumbs -->'; 

    } 
} 

Das ist meine Lösung und funktionierte gut für mich.

Verwandte Themen