在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中的相关产品使用瞬态缓存在数据库中。
瞬态可以在名称为 _transient_wc_related_[product_id]_transient_timeout_wc_related_[product_id] 的 wp_options 表中找到。
为了立即看到过滤效果,您需要从数据库中删除这些。

以下 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/