ACF 基础版本,Archive类动态页如何调用标签

概述:

WordPress Advanced Custom Fields (ACF) 插件允许您轻松地在WordPress中添加自定义字段。要在前端调用这些字段,您可以使用get_field函数(这是一个很重要的ACF调用函数,所以具体内容放在一篇单独的文章中,请查看。)。

术语可以是 WordPress 类别、标签或其他已添加到您网站的自定义分类法等项目。例如,WooCommerce 等流行插件在激活时会添加自定义分类法。

以下是一些基本步骤:

添加字段

自定义字段插件可以非常轻松地将自定义字段添加到分类术语,请按照以下步骤操作。

  1. 在自定义字段管理屏幕中,单击添加新按钮以创建新字段组
  2. 添加您希望在编辑分类术语时看到的字段
  3. 在位置下,选择分类术语规则并选择相应的值以显示此字段组
ACF添加字段

编辑字段

创建字段组并将其指定为显示在分类术语编辑屏幕后,可以通过导航到正确的分类来编辑字段值。例如,如果您已将字段组分配给文章类别,请导航至 文章 > 类别

分类来编辑字段值

显示字段

category.phptag.php or taxonomy.php文件,可以轻松自定义 WordPress 分类术语的 HTML taxonomy.php。根据您的主题,您还可以使用模板部分或过滤器来自定义 HTML。

此示例演示如何修改category.php WordPress 自带模板并将类别图像和颜色输出到样式标签。

category.php

<?php
/**
 * The template for displaying category archive pages
 *
 * @link https://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage Twenty_Seventeen
 * @since 1.0
 * @version 1.0
 */

get_header(); 


// get the current taxonomy term
$term = get_queried_object();


// vars
$image = get_field('image', $term);
$color = get_field('color', $term);

?>
<style type="text/css">.entry-title a {    color: <?php echo $color; ?>;}<?php if( $image ): ?>.site-header {    background-image: url(<?php echo $image['url']; ?>);}<?php endif; ?>
</style>
<div class="wrap"><?php // Remaining template removed from example ?>

例子

下面是上面的代码在浏览器中的外观。请注意,站点标题图像现在反映了类别图像,并且所有条目标题均为绿色。

ACF终效果实现

如何在 index.php 上调用多个分类栏目的信息?

例如:在动态的首页index.php文件上,我需要在首页中调用多个产品分类下的字段:feature_image,但是在前端我想在指定的地方调用分类id是3的feature_image,在另一处调用分类id是4的feature_image。如何代码调用上面ACF字段值?我在ACF上创建了字段组“product category image”,并且在该字段组下面添加了2个字段,字段标签分别是:Feature Image,Describe。帮我生成调用代码。

如果您想在首页的不同位置分别调用不同产品分类ID下的 feature_image 字段,您可以直接使用 get_field 函数在相应的位置获取特定分类的字段值。以下是一个示例代码:

<?php
// 获取分类ID为3的特色图像
$category_3_id = 3;
$feature_image_3 = get_field('feature_image', 'category_' . $category_3_id);

// 获取分类ID为4的特色图像
$category_4_id = 4;
$feature_image_4 = get_field('feature_image', 'category_' . $category_4_id);
?>

<!-- 在首页的某处调用分类ID为3的特色图像 -->
<div class="section-1"><?php if ($feature_image_3): ?>    <img src="<?php echo esc_url($feature_image_3['url']); ?>" alt="<?php echo esc_attr($feature_image_3['alt']); ?>"><?php endif; ?>
</div>

<!-- 在首页的另一处调用分类ID为4的特色图像 -->
<div class="section-2"><?php if ($feature_image_4): ?>    <img src="<?php echo esc_url($feature_image_4['url']); ?>" alt="<?php echo esc_attr($feature_image_4['alt']); ?>"><?php endif; ?>
</div>

在这个示例中,我们直接调用了不同分类ID下的 feature_image 字段,并在页面的不同部分分别显示它们。请确保您使用正确的分类ID,并适应您的页面结构和样式。

笔记

从特定术语加载

所有模板函数都可用于从分类术语加载值,但是需要第二个参数来定位该术语。这类似于传递$post_id参数来定位特定的文章对象。

