从 Wordpress 中自定义帖子类型的类别中获取 ACF 文本字段值
Posted
技术标签:
【中文标题】从 Wordpress 中自定义帖子类型的类别中获取 ACF 文本字段值【英文标题】:Get the ACF text field value from the category of a custom post type in Wordpress 【发布时间】:2020-10-25 20:00:23 【问题描述】:我正在尝试使用 ACF PRO 中的文本字段的值创建另一个类。
我有一个名为“portfolio”的自定义帖子类型,它有 4 个类别,ACF 字段设置添加到“分类等于类别”。
当我编辑一个类别时,我会填写我想要获取的名称,然后显示如下:
<div class="grid-item-catalog catalog-project-Holder **the name need to be here**">
如何从类别中获取 ACF 字段值?
其他信息:我的页面模板是 page-portfolio.php,我正在使用 ACF 转发器。
这是我的代码:
<!-- catalog -->
<div class="grid-catalog catalog-portfolio-wrraper">
<?php if ( $query->have_posts() ) while ( $query->have_posts() ) $query->the_post(); ?>
<!-- Repeater -->
<?php if( have_rows('portfolio-projects-repeater') ) ?>
<?php while( have_rows('portfolio-projects-repeater') ) the_row();
// vars
$projectDescription = get_sub_field('project-name');
$projectImage = get_sub_field('project-image');
$projectLinkText = get_sub_field('project-link-text');
$projectLink = get_sub_field('project-link');
?>
<div class="grid-item-catalog catalog-project-Holder the name need to be here">
<div class="catalog-project-name"><?php the_title(); ?></div>
<div class="catalog-project-content-container">
<div class="catalog-project-image"><img src="<?php echo $projectImage['url']; ?>" /></div>
<div class="catalog-project-content">
<div class="description-link-container">
<div class="description"><?php echo $projectDescription; ?></div>
<div class="link"><a href="<?php echo $projectLink; ?>" target="_blank" rel="nofollow"><?php echo $projectLinkText; ?></a></div>
</div>
</div>
</div>
</div>
<?php ?>
<?php ?>
<!-- End Repeater -->
<?php ?>
<?php ?>
</div>
<!-- end catalog -->
这是该类别的ACF字段设置截图,希望对您有所帮助:
【问题讨论】:
我不明白你想获得什么领域。您能否向我们展示您为该字段设置 ACF 的屏幕截图? 我按照你的要求添加了一个截图,我希望现在更清楚:-) 【参考方案1】:如果我理解正确,您有一个自定义帖子类型“投资组合”,并且您希望获取帖子所属的类别的 ACF 字段值到。这些类别在默认的 Wordpress 类别中(即不是自定义分类)。这与帖子有关,与转发器中的值无关。
如果是这种情况,您可以获得这样一个类别的 ACF 字段 (category-name
) 的值:
$category_name = get_field('category-name', $category_id);
这意味着我们需要在您的循环中获取帖子的类别 ID,您可以使用 get_the_category
执行此操作(假设它是默认类别,对于自定义分类,您需要 get_the_terms
)。另请注意,帖子可以有多个类别,因此get_the_categories
返回一个数组:
$category_classes = "";
// 1. GET THE CATEGORIES FOR THE CURRENT POST IN THE LOOP
$categories = get_the_category( get_the_ID());
if ( $categories )
// 2. A POST CAN HAVE MULTIPLE CATEGORIES SO LOOP THROUGH THEM TO LOOK UP THE ACF FIELD
foreach ( $categories as $category )
// 3. ADD ALL ACF VALUE FOR THIS CATEGORY TO OUR $category_classes VARIABLE, SEPARATED BY SPACES
$category_classes .= " ".get_field('category-name', $category->term_id);
现在$category_classes
将有一个以空格分隔的 ACF 值列表,您可以直接在 class
属性中使用这些类别,即
<div class="grid-item-catalog catalog-project-Holder <?php echo $category_classes; ?>">
把它放到你的代码中,应该是这样的:
<!-- catalog -->
<div class="grid-catalog catalog-portfolio-wrraper">
<?php if ( $query->have_posts() ) while ( $query->have_posts() ) $query->the_post(); ?>
<?php
/* YOUR CODE TO GET THE POST CATEGORIES AND LOOK UP THE ACF FIELD VALUE */
$category_classes = "";
// 1. GET THE CATEGORIES FOR THE CURRENT POST IN THE LOOP
$categories = get_the_category( get_the_ID());
if ( $categories )
// 2. A POST CAN HAVE MULTIPLE CATEGORIES SO WE NEED TO LOOP THROUGH THEM ALL
foreach ( $categories as $category )
// 3. ADD ALL ACF VALUE FOR THIS CATEGORY TO OUR $category_classes VARIABLE, SEPARATED BY SPACES
$category_classes .= " ".get_field('category-name', $category->term_id);
?>
<!-- Repeater -->
<?php if( have_rows('portfolio-projects-repeater') ) ?>
<?php while( have_rows('portfolio-projects-repeater') ) the_row();
// vars
$projectDescription = get_sub_field('project-name');
$projectImage = get_sub_field('project-image');
$projectLinkText = get_sub_field('project-link-text');
$projectLink = get_sub_field('project-link');
?>
<?php 4. OUTPUT THE CLASSES FOR THE DIV ?>
<div class="grid-item-catalog catalog-project-Holder <?php echo $category_classes; ?>">
<!-- the rest of your code here -->
</div>
<?php ?>
<?php ?>
<!-- End Repeater -->
<?php ?>
<?php ?>
此代码未经测试,但它至少应该指向正确的方向:)
【讨论】:
是的,你是对的 - 我做了如下:1)我创建了一个名为“portfolio”的服装帖子类型 2)我为帖子类型创建了 3 个类别 3)我创建了一个简单的文本ACF 中名为“category-name”的字段并将其设置为 - 分类等于类别。 4)在类别内(对于每个类别)我最终写了文本,类的名称。 5)现在我想得到我在字段中作为一个类写的值。我一步一步按照您的指示进行操作 - 没什么...几次测试 var_dump 显示它是 NULL ,我不知道我在这里错过了什么?? 几个问题尝试调试问题: 1. 您发布的代码是否正常工作(除了类名)? 2.$categories
的 var_dump 在这行之后显示什么? $categories = get_the_category( get_the_ID());
3. get_the_ID()
的值是正确的post id吗?
1) 是的,转发器正在工作,我成功地渲染了带有转发器的所有帖子。 2)我试图在这里发布所有数组 - 对象(WP_Term)#7882(16),但我不能在这里发布..我可以通过电子邮件发送给你吗? 3) 从函数 get_the_ID() 我收到整数,例如: int(2243) ,数字是帖子的 id
$category_classes 给我一个空字符串
那是因为您没有像您说的那样使用 categories,而是使用了不同的 custom taxonomy!其余答案是正确的,因此您只需要使用正确的函数来获取分类术语(不是类别:))【参考方案2】:
在您的代码中,您在变量中保存了一个名为 project-name
的自定义字段:
$projectDescription = get_sub_field('project-name');
也许您应该将子字段的此元键更改为“项目描述”,如果您还有项目名称,可能会造成混淆。
要在 php 中输出值,请使用 <?php echo $variableName; ?>
您正在访问名为portfolio-projects-repeater
的转发器中的值。因此,您的字段在其中,需要像您一样使用一段时间才能访问。
您的屏幕截图显示了一个文本字段,该文本字段不在转发器字段内。
所以如果你想获取那个字段的值,你只需要使用get_field()
。这不需要在一段时间内使用get_sub_field
调用。
因此,您的代码应如下所示:
$variableName = get_field('category-name');
保存到变量后,您可以简单地输出它:
<div class="grid-item-catalog catalog-project-Holder <?php echo $variableName; ?>">
【讨论】:
谢谢你,但你错了......它没有连接到转发器,我尝试从帖子类型的类别中获取文本字段值【参考方案3】:Yaaaaayyy...我成功了,代码如下:
<?php
// load all 'category' terms for the post
$terms = get_the_terms( get_the_ID(), 'category');
// we will use the first term to load ACF data from
if( !empty($terms) )
$term = array_pop($terms);
$custom_field = get_field('category-name', $term );
?>
无论如何,我要感谢您的所有回复,我非常感谢。
【讨论】:
嗨,FluffyKitten,很抱歉我耽搁了这么久......我接受你的回答,因为你问我......还有几个问题让我很困惑,我需要理解。 ..你知道每天都在学习东西。谢谢!!!【参考方案4】:在主题中创建一个模板,然后使用下面的代码,只需更改 slug (banner_image)
<?php
//Get the Post ID
$id = get_the_ID();
?>
<img src="<?php echo get_field('banner_image', $id); ?>" />
<div class="col-md-4 text-center"><?php echo get_field( "banner_heading", $id); ?></div>
【讨论】:
以上是关于从 Wordpress 中自定义帖子类型的类别中获取 ACF 文本字段值的主要内容,如果未能解决你的问题,请参考以下文章