我正在try 使用Rank Math基本类别选项来显示WooCommerce中的相关产品.

我已经用这个代码很好地解决了这个问题:

/* Rank Math SEO - Use Primary Category for Related Products */
function related_products_from_rank_math_primary_category( $related_posts, $product_id, $args  ) {

    // Get the primary category/term as saved by Rank Math SEO
    $primary_cat_id   = get_post_meta( $product_id, 'rank_math_primary_product_cat', true );
    $primary_cat_info = get_term_by( 'id', $primary_cat_id, 'product_cat' );
    $primary_cat_slug = $primary_cat_info->slug;

    // Get ids of just the posts in this category. We only want related posts from the primary category.
    $args = array(
        'status'            => 'publish',
        'category'          => array( $primary_cat_slug ),
        'return'            => 'ids',
        'exclude'           => array( $product_id ),
        'visibility'        => 'catalog',
        'posts_per_page'    => -1,
    );
    $related_posts = wc_get_products( $args );

    return $related_posts;

}
add_filter( 'woocommerce_related_products', 'related_products_from_rank_math_primary_category', 10, 3 );

问题是,如果一个产品只属于一个类别,它就没有一个主要类别……因此不会展示任何相关产品.

有没有办法我可以添加一些额外的代码,以显示相关产品的类别,如果它只在一个类别…如果它在一个以上的类别中,将使用等级数学初级类别吗?

如有任何帮助,我们不胜感激.

推荐答案

您只需计算产品中设置的产品类别即可.

try 以下操作:

function related_products_from_rank_math_primary_category( $related_posts, $product_id, $args  ) {
    $taxonomy   = 'product_cat';
    $categories = wp_get_post_terms($product_id, $taxonomy, array('fields' => 'ids') ); // Get product categories

    // Check if the product has more than one product category
    if( count( $categories ) > 1 ) {
        // Get the primary category/term as saved by Rank Math SEO
        $primary_cat_id   = get_post_meta( $product_id, 'rank_math_primary_product_cat', true );
        $primary_cat_info = get_term_by( 'id', $primary_cat_id, $taxonomy );

        // Get ids of just the posts in this category. We only want related posts from the primary category.
        $related_posts = wc_get_products( array(
            'status'        => 'publish',
            'category'      => array( $primary_cat_info->slug ),
            'return'        => 'ids',
            'exclude'       => array( $product_id ),
            'visibility'    => 'catalog',
            'limit'         => -1,
        ) );
    }
    return $related_posts;
}
add_filter( 'woocommerce_related_products', 'related_products_from_rank_math_primary_category', 10, 3 );

现在应该行得通了.

Php相关问答推荐

在不刷新页面的情况下无法使用JQuery更新id

在AJX请求中使用简写后,FormData出现非法调用错误

WooCommerce中仅在单一产品和产品档案页面中将小数设置为大写

PHP测试字符串的所有POST值

在WooCommerce中的本地收件发货方式下添加一个 Select 字段

将一个情态形式放在细丝v3中的形式中间

针对给定产品类别的WooCommerce计数审核

上传WordPress模板中的翻译文件(.mo和.po)

Laravel路由到控制器传输变量解决方案需要

根据类别的数量折扣更改WooCommerce购物车商品价格

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

未检测到laravel控制器

execute_query 和prepare+execute 有什么区别?

PHP 中使用 JSON 的自定义会话处理程序会因错误而 destruct 会话

使用自定义规则进行 Livewire 验证不会显示错误

Laravel 添加到经过身份验证的用户的数据将应用于每个查询

根据WooCommerce中选定的变体重量更改输入数量步值

从图像URL中获取文件扩展名?

如何在 Laravel 中修改嵌套数组的键?

如何使用属性创建属性预设?