有 3 种不同的样式$post_id可供选择,如下所示。

例子格式描述
'category_123'$taxonomy . '_' . $term_id包含分类名称和术语 ID 的字符串
'term_123''term_' . $term_id包含单词“term”和术语 ID 的字符串。5.5.0版本添加
WP_Term术语对象。您可以通过许多 WP 函数(例如get_term())获取术语对象

自动嵌入

编辑分类术语上的所见即所得字段时,自动嵌入功能可能不起作用。这是由于 WordPress 核心中的代码将自动嵌入功能仅限于帖子。

此问题会影响前端并阻止嵌入网址(youtube、vimeo 等)转换为可播放的嵌入对象。

作为前端的当前解决方法,请在模板顶部使用此代码(有可能是category.php 或类似的)。此代码将设置自定义 post_ID 并允许 WP 加载嵌入内容。

category.php

<?php 

// vars
$queried_object = get_queried_object(); 
$taxonomy = $queried_object->taxonomy;
$term_id = $queried_object->term_id;  

$GLOBALS['wp_embed']->post_ID = $taxonomy . '_' . $term_id;

?>

简单的在当前页面调用图片和文字字段代码示例:

archive.php 当前页面调用文字字段:

<?php
// 获取当前分类的 ID
$category_id = get_queried_object_id();

// 获取分类字段的值
$custom_field_value = get_field('your_custom_field_name', 'category_' . $category_id);

// 替换 'your_custom_field_name' 为实际的字段名称
?>

<?php if ($custom_field_value): ?><!-- 在这里使用您的自定义分类字段值 --><p><?php echo $custom_field_value; ?></p>
<?php endif; ?>

archive.php 当前页面调用图片字段:

<?php
// 获取当前分类的 ID
$category_id = get_queried_object_id();

// 获取图片字段的值
$image = get_field('your_image_field', 'category_' . $category_id);

// 替换 'your_image_field' 为实际的图片字段名称
?>

<?php if ($image): ?><!-- 在这里只显示图像的 URL --><p><?php echo esc_url($image['url']); ?></p>
<?php endif; ?>
ACF图像字段创建

实际代码:

<?php
/**
 * The template for displaying Archive pages.
 *
 * @package Xtar
 */

if ( ! defined( 'ABSPATH' ) ) {exit; // Exit if accessed directly.
}

get_header(); 

// 获取当前分类的 ID
$category_id = get_queried_object_id();

// 获取图片字段的值
$image = get_field('banner_bg_image', 'category_' . $category_id);

// 替换 'banner_bg_image' 为实际的图片字段名称

?>

<!-- Main content -->
<section class="slice py-6 pt-lg-7 pb-lg-8 bg-dark" style="background-size: cover;background-image:url(<?php if ($image): ?>
<?php echo esc_url($image['url']); ?>
<?php endif; ?>)"><!-- Container -->

single.php文章页或者说post页面调用方法类似:

<?php
// 获取文章的 ID
$post_id = get_the_ID();

// 获取文章字段的值
$custom_field_value = get_field('your_custom_field_name', $post_id);

// 替换 'banner_bg_image' 为实际的字段名称
?>

<?php if ($custom_field_value): ?><!-- 在这里使用您的自定义文章字段值 --><p><?php echo $custom_field_value; ?></p>
<?php endif; ?>

以下是在文章页面调用图片字段的示例:

single.php

<?php
/**
 * The Template for displaying all single posts.
 *
 * @package Xtar
 */

if ( ! defined( 'ABSPATH' ) ) {
  exit; // Exit if accessed directly.
}

get_header(); 

// 获取文章的 ID
$post_id = get_the_ID();

// 获取文章字段的值
$image = get_field('banner_bg_image', $post_id);

// 替换 'banner_bg_image' 为实际的字段名称

?>

<!-- Main content -->
<section class="slice py-6 pt-lg-7 pb-lg-8 bg-dark" style="background-size: cover;background-image:url(<?php if ($image): ?>
<?php echo esc_url($image['url']); ?>
<?php endif; ?>)"><!-- Container --><div class="container text-center ">
滚动至顶部