使用 ACF 从分类术语中获取图像
Posted
技术标签:
【中文标题】使用 ACF 从分类术语中获取图像【英文标题】:Get image from taxonomy term using ACF 【发布时间】:2016-03-16 08:35:28 【问题描述】:我正在使用以下代码尝试使用高级自定义字段插件从分类术语中检索名为“图像”的图像字段。此代码基于ACF website here 上的文档。
应该注意,此代码在 taxonomy.php 模板中使用,我无法指定特定的分类法和/或术语,因为我需要代码来根据用户的页面检测当前的分类法和术语并点击进入。
非常感谢任何帮助!
<?php get_header(); ?>
<?php get_sidebar(); ?>
<section id="hero-image">
<div class="gradient-overlay">
<?php
// vars
$queried_object = get_queried_object();
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;
// load thumbnail for this taxonomy term (term object)
$image = get_field('image', $queried_object);
// load thumbnail for this taxonomy term (term string)
$image = get_field('image', $taxonomy . '_' . $term_id);
?>
</div>
<div class="grid">
<header class="unit full-width">
<a href="<?php echo home_url(); ?>/" title="Kurdistan Memory Programme" class="logo"><?php bloginfo( 'name' ); ?></a>
</header>
<footer class="unit one-half">
<h1><?php single_cat_title(); ?></h1>
<h4 class="scroll-down">Scroll down to continue</h4>
</footer>
</div>
</section>
<?php get_footer(); ?>
【问题讨论】:
您是否将 ACF 字段适当地设置为分类法,并且您在代码中调用了正确的字段名称?您提供了 ACF 文档中示例中的代码,但没有提供任何生产代码。如果可能,请提供此分类字段的 ACF 设置屏幕截图。 你的第二个 $image "$image = get_field('image', $taxonomy . '_' . $term_id);"应该努力获取分类术语的自定义字段的值。它目前返回的是什么?您为自定义字段设置的返回值是多少? 嗨@Plummer,我已经更新了我的问题以包含来自 taxonomy.php 文件的完整代码和 ACF 设置的屏幕截图 @Joe - 目前 ACF 代码没有返回任何内容 使用这些字段设置,应该返回一个对象。那么 var_dump($image) 也不会返回任何内容吗? 【参考方案1】:好的,所以你得到了字段的值,你只需要设置它应该如何输出,如下所示:
$image = get_field('image', $taxonomy . '_' . $term_id);
echo '<img src="'.$image['sizes']['thumbnail'].'" />';
这假设您要使用缩略图图像大小。如果使用不同的大小,请将该文本更改为适当的图像大小。
如果要返回全尺寸图片,请使用以下代码:
$image = get_field('image', $taxonomy . '_' . $term_id);
echo '<img src="'.$image['url'].'" />';
【讨论】:
嗨@Joe - 我正在尝试将图像大小从“缩略图”更改为“完整”,但是当我这样做时,代码无法正常工作。但是,它确实适用于“大”和“中”设置。有什么想法吗? 把代码改成这样: echo '';应该返回完整大小的 URL。 这很令人困惑,因为您没有解释 $taxonomy 是使用 get_terms() 获得的术语对象。 我觉得没有必要复制/粘贴所有原始提问者的代码,我只是添加了额外的代码来提供所需的输出。【参考方案2】: <?php
$terms = get_field('best_seller_laptops_pc_category');
if( $terms ): ?>
<?php foreach( $terms as $term ):
$thumb_id = get_woocommerce_term_meta( $term->term_id, 'thumbnail_id', true );
$term_img = wp_get_attachment_url( $thumb_id );
?>
<div class="col-lg-6">
<div class="addbox1">
<img src="<?php echo $term_img;?>">
<div class="contain">
<h3>
<?php echo esc_html( $term->name ); ?>
</h3>
<h4><?php echo esc_html( $term->description ); ?></h4>
<a href="<?php echo get_term_link( $term ); ?>">LEARN MORE</a>
<a href="<?php echo get_term_link( $term ); ?>" class="btn">buy now</a>
</div>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
【讨论】:
【参考方案3】:taxonomy.php 是基于 archives.php 相同模型的自定义分类的模板 在这种模板中,你应该使用 wordpress 循环
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
他们,你可以传入get_field,这样的帖子ID作为第二个参数:
$image = get_field('image', $post->ID);
【讨论】:
检查来自 ACF 的源参考。他们将字段设置为分类,然后尝试检索该值。另外,就个人而言,我并没有否决你的答案,其他人这样做了,因为这也是我认为 OP 一开始所要求的。 $image = get_field('image', $queried_object);应该返回一个数组。做一个 var_dump以上是关于使用 ACF 从分类术语中获取图像的主要内容,如果未能解决你的问题,请参考以下文章
是否有类似于 get_queried_object() 的函数,它只获取当前存档分类术语但忽略 url 查询参数?
从 Wordpress 中自定义帖子类型的类别中获取 ACF 文本字段值