8

私は woocommerce を (内部ページで) 使用する WordPress サイトを持っています。ショップページの URL 構造は次のとおりです。

mysite/ショップ/

woocommerce ページのパンくずリストには、次のようなホーム リンクのみが表示されます。

そして私の製品ページのURL:

マイサイト/商品カテゴリー/カテゴリー名/

私のショップページのブレッドクラムは次のように表示されます:

You are here: Home 

また、私のカテゴリページのパンくずリストは次のように表示されます:

You are here: Home

次のように表示する必要があります:

現在位置: ホーム / ショッピング / カテゴリ名

パーマリンクのオプションを確認しましたが、問題ないようです。breadcrumb.php テンプレート ファイルを確認したところ、shop () ページが私のサイトのホームページであると見なされているようです。

これを修正するにはどうすればよいですか。breadcrumb.php を編集する必要がありますか、それとも設定にエラーがありますか? 前もって感謝します。

4

4 に答える 4

10

私はこれをデバッグしていましたが、残念ながら Woocommerce (ver. 2.3.8) はパンくず配列を直接調整するためのフックを使用していません。したがって、パーマリンク構造を変更せずに表示されるパンくずリストを変更する場合は、パンくずリストのテンプレート ファイルをプラグイン ( /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;
}
于 2015-06-04T22:46:55.057 に答える
5

これははるかに簡単に行うことができます。問題 3145で github に記載されているように、それに応じてパーマリンク設定を変更する必要があります。

次の基準を満たします。

// If permalinks contain the shop page in the URI prepend the breadcrumb with shop 
if (
  $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 . $delimiter;
 }

それ以外の場合は、先頭に追加されることはありません。

これを適用するには、次の場所に移動する必要があります。

→ WordPress バックエンド → 設定 → パーマリンク

そして、woocommerce パーマリンク設定を次のいずれかに設定します。

  • ショップベース
  • カテゴリーのあるショップベース
  • カスタムベース

後者を使用する場合は、スラッグ »/shop/...« を先頭に追加する必要があります。

問題 6584があります:

警告: preg_match(): 行 533 の wc-core-functions.php の不明な修飾子 't'

たとえば、»Custom Base« が次のような場合に発生します: »/shop/product/...«。それを修正したコミットがあります。これはマスターでは利用できますが、2.2.8 では利用できません。

スラッグ パーツ ショップは、ローカライズされたものなど、他のものに置き換えることもできます。

于 2014-11-05T13:11:35.493 に答える
1

ブレッドクラム コードが私の法廷テーマ フォルダーの 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>";}

woocommerce のデフォルトのページではなく、自分のショップにカスタム ページを使用しているため、blog_name を取得する行にコメントを付けました。これを行う別の方法があるかどうかはわかりませんが、このテーマのほとんどのコードは、ウィジェット css であってもあまり専門的ではないことに気付きました。それは悪い選択でした。

于 2013-07-08T22:04:29.313 に答える