所以,情况是这样的:我正在使用 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 的复选框字段。目标是在单个产品页面上显示与产品类别具有相同产品类别的“新闻”帖子。
您的代码中有一个错误,因为
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',
),
));
}
}