Saya mempunyai kedai woocommerce dengan kategori tersuai "Sukan". Klasifikasi mempunyai tiga peringkat - ibu bapa, anak, anak - contohnya: Sukan Dalaman > Jika pengguna melihat item Bola Keranjang, maka saya mahu produk yang berkaitan menunjukkan item Bola Keranjang yang lain dahulu, dan kemudian kembali ke item Sukan Arena jika tidak ada item Bola Keranjang yang mencukupi. Jadi, tahap yang paling rendah disemak dahulu - Sub-Child, kemudian Child, kemudian Ibu Bapa.
Selain itu, saya menggunakan RankMath dan saya boleh menetapkan istilah klasifikasi sebagai istilah "utama". Jadi, dalam contoh di atas, istilah utamanya ialah bola keranjang. Istilah utama hampir selalu merupakan sub-sub-istilah, tetapi mungkin juga sub-istilah.
Saya menggabungkan jawapan daripada dua soalan lain dan kod tersebut berfungsi dengan memilih produk yang berkaitan daripada kategori sukan. Tetapi ia hanya melihat pada sub-peringkat, bukan sub-sub-peringkat. Jadi, dalam contoh di atas, ia memilih item dalam Sukan Arena tanpa mengutamakan Bola Keranjang.
Apakah perubahan yang perlu saya buat untuk memastikan produk berkaitan melihat istilah taksonomi "utama" dan kemudian mencari produk dengan istilah itu dahulu, dan kemudian (jika perlu) peringkat seterusnya ke bawah hierarki istilah?
Terima kasih atas sebarang bantuan atau nasihat yang boleh anda berikan.
Saya merujuk kepada dua artikel ini semasa merangka kod:
Produk Berkaitan WooCommerce oleh Kategori Kanak-kanak sebagai Sandaran kepada Kedudukan Kategori Utama Matematik
Gunakan taksonomi tersuai untuk memilih produk yang berkaitan dalam Woocommerce
Ini adalah kod yang saya gunakan sekarang:
add_filter( 'woocommerce_related_products', 'related_products_from_rankmath_primary_esporte_taxonomy', 10, 3 ); function related_products_from_rankmath_primary_esporte_taxonomy( $related_posts, $product_id, $args ) { $taxonomy = 'sport'; $term_ids = wp_get_post_terms( $product_id, $taxonomy, array( 'fields' => 'ids' ) ); $term_slugs = array(); if( count($term_ids) == 1 ) { // Get children categories $children_ids = get_term_children( reset($category_ids), $taxonomy ); // Loop through children terms Ids foreach ( $children_ids as $tem_id ) { $term_slugs[] = get_term_by( 'id', $tem_id, $taxonomy )->slug; // get the slug from each term Id } } elseif( count( $term_ids ) > 1 ) { // Get the primary taxonomy/term as saved by Rank Math SEO $primary_tax_id = get_post_meta( $product_id, 'rank_math_primary_taxonomy', true ); $term_slugs[] = get_term_by( 'id', $primary_tax_id, $taxonomy )->slug; // get the slug from the term Id } if ( count( $term_ids ) > 0 ) { foreach ( $term_ids as $term_id ) { $term_slugs[] = get_term_by( 'id', $term_id, $taxonomy )->slug; // Gets the IDs of child terms $children_ids = get_term_children( $term_id, $taxonomy ); foreach ( $children_ids as $child_id ) { $term_slugs[] = get_term_by( 'id', $child_id, $taxonomy )->slug; // Gets the slug of each child term } } $related_posts = wc_get_products( array( 'status' => 'publish', 'tax_query' => array( array( 'taxonomy' => $taxonomy, 'field' => 'slug', 'terms' => $term_slugs, ), ), 'return' => 'ids', 'exclude' => array( $product_id ), 'visibility' => 'catalog', 'limit' => -1, ) ); } return $related_posts; }
Cuba yang berikut (disemak):
Sepatutnya berkesan.