如何使用自定义字段在 WooCommerce 单一产品页面上显示相关的自定义帖子类型?

问题描述 投票:0回答:1

所以,情况是这样的:我正在使用 WordPress,其中有一个我使用代码片段插件创建的查询。

使用的插件:

产品:WooCommerce 自定义字段和自定义帖子:安全自定义字段 代码片段:PHP 代码片段

这是我当前的代码:


function my_query_by_post_types1( $query ) {
    if ( is_singular( 'product' ) ) {
        $product_categories = wp_get_post_terms( get_the_ID(), 'product_cat' ); 
        $category_name = $product_categories->name;

        $query->set( 'post_type', 'news' );
        $query->set( 'meta_query', array(
            'relation' => 'OR',
            array(
                'key'     => 'product_category',
                'value'   => $category_name,
                'compare' => 'LIKE',
            )
        ));
    }
}
add_action( 'elementor/query/product_related_news', 'my_query_by_post_types1' );

此查询旨在用于单个产品页面上以显示“新闻”(自定义帖子类型)。 “新闻”帖子类型有一个自定义字段,它是一个名为product_category 的复选框字段。目标是在单个产品页面上显示与产品类别具有相同产品类别的“新闻”帖子。

php wordpress woocommerce custom-post-type custom-fields
1个回答
0
投票

您的代码中有一个错误,因为

wp_get_post_terms
函数给出了
WP_Terms
数组。您可以指定“fields”参数来获取术语名称,例如:

function my_query_by_post_types1( $query ) {
    if ( is_singular( 'product' ) ) {
        $category_names = wp_get_post_terms( get_the_ID(), 'product_cat', array('fields' => 'names') ); 

        $query->set( 'post_type', 'news' );
        $query->set( 'meta_query', array(
            'relation' => 'OR',
            array(
                'key'       => 'product_category',
                'value'     => $category_names,
                'compare'   => 'IN',
            ),
        ));
    }
}
add_action( 'elementor/query/product_related_news', 'my_query_by_post_types1' );

应该会更好。

如果“product_category”不是自定义字段,而是来自“新闻”帖子类型的自定义分类法,请尝试:

function my_query_by_post_types1( $query ) {
    if ( is_singular( 'product' ) ) {
        $category_names = wp_get_post_terms( get_the_ID(), 'product_cat', array('fields' => 'names') ); 

        $query->set( 'post_type', 'news' );
        $query->set( 'meta_query', array(
            'relation' => 'OR',
            array(
                'taxonomy'  => 'product_category',
                'field'     => 'name',
                'terms'     => $category_names,
                'compare'   => 'IN',
            ),
        ));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.