在 wordpress 中按主要类别显示相关产品

show related product by primary category in wordpress

我有分配了两个类别的产品,我在类别选择下为每个产品选择了主要类别。
现在我想按主要产品显示相关产品。
我正在使用 yoast seo 插件。 我在子主题 function.php 文件中添加了以下过滤器代码,但它不起作用。

// Alter related products query to pull items from Yoast Primary Category
add_filter( 'woocommerce_get_related_product_cat_terms', function( $terms, $product_id ) {
    if ( function_exists( 'yoast_get_primary_term_id' ) ) {
        $primary_term_product_id = yoast_get_primary_term_id( 'product_cat', $product_id );
        if ( $primary_term_product_id ) {
            return array( $primary_term_product_id );
        }
    }
    return $terms;
}, 10, 2 );

请帮我看看我该怎么做?

过滤器应该没问题,问题是 Wordpress 中的相关产品使用瞬态缓存在数据库中。
瞬变可以在 wp_options table 中找到,名称为 _transient_wc_related_[product_id]_transient_timeout_wc_related_[product_id]
为了立即看到过滤效果,您需要从数据库中删除这些。

以下 SQL 查询应进行删除:

DELETE FROM wp_options WHERE option_name REGEXP '^_transient_timeout_wc_related_[0-9]*$|^_transient_wc_related_[0-9]*$'

删除后,wordpress 将使用更新的数据重新创建新的瞬变。
有关 Wordpress 瞬变的更多信息:
https://developer.wordpress.org/apis/handbook/transients/