WooCommerce面包屑仅在购物车和结账页面中

时间:2017-06-26 作者:Krystian

我想知道为什么不使用插件就可以让面包屑只出现在购物车和结账页面上?

我正在使用Flatsome 3。x和我创建了一个子主题。我知道如何调整,但我正在努力找到解决办法。

enter image description here

1 个回复
SO网友:CodeMascot

实际上,您需要将breadcrumbs函数挂接到在购物车和检查页面中激发的任何挂钩上。在下面的例子中,我调用了the_dramatist_show_breadcrumbs 我已经迷上了woocommerce_before_cart 对于购物车页面和woocommerce_before_checkout_form 用于签出表单。整个代码块如下所示-

For minimal usage ( Only at pages, As you wanted in comment )-

根据您的评论进行更新。这个东西也经过了测试。

add_action( \'woocommerce_before_cart\', \'the_dramatist_page_breadcrumbs\');
add_action( \'woocommerce_before_checkout_form\', \'the_dramatist_page_breadcrumbs\');

// Breadcrumbs
function the_dramatist_page_breadcrumbs() {
    // Settings
    $separator          = \'>\';
    $breadcrums_id      = \'breadcrumbs\';
    $breadcrums_class   = \'breadcrumbs\';
    $home_title         = \'Homepage\';

    // Get the query & post information
    global $post,$wp_query;

    echo \'<style>
        #breadcrumbs{
            list-style:none;
            margin:10px 0;
            overflow:hidden;
        }

        #breadcrumbs li{
            display:inline-block;
            vertical-align:middle;
            margin-right:15px;
        }

        #breadcrumbs .separator{
            font-size:18px;
            font-weight:100;
            color:#ccc;
        }

    </style>\';
    // Build the breadcrums
    echo \'<ul id="\' . $breadcrums_id . \'" class="\' . $breadcrums_class . \'">\';

    // Home page
    echo \'<li class="item-home"><a class="bread-link bread-home" href="\' . get_home_url() . \'" title="\' . $home_title . \'">\' . $home_title . \'</a></li>\';
    echo \'<li class="separator separator-home"> \' . $separator . \' </li>\';

    if ( is_archive() && !is_tax() && !is_category() && !is_tag() ) {

        echo \'<li class="item-current item-archive"><strong class="bread-current bread-archive">\' . post_type_archive_title($prefix, false) . \'</strong></li>\';

    } else {

        // Standard page
        if( $post->post_parent ){

            // If child page, get parents
            $anc = get_post_ancestors( $post->ID );

            // Get parents in the right order
            $anc = array_reverse($anc);

            // Parent page loop
            if ( !isset( $parents ) ) $parents = null;
            foreach ( $anc as $ancestor ) {
                $parents .= \'<li class="item-parent item-parent-\' . $ancestor . \'"><a class="bread-parent bread-parent-\' . $ancestor . \'" href="\' . get_permalink($ancestor) . \'" title="\' . get_the_title($ancestor) . \'">\' . get_the_title($ancestor) . \'</a></li>\';
                $parents .= \'<li class="separator separator-\' . $ancestor . \'"> \' . $separator . \' </li>\';
            }

            // Display parent pages
            echo $parents;

            // Current page
            echo \'<li class="item-current item-\' . $post->ID . \'"><strong title="\' . get_the_title() . \'"> \' . get_the_title() . \'</strong></li>\';

        } else {

            // Just display current page if not parents
            echo \'<li class="item-current item-\' . $post->ID . \'"><strong class="bread-current bread-\' . $post->ID . \'"> \' . get_the_title() . \'</strong></li>\';

        }

    }
    echo \'</ul>\';

}
And for generic usage-

