当前位置: 首页 > 知识库问答 >
问题:

ACF关系字段-从其他帖子类型获取字段值

吴均
2023-03-14

在我的帖子页面(常规帖子类型)中,我设置了一个ACF关系字段。在这个里面,我可以选择公司名称,这些名称都在directory_listings的职位类型下。

现在,我在directory listings页面上有以下代码,因此使用simply get_字段不起作用,因为这些值不在该页面上,而是在POST类型的其他位置。

因此不确定如何获取信息。

目录_LISTINGS post type下某个页面上的代码:

$posts = get_field('related_articles');

if( $posts ): ?>
    <ul>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endforeach; ?>
    </ul>
    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

目前,我在公司编辑页面(目录列表)上设置了关系字段。它在执行以下操作时起作用:1)与此业务列表相关的帖子-

2) 我想从帖子编辑页面选择一个帖子将出现在上面的企业。我可以通过ACF将字段放在那里没有问题,但是让它实际显示我无法理解的结果。

共有3个答案

夏侯兴怀
2023-03-14

如果我理解正确的话,这和我遇到的问题是一样的。就我而言,我更喜欢使用短代码。使用[acf field=“person”]并将该字段作为关系字段,它只给了我该人员的ID,但我无法访问他们的字段。另一方面,使用[acf field=“last\u name”,post\u id=[acf field=“person”],这将是一个理想的解决方案,但它不起作用,因为wordpress解析器不允许嵌套短代码。

这就是为什么我设计了这个非常小的php解决方案:

function import_cf_from_cpt( $atts ) {
    // import custom fields from other custom post types that are connected via a relationship to the calling custom post type
    // shortcode: [import <field from calling CPT of type relationship> <field name from field from other CPT>]
    // ex [import person last_name] --> Doe

    $postID = do_shortcode("[acf field={$atts[0]}]");
    // we use the first attribute to get the ID of the object
    $postField = get_field($atts[1], $postID);
    // next, using the ID we look for the field of the second attribute.
return $postField;
}
add_shortcode( 'import', 'import_cf_from_cpt' );

将其放置在函数中。php文件允许使用短代码

[导入人last_name]例如从其他帖子导入字段值或任何其他组合。

刘乐童
2023-03-14

如果它是您在查询中查找的自定义字段,那么您可以这样做:

<?php
$posts = get_field('related_articles');

if( $posts ): ?>
    <ul>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            <?php the_field('your_custom_field',$post); ?>
        </li>
    <?php endforeach; ?>
    </ul>
    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>
邵劲
2023-03-14

get_field()有三个参数:

  1. $field_name:要检索的字段的名称. eg"page_content"(必需)
  2. $post_id:输入值的特定帖子ID。默认为当前职位ID(不需要)。这也可以是选项/分类法/用户/etc
  3. $format_value

如果您只关心获取特定的帖子(您知道其中的ID),那么该键将是第二个参数$post\u ID)。ACF并没有什么神奇之处。非常简单:meta_值(即列出文章链接的目录)保存到每篇文章中(附在该文章的$post_id)。

但是,在您的情况下,我们不知道我们想要获得的帖子的ID。

如果我们用一个简单的句子来解释你想做什么,那句话会像:

目录列表(自定义帖子类型)页面上显示/获取帖子,该页面具有指向该页面的元值

显然,您不能使用获取字段(),因为您的问题与“获取字段”无关相反,您需要“找到具有特定字段的帖子”ACF在这方面有很好的文档。

对你来说幸运的是,WordPress附带了一个叫做WP_Query的很棒的类,以及一个叫做get_posts()的类似很棒的函数。所以回过头来看我们上面的句子并把它翻译成一个函数,我们想要:get_posts()其中meta_key有一个当前$post_id

或者,更具体地说,在您的目录\u清单页面上,您可以进行以下查询:

$related_articles = get_posts(array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'related_articles', // name of custom field
            'value' => '"' . get_the_ID() . '"',
            'compare' => 'LIKE'
        )
    )
));

if( $related_articles ): 
    foreach( $related_articles as $article ): 

    // Do something to display the articles. Each article is a WP_Post object.
    // Example:

    echo $article->post_title;  // The post title
    echo $article->post_excerpt;  // The excerpt
    echo get_the_post_thumbnail( $article->ID );  // The thumbnail

    endforeach;
endif;
 类似资料:
  • 我使用ACF,有一个名为“关于”的页面模板,我的“关于我们”页面使用该模板。我还有一个主页模板,它使用我的“主页字段组”中的字段。我的“关于我们”页面显示“关于字段组”中的ACF字段以及我的“主页字段组”中的一些字段。 我从我的主页组通过引用以下php代码的ACF字段得到字段: 来自主页上的主页字段组,段落来自我的关于我们页面介绍字段,来自关于字段组。 我想做一些类似的事情,但从自定义帖子类型(不

  • 我试图创建另一个类使用从ACF PRO的文本字段的值。 我有一个名为“投资组合”的自定义帖子类型,它有4个类别,ACF字段设置被添加到“分类等于类别”。 当我编辑一个类别时,我填写我想要得到的名称,然后显示如下: 如何从类别中获取ACF字段值? 其他信息:我的页面模板page-portfolio.php,我使用的是ACF中继器。 这是我的代码: 这是该类别ACF字段设置的屏幕截图,希望对您有所帮助

  • 我有一个自定义后类型设置称为艺术家。每个单个艺术家是一个页面(艺术家个人资料,如果你愿意),有一个通过高级自定义字段(ACF)的关系字段类型与该艺术家相关联的产品列表。我需要产品在艺术家页面上显示在他们的类别中。因此,在Elementor中,我需要指定一个查询筛选器ID,以简单地将产品划分为类别。 到目前为止我所尝试的 我试图通过自定义查询仅显示列表中特定类别的产品,因为我需要生成查询ID。 我一

  • 问题内容: 我想在其中自动创建的ManyToMany联接表中存储一些其他信息。我将如何在Django中做到这一点? 就我而言,我有两个表:“雇员”和“项目”。我要存储的是每个项目中每个员工每小时工作所获得的收入,因为这些价值并不相同。那么,我该怎么做呢? 我想到的是,不是使用方法“ ManyToManyField”,而是显式创建了一个第三类/表来存储这些新信息,并使用“ ForeignKey”方法

  • 我使用ACF关系字段来显示每个产品的相关博客文章。目前它的工作,但我必须检查每个产品手动显示一个相关的职位上。 问题:我如何添加产品类别,这样我就不需要手动添加200个产品,但只有一个产品类别与这篇文章相关,并将在单一视图下显示这篇文章。 是否可以将其与分类ACF字段集成(如果post具有相关的分类产品,它将显示在该类别的产品下)?可惜想不出办法

  • 我已经在WordPress的编辑帖子部分创建了一个自定义字段,并且能够通过以下帖子保存该值:Wordpress-将自定义字段添加到帖子屏幕。 我可以检索特定类别的帖子,但无法检索自定义字段的值。 如上图所示,在左上角高亮显示的位置有一个自定义的post字段。另一个突出显示的字段是显示帖子属于“公文包”类别。 下面是我用来检索“Portfolio”类别帖子的代码 我可以得到文章标题和内容的值,但不能