php – 如果taxanomy与当前类别匹配,则显示帖子

我用过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'
                ]
        ]
];
点赞