add_action( \'woocommerce_before_cart\', \'the_dramatist_show_breadcrumbs\');
add_action( \'woocommerce_before_checkout_form\', \'the_dramatist_show_breadcrumbs\');

// Breadcrumbs
function the_dramatist_breadcrumbs() {

    // Settings
    $separator          = \'>\';
    $breadcrums_id      = \'breadcrumbs\';
    $breadcrums_class   = \'breadcrumbs\';
    $home_title         = \'Homepage\';

    // If you have any custom post types with custom taxonomies, put the taxonomy name below (e.g. product_cat)
    $custom_taxonomy    = \'product_cat\';

    // Get the query & post information
    global $post,$wp_query;

    echo \'<style>
        #breadcrumbs{
            list-style:none;
            margin:10px 0;
            overflow:hidden;
        }

        #breadcrumbs li{
            display:inline-block;
            vertical-align:middle;
            margin-right:15px;
        }

        #breadcrumbs .separator{
            font-size:18px;
            font-weight:100;
            color:#ccc;
        }

    </style>\';

    // Do not display on the homepage
    if ( !is_front_page() ) {

        // Build the breadcrums
        echo \'<ul id="\' . $breadcrums_id . \'" class="\' . $breadcrums_class . \'">\';

        // Home page
        echo \'<li class="item-home"><a class="bread-link bread-home" href="\' . get_home_url() . \'" title="\' . $home_title . \'">\' . $home_title . \'</a></li>\';
        echo \'<li class="separator separator-home"> \' . $separator . \' </li>\';

        if ( is_archive() && !is_tax() && !is_category() && !is_tag() ) {

            echo \'<li class="item-current item-archive"><strong class="bread-current bread-archive">\' . post_type_archive_title($prefix, false) . \'</strong></li>\';

        } else if ( is_archive() && is_tax() && !is_category() && !is_tag() ) {

            // If post is a custom post type
            $post_type = get_post_type();

            // If it is a custom post type display name and link
            if($post_type != \'post\') {

                $post_type_object = get_post_type_object($post_type);
                $post_type_archive = get_post_type_archive_link($post_type);

                echo \'<li class="item-cat item-custom-post-type-\' . $post_type . \'"><a class="bread-cat bread-custom-post-type-\' . $post_type . \'" href="\' . $post_type_archive . \'" title="\' . $post_type_object->labels->name . \'">\' . $post_type_object->labels->name . \'</a></li>\';
                echo \'<li class="separator"> \' . $separator . \' </li>\';

            }

            $custom_tax_name = get_queried_object()->name;
            echo \'<li class="item-current item-archive"><strong class="bread-current bread-archive">\' . $custom_tax_name . \'</strong></li>\';

        } else if ( is_single() ) {

            // If post is a custom post type
            $post_type = get_post_type();

            // If it is a custom post type display name and link
            if($post_type != \'post\') {

                $post_type_object = get_post_type_object($post_type);
                $post_type_archive = get_post_type_archive_link($post_type);

                echo \'<li class="item-cat item-custom-post-type-\' . $post_type . \'"><a class="bread-cat bread-custom-post-type-\' . $post_type . \'" href="\' . $post_type_archive . \'" title="\' . $post_type_object->labels->name . \'">\' . $post_type_object->labels->name . \'</a></li>\';
                echo \'<li class="separator"> \' . $separator . \' </li>\';

            }

            // Get post category info
            $category = get_the_category();

            if(!empty($category)) {

                // Get last category post is in
                $last_category = end(array_values($category));

                // Get parent any categories and create array
                $get_cat_parents = rtrim(get_category_parents($last_category->term_id, true, \',\'),\',\');
                $cat_parents = explode(\',\',$get_cat_parents);

                // Loop through parent categories and store in variable $cat_display
                $cat_display = \'\';
                foreach($cat_parents as $parents) {
                    $cat_display .= \'<li class="item-cat">\'.$parents.\'</li>\';
                    $cat_display .= \'<li class="separator"> \' . $separator . \' </li>\';
                }

            }

            // If it\'s a custom post type within a custom taxonomy
            $taxonomy_exists = taxonomy_exists($custom_taxonomy);
            if(empty($last_category) && !empty($custom_taxonomy) && $taxonomy_exists) {

                $taxonomy_terms = get_the_terms( $post->ID, $custom_taxonomy );
                $cat_id         = $taxonomy_terms[0]->term_id;
                $cat_nicename   = $taxonomy_terms[0]->slug;
                $cat_link       = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
                $cat_name       = $taxonomy_terms[0]->name;

            }

            // Check if the post is in a category
            if(!empty($last_category)) {
                echo $cat_display;
                echo \'<li class="item-current item-\' . $post->ID . \'"><strong class="bread-current bread-\' . $post->ID . \'" title="\' . get_the_title() . \'">\' . get_the_title() . \'</strong></li>\';

                // Else if post is in a custom taxonomy
            } else if(!empty($cat_id)) {

                echo \'<li class="item-cat item-cat-\' . $cat_id . \' item-cat-\' . $cat_nicename . \'"><a class="bread-cat bread-cat-\' . $cat_id . \' bread-cat-\' . $cat_nicename . \'" href="\' . $cat_link . \'" title="\' . $cat_name . \'">\' . $cat_name . \'</a></li>\';
                echo \'<li class="separator"> \' . $separator . \' </li>\';
                echo \'<li class="item-current item-\' . $post->ID . \'"><strong class="bread-current bread-\' . $post->ID . \'" title="\' . get_the_title() . \'">\' . get_the_title() . \'</strong></li>\';

            } else {

                echo \'<li class="item-current item-\' . $post->ID . \'"><strong class="bread-current bread-\' . $post->ID . \'" title="\' . get_the_title() . \'">\' . get_the_title() . \'</strong></li>\';

            }

        } else if ( is_category() ) {

            // Category page
            echo \'<li class="item-current item-cat"><strong class="bread-current bread-cat">\' . single_cat_title(\'\', false) . \'</strong></li>\';

        } else if ( is_page() ) {

            // Standard page
            if( $post->post_parent ){

                // If child page, get parents
                $anc = get_post_ancestors( $post->ID );

                // Get parents in the right order
                $anc = array_reverse($anc);

                // Parent page loop
                if ( !isset( $parents ) ) $parents = null;
                foreach ( $anc as $ancestor ) {
                    $parents .= \'<li class="item-parent item-parent-\' . $ancestor . \'"><a class="bread-parent bread-parent-\' . $ancestor . \'" href="\' . get_permalink($ancestor) . \'" title="\' . get_the_title($ancestor) . \'">\' . get_the_title($ancestor) . \'</a></li>\';
                    $parents .= \'<li class="separator separator-\' . $ancestor . \'"> \' . $separator . \' </li>\';
                }

                // Display parent pages
                echo $parents;

                // Current page
                echo \'<li class="item-current item-\' . $post->ID . \'"><strong title="\' . get_the_title() . \'"> \' . get_the_title() . \'</strong></li>\';

            } else {

                // Just display current page if not parents
                echo \'<li class="item-current item-\' . $post->ID . \'"><strong class="bread-current bread-\' . $post->ID . \'"> \' . get_the_title() . \'</strong></li>\';

            }

        } else if ( is_tag() ) {

            // Tag page

            // Get tag information
            $term_id        = get_query_var(\'tag_id\');
            $taxonomy       = \'post_tag\';
            $args           = \'include=\' . $term_id;
            $terms          = get_terms( $taxonomy, $args );
            $get_term_id    = $terms[0]->term_id;
            $get_term_slug  = $terms[0]->slug;
            $get_term_name  = $terms[0]->name;

            // Display the tag name
            echo \'<li class="item-current item-tag-\' . $get_term_id . \' item-tag-\' . $get_term_slug . \'"><strong class="bread-current bread-tag-\' . $get_term_id . \' bread-tag-\' . $get_term_slug . \'">\' . $get_term_name . \'</strong></li>\';

        } elseif ( is_day() ) {

            // Day archive

            // Year link
            echo \'<li class="item-year item-year-\' . get_the_time(\'Y\') . \'"><a class="bread-year bread-year-\' . get_the_time(\'Y\') . \'" href="\' . get_year_link( get_the_time(\'Y\') ) . \'" title="\' . get_the_time(\'Y\') . \'">\' . get_the_time(\'Y\') . \' Archives</a></li>\';
            echo \'<li class="separator separator-\' . get_the_time(\'Y\') . \'"> \' . $separator . \' </li>\';

            // Month link
            echo \'<li class="item-month item-month-\' . get_the_time(\'m\') . \'"><a class="bread-month bread-month-\' . get_the_time(\'m\') . \'" href="\' . get_month_link( get_the_time(\'Y\'), get_the_time(\'m\') ) . \'" title="\' . get_the_time(\'M\') . \'">\' . get_the_time(\'M\') . \' Archives</a></li>\';
            echo \'<li class="separator separator-\' . get_the_time(\'m\') . \'"> \' . $separator . \' </li>\';

            // Day display
            echo \'<li class="item-current item-\' . get_the_time(\'j\') . \'"><strong class="bread-current bread-\' . get_the_time(\'j\') . \'"> \' . get_the_time(\'jS\') . \' \' . get_the_time(\'M\') . \' Archives</strong></li>\';

        } else if ( is_month() ) {

            // Month Archive

            // Year link
            echo \'<li class="item-year item-year-\' . get_the_time(\'Y\') . \'"><a class="bread-year bread-year-\' . get_the_time(\'Y\') . \'" href="\' . get_year_link( get_the_time(\'Y\') ) . \'" title="\' . get_the_time(\'Y\') . \'">\' . get_the_time(\'Y\') . \' Archives</a></li>\';
            echo \'<li class="separator separator-\' . get_the_time(\'Y\') . \'"> \' . $separator . \' </li>\';

            // Month display
            echo \'<li class="item-month item-month-\' . get_the_time(\'m\') . \'"><strong class="bread-month bread-month-\' . get_the_time(\'m\') . \'" title="\' . get_the_time(\'M\') . \'">\' . get_the_time(\'M\') . \' Archives</strong></li>\';

        } else if ( is_year() ) {

            // Display year archive
            echo \'<li class="item-current item-current-\' . get_the_time(\'Y\') . \'"><strong class="bread-current bread-current-\' . get_the_time(\'Y\') . \'" title="\' . get_the_time(\'Y\') . \'">\' . get_the_time(\'Y\') . \' Archives</strong></li>\';

        } else if ( is_author() ) {

            // Auhor archive

            // Get the author information
            global $author;
            $userdata = get_userdata( $author );

            // Display author name
            echo \'<li class="item-current item-current-\' . $userdata->user_nicename . \'"><strong class="bread-current bread-current-\' . $userdata->user_nicename . \'" title="\' . $userdata->display_name . \'">\' . \'Author: \' . $userdata->display_name . \'</strong></li>\';

        } else if ( get_query_var(\'paged\') ) {

            // Paginated archives
            echo \'<li class="item-current item-current-\' . get_query_var(\'paged\') . \'"><strong class="bread-current bread-current-\' . get_query_var(\'paged\') . \'" title="Page \' . get_query_var(\'paged\') . \'">\'.__(\'Page\') . \' \' . get_query_var(\'paged\') . \'</strong></li>\';

        } else if ( is_search() ) {

            // Search results page
            echo \'<li class="item-current item-current-\' . get_search_query() . \'"><strong class="bread-current bread-current-\' . get_search_query() . \'" title="Search results for: \' . get_search_query() . \'">Search results for: \' . get_search_query() . \'</strong></li>\';

        } elseif ( is_404() ) {

            // 404 page
            echo \'<li>\' . \'Error 404\' . \'</li>\';
        }

        echo \'</ul>\';

    }

}
这东西是经过测试的。在我当地的环境中,它运行得很好。

希望以上答案对您有所帮助。

结束

相关推荐

Breadcrumbs - get the author?

我有自己的函数breadcrumbs()。在其中,我调用is\\u author()来确定我是否在作者页面上。如果是真的,我想知道我在哪个作者的页面上。我尝试了\\u author(),但没有结果。我还查阅了WP codex。有人能帮忙吗?