updat_field 不适用于高级自定义字段的后置对象

updat_field not working for advanced custom field 's postobject

我有 post 对象,需要根据我使用 update_field 的文本进行设置或更新,但 它不会更新 post

中 post 对象的选定值
<?php

$allposts= get_posts(array('post_type' => 'genres', 'numberposts' => -1));
$newgenre="MYSTERY";

foreach ( $allposts as $post ) :  setup_postdata($post);
if (!empty($post))
    {
    update_field('genrelist',$newgenre,$post->ID);  
    }

endforeach;
?>

您写出的内容,尽管性能不如您希望的那样,应该 基于 the update_field() documentation 工作。您可以考虑尝试以下方法:

  • 验证 'genrelist' 是自定义字段使用的元键
  • 尝试将 'genrelist' 换成字段键(请参阅“[查找字段键](http://www.advancedcustomfields.com/resources/update_field/#finding-the 字段键)以获取有关如何显示此信息的说明)以确保它不是参考查找问题。
  • 您对 get_posts 的调用将 post 类型设置为 'genres',但这似乎更像是一种分类法,而不是自定义 post 类型。您可能想要验证 $allposts 没有给您一个空数组(这意味着 foreach 循环与 update_field() 调用永远不会执行)。

不管它值多少钱,因为您没有在您提供的代码中使用像 get_the_ID() 这样的函数,所以您不必担心 setup_postdata()empty() 的检查似乎也没有必要,因为 get_posts() 不应该返回空的 post。重写,示例代码更像这样:

$allposts = get_posts( array( 'post_type' => 'genres', 'posts_per_page' => 100 ) );
$newgenre = 'MYSTERY';

foreach ( $allposts as $single_post ) {
  update_field( 'genrelist', $newgenre, $post->ID );
}

FWIW,如果您的站点有很多 post,将 numberposts/posts_per_page 设置为“-1”可能会是一个巨大的性能问题。最好设置一个合理的上限(在重写的代码中,我使用了 100,但你的上限可能会有所不同)。如需更多信息,10up has open sourced their best practices for WordPress development(完全披露:我为 10up 工作)。