我用过ACF.我已将“分类法”选择下拉字段添加到帖子编辑页面.从下拉列表中我选择了该帖子应该包含哪个类别,但我的代码显示的是所有类别中的相同帖子.
下面是category.php文件中的代码.我需要它来显示最近的帖子,该帖子已被赋予“类别中的特征”,因此在我定义的类别中有特色.
我在category.php中的当前循环
<?php
$category = get_field('feature_in_category');
// args
$args = array(
'numberposts' => -1,
'posts_per_page' => 1,
'category__in' => $category,
'orderby'=> 'modified'
);
// get results
$the_query = new WP_Query( $args );
// The Loop
?>
<?php if( $the_query->have_posts() ): ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div class="small-6 columns">
<div class="img-box-shadow">
<a href="<?php the_permalink(); ?>">
<?php echo the_post_thumbnail(); ?>
</a>
</div>
</div>
<div class="small-6 columns">
<h3><a href="<?php the_permalink(); ?>"><?php echo the_title(); ?></a></h3>
<p><?php echo the_excerpt(); ?></p>
</div>
<?php endwhile; ?>
<?php else : echo '<p style="color:#fff;">no posts</p>'; ?>
<?php endif; ?>
<?php wp_reset_query(); // Restore global post data stomped by the_post(). ?>
Pastebin:http://pastebin.com/NR3UanAd
最佳答案 我对ACF不是很熟悉,还没有使用它.我看了一些文档等,这就是我发现的:
ACF分类学领域
ACF分类法字段将在您的应用程序中返回NULL,因为传递给get_field的ID是类别ID,这是一个无效的帖子ID.是的,您可以将类别ID传递给get_field,但是必须为该特定类别分配自定义字段才能返回该自定义字段的值.
看看ACF docs
$field = get_field($field_name, $post_id, $format_value);
◦$post_id: Specific post ID where your value was entered. Defaults to current post ID (not required). This can also be options / taxonomies / users / etc
通过ACF访问存储的数据
正如我之前所说,我不熟悉ACF,但似乎ACF字段数据的存储方式与默认自定义字段存储数据的方式相同.因此,您将拥有一对匹配的key =>值集.该数据可以通过meta_query
访问和检索
想法
ACF分类标准下拉列表保存已转换为类别的选定值.同样,我不确定它是否保存了名称,slug或ID,但是从我可以提取的内容中,它保存了类别ID,因此我将对此进行假设
所以,这里要做的第一件事是,获取当前查看的类别的ID.这可以在get_queried_object_id()
之前检索
现在您已拥有当前类别ID,您需要将其与特定meta_key = feature_in_category的值相匹配,并返回附加了此特定键=>值对的帖子
代码
您的代码看起来应该是这样的,假设ACF数据的存储方式与从自定义字段存储数据的方式相同(此代码需要PHP5.4,对于早期版本,将[]更改为array())
$cat_id = get_queried_object_id(); // Assumption that category ID is saved by ACF
$args = [
'posts_per_page' => 1,
'orderby' => 'modified',
'meta_key' => 'feature_in_category',
'meta_value_num' => $cat_id, // Assumption that category ID is saved by ACF
];
$q = new WP_Query( $args );
if( $q->have_posts() ) {
while( $q->have_posts() ) {
$q->the_post();
// YOUR TEMPLATE TAGS AND MARKUP
}
wp_reset_postdata();
}
如果ACF字段未保存类别ID,并且保存了名称或slug,则可以按如下方式更改代码
$category = get_queried_object()->name; // For category name
要么
$category = get_queried_object()->slug; // For category slug
然后在您的查询参数中,更改
'meta_value_num' => $cat_id, // Assumption that category ID is saved by ACF
至
'meta_value' => $category,
编辑
另外,作为评论发布,OP使用的查询基础工作.
$cat_id = get_queried_object_id();
$args = [
'posts_per_page' => 1,
'orderby' => 'modified',
'meta_query' => [
[
'key' => 'feature_in_category',
'value' => $cat_id,
'compare' => 'IN'
]
]
];