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
は決して実行されません。そのフィルタが呼び出されないようなものです。
それはあなたのフィルタ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による アクションとフィルタフックリファレンス を参照してください。
このソリューションは、パンくずリストおよび店舗ナビゲーションからカテゴリを隠します。
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;
}