首页 文章

woocommerce breadcrumb缺少商店链接

提问于
浏览
5

我有一个WordPress网站,使用woocommerce(在内部页面),我的网页结构如下:

mysite/shop/

woocommerce页面上的痕迹只显示主页链接:您在这里:主页

和我的产品页面网址:

Mysite/product-category/category_name/

我的店铺面包屑显示如下:

You are here: Home

我的类别页面痕迹显示如下:

You are here: Home

我需要把它显示为:

你在这里:主页/购物/ category_name

我检查了永久链接选项,但似乎没问题 . 我检查了breadcrumb.php模板文件,似乎认为shop()页面是我网站的主页 .

如果我编辑breadcrumb.php或我的设置中有错误,我该如何解决这个问题?提前致谢 .

3 回答

  • 4

    我正在调试这个,不幸的是Woocommerce(版本2.3.8)没有使用任何钩子来直接调整breadcrumbs数组 . 因此,如果您想要修改显示的面包屑而不更改固定链接结构,最好将breadcrumbs模板文件从插件( /woocommerce/templates/global/breadcrumb.php )复制到您的主题( /theme_name/woocommerce/global/ )中,然后在输出循环开始之前添加代码以包含链接 . 我只对产品类别,标签和细节这样做,但如果你愿意,你可以添加其他条件 .

    <?php
    /**
     * Shop breadcrumb
     *
     * @author      WooThemes
     * @package     WooCommerce/Templates
     * @version     2.3.0
     * @see         woocommerce_breadcrumb()
     */
    
    if ( ! defined( 'ABSPATH' ) ) {
        exit;
    }
    
    if ( $breadcrumb ) {
    
        // add shop home url to breadcrumbs
        if( is_product_category() || is_product_tag() || is_product() ) {
            $shop_page_id = wc_get_page_id( 'shop' );
            $shop_home_arr = array( get_the_title($shop_page_id), get_permalink($shop_page_id));
    
            // insert to breadcrumbs array on second position
            array_splice($breadcrumb, 1, 0, array($shop_home_arr));
        }
    
        echo $wrap_before;
    
        foreach ( $breadcrumb as $key => $crumb ) {
    
            echo $before;
    
            if ( ! empty( $crumb[1] ) && sizeof( $breadcrumb ) !== $key + 1 ) {
                echo '<a href="' . esc_url( $crumb[1] ) . '">' . esc_html( $crumb[0] ) . '</a>';
            } else {
                echo esc_html( $crumb[0] );
            }
    
            echo $after;
    
            if ( sizeof( $breadcrumb ) !== $key + 1 ) {
                echo $delimiter;
            }
        }
        echo $wrap_after;
    }
    
  • 8

    这可以轻松完成 . 只需要相应地更改固定链接设置 - 如issue 3145上的github所述:

    符合以下条件://如果永久链接包含URI中的商店页面,请在商店中添加面包屑
    如果(
    $ shop_page_id
    && strstr($ permalinks ['product_base'],'/' . $ shop_page-> post_name)
    && get_option('page_on_front')!== $ shop_page_id
    ){
    $ prepend = $ before
    . '<a href="'.get_permalink($shop_page).'">'
    . $ shop_page-> post_title . '</a>'
    . $ after . $分界;
    }
    否则它永远不会被假装 .

    要申请这个必须去:

    →WordPress后端→设置→永久链接

    并将woocommerce永久链接设置设置为以下之一:

    • 商店基地

    • 商店基地与类别

    • 自定义库

    如果使用后者,则必须预留slu»»/ shop / ...« .

    有一个issue 6584

    警告:preg_match():第533行的wc-core-functions.php中的未知修饰符't'

    例如,如果»Custom Base«看起来像这样:»/ shop / product / ...« . 有一个commit修复它,它在master中可用,但不是2.2.8 .

    slu part零件店也可以用其他东西代替,例如本地化的东西 .

  • 0

    我发现breadcrumb代码在我的courture主题文件夹的header.php中,该主题的作者没有为产品或产品类别页面编写代码,所以我添加了

    elseif (is_single() && get_post_type() == 'product'){   
    $posts_page_id = get_option('page_for_posts');
    $posts_page_url = get_permalink($posts_page_id); 
    echo '<li>';$bar = "shopping";
    if(get_option_tree('blog_name', '', false))
    /*$bar=get_option_tree('blog_name', '', false);*/ 
    echo "<a href=".home_url()."/shopping/>$bar</a></li>";
    echo "<li>";
    the_title();
    echo"</li>";
    }
    

    和产品类别页面

    if (is_tax()) { 
    $posts_page_id = get_option('page_for_posts');
    $posts_page_url = get_permalink($posts_page_id); 
    echo '<li>';$bar = "Shopping";
    if(get_option_tree('blog_name', '', false)) 
    echo "<a href=".home_url()."/shopping/>$bar</a> > </li>" ; 
    echo "<li>"; 
    woocommerce_page_title(); 
    echo"</li>";}
    

    我评论了获取blog_name的行,因为我为我的商店使用自定义页面而不是woocommerce默认页面 . 我不知道是否有另一种方法可以做到这一点但我注意到这个主题中的大多数代码即使在widget css中也不是很专业,这是一个糟糕的选择 .

相关问题