• Resolved Andreas 2013

    (@andreas-2013)


    Hi John,

    thank you for the nice plugin. Unfortunately I got problems, and I hope you can help me!

    I’m working with a custom post type “person”, which I disabled from displaying in the breadcrumbs in the plugin settings.

    I created a hierarchical custom taxonomy “cars” with terms like “bmw” (parent) and “x1” (child).
    The URL-path looks like that: example.de/cars/bmw/x1/
    But the breadcrumb path looks like that: Home -> BMW -> X1, what means, that “Cars” is missing.

    Is there a way, to add the base slug “cars” of the custom taxonomy? I tried to add some code in the placeholders, but it didn’t work correctly.

    By the way, I can’t open example.de/cars/, I’m getting an 404 error message. I think, the missing breadcrumb item is related to this problem? Is it possible, to add content to this “page”?

    I would be very glad, if you have an idea to solve this problem ??

    Kind regards
    Andreas

Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Author John Havlik

    (@mtekk)

    As far as I am aware, WordPress doesn’t really have a concept of an archive page or root page for taxonomies. Typically, taxonomies end up getting associated with post types, which do have archive pages/root pages. Hence, Breadcrumb NavXT doesn’t add a breadcrumb in for the taxonomy name into the breadcrumb trail. Likewise, when you try to navigate to the /cars/ you get a 404 error message as WordPress doesn’t actually have any idea what to display there.

    That all said, you can add arbitrary breadcrumbs to the breadcrumb trail using the bcn_after_fill action (adding new instances of bcn_breadcrumb to the breadcrumbs array (member of the bcn_breadcrumb_trail object that is passed into the action)).

    As for making a root page for the taxonomy (make cars be something real/not a 404), in theory you could make a page called Cars. However, I think by default it causes permalink resolving issues with your taxonomy base slug. There may be a way around that with some custom permalink rules, but it’s been quite some time since I’ve messed with those so I, unfortunately, can’t give a definitive answer here.

    Thread Starter Andreas 2013

    (@andreas-2013)

    Hi John,

    thank you for your reply!

    I did some research and found these articles:

    https://mtekk.us/archives/guides/add-a-static-breadcrumb-to-the-breadcrumb-trail/
    https://www.ads-software.com/support/topic/insert-item-between-breadcrumb-on-specific-pages/

    I didn’t know, that this plugin offers such user-friendly customization options. Now I’m sure I can solve the problem easily ??

    I have several other taxonomies, and this is one example structure:
    example.de/birthplace/australia/sydney

    “birthplace” is a custom taxonomy with hierarchical terms like australia and sydney. But “birthplace” is also a normal wordpress page, where I’ve inserted a table of contents of the existing terms. It works without problems.

    The breadcrumbs should look like this:

    Home -> Birthplace (content of the page “birthplace”)
    Home -> Birthplace -> Australia (content of term australia)
    Home -> Birthplace -> Australia -> Sydney (content of term sydney)

    So I need a static breadcrumb item called “Birthplace” between the Home- and the Country-item. I’ve tried something with the code examples, but I can’t get it right.

    The following code displays: Home -> Birthplace -> Birthplace of persons (where ‘Birthplace of persons’ is the title-tag of the page):

    add_filter('bcn_after_fill', 'my_static_breadcrumb_adder');
    function my_static_breadcrumb_adder($breadcrumb_trail) {
    $new_breadcrumb = new bcn_breadcrumb('Birthplace', NULL, array('birthplace'), '/birthplace/');
    array_splice($breadcrumb_trail->breadcrumbs, -1, -0, array($new_breadcrumb));
    }

    When I change the numbers in the array_splice from “-1, -0” to “-2, -1” the breadcrumb path is “Home -> Birthplace”, that means the word I’ve set in ‘new bcn_breadcrumb’, is taken.
    Could you explain the meaning of the numbers, please? (I found a description of the hooks, but unfortunately without examples).
    I would like to have this breadcrumb path for the page ‘birthplace’: Home -> Birthplace of persons (title tag)

    For the two taxonomy terms (australia, sydney) I tried to modify the code, but can’t get it to work correctly, because the inserted item was on the wrong position and without link. I would be very glad, if you could help me!

    Thank you very much in advance!

    Andreas

    Turk

    (@turk)

    So I need a static breadcrumb item called “Birthplace” between the Home- and the Country-item. I’ve tried something with the code examples, but I can’t get it right.

    If Birthplace and the Country stuff are all pages you should be able to do it the way I did. It may not be very efficient, but it does what I wanted.

    I have a Misc page for a set of Misc random pages. The Actual Misc Page has basic table of contents linking to the 5 random pages.

    In the <title> I put this (all of this is in my header theme template):

    <?php if ( is_page() ) { ?><?php bloginfo('name'); ?> &raquo; <?php } ?>
    <?php echo strip_tags(bcn_display(true, false)); ?>

    And for the breadcrumb this:

    <?php if ( is_page() ) { ?><a href="/"><?php bloginfo('name'); ?></a> &raquo; <?php } ?>

    <?php
    if(function_exists('bcn_display'))
    {
    	bcn_display();
    }
    ?>

    My Misc page in question is here.

    • This reply was modified 2 years ago by Turk.
    • This reply was modified 2 years ago by Turk.
    Thread Starter Andreas 2013

    (@andreas-2013)

    Hello,

    I get it to work now with this code:

    add_filter('bcn_after_fill', 'static_item');
    function static_item($breadcrumb_trail) {
    $url = $_SERVER['REQUEST_URI'];
    $slash = substr_count($url, '/');
    if (is_tax('birthplace')) {
    $new_breadcrumb = new bcn_breadcrumb('Birthplaces', '<span property="itemListElement" typeof="ListItem"><a property="item" typeof="WebPage" title="Go to the %title% Birthplace archives." href="%link%" class="%type%" bcn-aria-current><span property="name">%htitle%</span></a><meta property="position" content="%position%"></span>', array('birthplace'), '/birthplace/');
    array_splice($breadcrumb_trail->breadcrumbs, -1, 0, array($new_breadcrumb));
    } 
    elseif (is_page('birthplace')) {
    $new_breadcrumb = new bcn_breadcrumb('Birthplaces', '<span property="itemListElement" typeof="ListItem"><span property="name" class="%type%">%htitle%</span><meta property="url" content="%link%"><meta property="position" content="%position%"></span>', array('birthplace'), '/birthplace/');
    array_splice($breadcrumb_trail->breadcrumbs, -2, 1, array($new_breadcrumb));
    }
    }

    @john: could you take a look at the code, please, if it can/needs to be optimized?

    Thank you in advance!

    Thread Starter Andreas 2013

    (@andreas-2013)

    Hi John,

    I’ve successfully modified all breadcrumb paths ??

    I have one last question. Some plugins insert breadcrumbs only visible for searchengines. Does your plugin offer this possibility too? I would like to remove the path on some pages for optical reasons.

    Plugin Author John Havlik

    (@mtekk)

    To answer your most recent question, the way this is usually done is having a JSON-LD version of the breadcrumb trail in the header of the webpage. Yoast SEO provides an interface, and https://github.com/mtekk/Breadcrumb-NavXT-Schema hooks into it to use the Breadcrumb NavXT version of the breadcrumb trail instead of the Yoast SEO one. If you don’t want to use Yoast SEO, you can still use the Schema extension plugin as a reference (the call to bcn_display_json_ld is what you want to play with).

    I haven’t had a chance to review the code in your previous comment yet, hopefully I can take a look at it tomorrow.

    Thread Starter Andreas 2013

    (@andreas-2013)

    Hi John, that works perfect, thank you very much ??

    Do you know, if it’s a problem to mix both codes on a website (“normal” markup and json)?

    And I would be happy, if you could explain the variables for “new bcn_breadcrumb” and the use of the offset and length in the array_splice command.

    Plugin Author John Havlik

    (@mtekk)

    Normally, you do not want two instances of a schema.org BreadcrumbList within a webpage as it’ll confuse search engines. So, you can have the JSON-LD markup and the visible trail, but you’d likely want to remove the schema.org markup from the visible trail.

    new bcn_breadcrumb creates a new bcn_breadcrumb object instantiation. You can review the class and its constructor here: https://github.com/mtekk/Breadcrumb-NavXT/blob/master/class.bcn_breadcrumb.php#L50 There is PHPDoc comments for every member function in that class.

    The parameters for the __construct function are the same that can be passed in when instantiating a new bcn_breadcrumb object. Take a look at the PHPDoc comment block before the constructor’s definition and let me know if you have any questions (some of the parameters are simple, others may be less obvious).

    array_splice is something I haven’t worked with in a while however the parameters are mostly straight forward. The first is the array you are going to modify/work with. The second is the offset at where you want to start within the array. This parameter has a second feature that using negative values indexes from the end of the array (-1 is the last element, -2 is the 2nd to last element, etc). The third parameters is the number of elements in the array to replace (use 0 if just inserting item(s) into the array). The last parameter is the “replacement”/items you are adding to the array (in our case it’s a bcn_breadcrumb instance).

    Thread Starter Andreas 2013

    (@andreas-2013)

    Hi John,

    you’re right, I will remove the schema.org markup from the visible trail. I noticed, that it’s very easy via the placeholders in the settings ??

    Thank you very much for your help and your patience!
    Andreas

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Custom Taxonomy: Missing item’ is closed to new replies.