web-dev-qa-db-ja.com

Woocommerceブレッドクラムコンテンツを変更するにはどうすればいいですか?

PHPから直接ブレッドクラムをカスタマイズしたいです。一部のページは動的に生成され、データベースには存在しません。そのため、なんらかのPHPスクリプトを使用してそれらを自動的にブレッドクラムに入れる必要があります。

ホームページのURLや区切り文字など、デフォルトのものを変更する必要はありませんが、実際には手動でいくつかのページをブレッドクラムに入れる必要があります。私はいくつかのフィルタリングといくつかのフックを試していました。

私はドキュメンテーションを読みました しかしそれは単にデフォルトのものを変更する方法を説明しています。

ブレッドクラムの実際の内容を変更するにはどうすればよいですか。

私はこれを試しました:

add_filter( 'woocommerce_breadcrumb', 'change_breadcrumb' );
function change_breadcrumb( $defaults ) {
    // Change the breadcrumb home text from 'Home' to 'Appartment'
    //do something
    return $defaults;
}

しかし//do somethingは決して実行されません。そのフィルタが呼び出されないようなものです。

2
Alberto Fontana

それはあなたのフィルタwoocommerce_breadcrumbが存在しないという事実によるものです。

このフィルタはここで動作し、現在ブレッドクラムにあるすべての要素を(配列として)取り出します。

add_filter( 'woocommerce_get_breadcrumb', 'change_breadcrumb' );
function change_breadcrumb( $crumbs ) {
    var_dump( $crumbs );

    return $crumbs;
}

そしてこのフィルタは(オブジェクトとして)main termを引き出します。

add_filter( 'woocommerce_breadcrumb_main_term', 'change_breadcrumb' );
function change_breadcrumb( $main_term ) {
    var_dump( $main_term );

    return $main_term;
}

'main term'は、この関数によって返される最初の要素です( reference )。

$terms = wc_get_product_terms( $post->ID, 'product_cat', array( 'orderby' => 'parent', 'order' => 'DESC' ) )

すべてのフックとフィルタについては//woothemesによる アクションとフィルタフックリファレンス を参照してください。

3
honk31

このソリューションは、パンくずリストおよび店舗ナビゲーションからカテゴリを隠します。

add_filter( 'wp_get_object_terms', 'my_get_object_terms', 10, 4 );
function my_get_object_terms( $terms, $object_ids, $taxonomies, $args ) {
    $new_terms = array();

    // if a product category and on the shop page
    if (! is_admin() ) {
        foreach ( $terms as $key => $term ) {
            if ($term->slug !== 'all-products') {
                $new_terms[] = $term;
            }
        }

        $terms = $new_terms;
    }

    return $terms;
}
0
Mookie