ACF get_field不返回值

Neb*_*ust 0 wordpress loops advanced-custom-fields

我试图使用get_field返回一个简单的文本字段,由于某种原因它返回空。字段本身就是应该存在的位置,并且其中包含文本,因此该部分已全部设置好。该PHP代码是通过php代码段加载的,例如,发布缩略图,可以完美显示。因此,除ACF字段值外,其他所有东西都起作用。

<div class="your-class">
    <?php
    $args = array(
        'post_type' => 'home_test',
        'posts_per_page' => -1,
        'orderby'   => 'name',
        'order'     => 'ASC',
    );
    $the_query = new WP_Query($args);
    $brand = get_posts($args);
    foreach ($brand as $post) {
        setup_postdata($post);
        $thumbnail = get_the_post_thumbnail_url($post->ID, 'full');

        $homelinkvalue = get_field("home_brand_link");

        if (!$thumbnail)
            continue;
        ?>
        <div>
            <p><?php echo $homelinkvalue; ?></p><img src="<?php echo $thumbnail; ?>">
        </div>

    <?php
    }
    wp_reset_postdata();
    ?>
</div>
Run Code Online (Sandbox Code Playgroud)

Jos*_*a T 6

我认为问题在于,您正在将自定义的post循环(您的foreachsetup_postdata())混合在一起,但是随后使用的函数(如)get_field()利用了全局 post对象。在这种情况下,get_field()尝试通过检查global来查找字段值$post,但是尚未正确设置。见警告这里setup_postdata($post)

必须传递对全局$ post变量的引用,否则诸如the_title()之类的功能将无法正常工作。

您可以稍作修改即可在代码中实现此目标:

global $post;
foreach ($brand as $currPost) {
    $post = $currPost;
    setup_postdata($post);
    // Rest of code as normal
}
Run Code Online (Sandbox Code Playgroud)

或者,由于get_field()可以接受特定帖子作为参数,而不是自动使用全局帖子,因此您可以更改:

$homelinkvalue = get_field("home_brand_link");
Run Code Online (Sandbox Code Playgroud)

至:

$homelinkvalue = get_field("home_brand_link",$post->ID);
Run Code Online (Sandbox Code Playgroud)

旁注:通常,推荐的迭代帖子的方法是使用特殊的“ WP循环”模式,例如:

<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <!-- Do something -->
<?php endwhile; ?>
Run Code Online (Sandbox Code Playgroud)

使用上述模式会在$post循环时自动设置全局变量,这使开发人员可以使用类似的功能,get_field()而不必担心显式传递特定帖子。使事情变得容易一些。