基于 ACF 转发器子字段自定义分类法查询帖子
Posted
技术标签:
【中文标题】基于 ACF 转发器子字段自定义分类法查询帖子【英文标题】:Query posts based on an ACF repeater sub field custom taxomomy 【发布时间】:2020-12-13 18:50:58 【问题描述】:我有一个自定义帖子类型,其中列出了一组颜色以及使用 ACF 转发器可用的产品类型。
目的是在另一个页面上列出具有适当可用颜色的 CPT。使用自定义分类法(“可用性”)设置颜色的可用性
为了实现这一点,我运行了一个过滤帖子类型的 WP_Query() 和一个 meta_query。如果我正在查询文本子字段,这一切都很好,但我想在自定义分类上运行查询。
根据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();
?>
不幸的是,这不会返回任何内容,但是如果我将“可用性”(分类的子字段名称)切换为“颜色名称”,我拥有的另一个子字段是一个文本字段并将值更改为“白色”,它会返回一个列表所有以白色为特色的颜色表 CPT,所以我知道基础知识是有效的,我想我误解了我需要如何查询分类。这是哪里出了问题?
【问题讨论】:
分类法是否以文本形式保存在数据库中?也许您需要寻找身份证? @Stender 我不是 100%,但我的理解是它是。 name 和 slug 值都显示为文本。我希望能够在这种情况下使用该名称,因为我最终的目标是将其与页面标题结合起来。 灯泡时刻值确实必须是 ID,感谢@Stender 朝正确方向轻推。 很高兴你解决了它! 【参考方案1】:根据我对分类的理解,该值必须是 ID 而不是名称或 slug 或其他任何内容,因此由于我需要使用名称,因此我需要将其转换为 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'
)
)
);
【讨论】:
以上是关于基于 ACF 转发器子字段自定义分类法查询帖子的主要内容,如果未能解决你的问题,请参考以下文章
在 Wordpress 自定义帖子类型循环中使用 ACF 分类字段作为变量
以编程方式更新转发器字段中特定组字段的值 - 高级自定义字段 (ACF) - Wordpress
Wordpress ACF:如何通过自定义代码(PHP)将行添加到附加到用户的转发器字段