微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据ACF转发器子字段自定义分类法查询帖子

如何解决根据ACF转发器子字段自定义分类法查询帖子

我有一个自定义帖子类型,其中列出了一组颜色以及使用ACF转发器可以使用的产品类型。

目的是在另一页上列出具有适当可用颜色的CPT。颜色的可用性是使用自定义分类法设置的(“ availability”)

要实现此目的,我正在运行WP_Query()来过滤帖子类型和Meta_query。如果我要查询文本sub_field,那么所有这些都可以正常工作,但是我想在自定义分类法上运行查询

根据发现的示例here,我的代码如下:

功能

function my_posts_where( $where ) {
    $where = str_replace("Meta_key = 'colour_swatch_","Meta_key LIKE 'colour_swatch_",$where);
    return $where;
}
add_filter('posts_where','my_posts_where');

在我的页面上:

<?PHP

$args = array(
    'post_type' => 'colourswatch','Meta_query' => array(
        array(
            'key' => 'colour_swatch_%_availability','value' => 'windows','compare' => 'LIKE'
        )
    )
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); 
?>

<p><?PHP the_title(); ?></p>
<?PHP
endwhile;
wp_reset_postdata();
?>

不幸的是,这没有返回任何内容,但是如果我将“ availability”(分类法的sub_field名称)切换为“ colour_name”,我拥有的另一个sub_field是文本字段,并将值更改为“ white”,它将返回一个列表。所有的colourswatch CPT都具有白色,因此我知道基础知识是有效的,并且我认为我对如何查询分类法有误解。哪里出问题了?

解决方法

根据我对分类法的了解,该值必须是ID,而不是名称,子词或其他名称,因此,由于我需要使用名称,因此需要将其转换为ID。我发现我可以using get_term_by();

// Get term by name 'windows' in custom taxonomy 'product-types'.
$termId = get_term_by( 'name','windows','product-types' );

$args = array(
    'post_type' => 'colourswatch','meta_query' => array(
        array(
            'key' => 'colour_swatch_%_availability','value' => $termId->term_id,// translate the term name into its ID
            'compare' => 'LIKE'
        )
    )
);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。