我有一家 woocommerce 商店,其自訂分類為「運動」。此分類有三個等級 - 父級、子級、子級 - 例如:室內運動 > 競技場運動 > 籃球。如果使用者查看籃球項目,那麼我希望相關產品優先顯示其他籃球項目,然後在沒有足夠的籃球項目時回退到 Arena Sport 項目。因此,首先檢查最低級別 - Sub-Child,然後是 Child,然後是 Parent。
此外,我使用 RankMath,並且可以將分類術語設定為「主要」術語。因此,在上面的範例中,主要術語是籃球。主要術語幾乎總是子子術語,但也可能是子術語。
我結合了其他兩個問題的回答,程式碼的工作原理是從運動分類中選擇相關產品。但它只看子級別,不考慮子級別。因此,在上面的範例中,它選擇 Arena Sports 中的項目,而不優先考慮籃球。
我應該進行哪些更改才能確保相關產品看到“主要”分類術語,然後首先查找具有該術語的產品,然後(如有必要)在術語層次結構的下一級中查找?
感謝您提供的任何幫助或建議。
我在起草程式碼時參考了這兩篇文章:
以兒童類別劃分的 WooCommerce 相關產品作為排名數學主要類別的後備
使用自訂分類法在 Woocommerce 中選擇相關產品
這是我目前正在使用的程式碼:
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; }
嘗試以下操作(已評論):
它應該可以工作。