高级自定义字段-仅第一次提取帖子对象的自定义字段


Advanced custom field - custom field of post object extracted only the first time

我有两个posttypes书籍和存储,其中存储被指定为书籍的postobject。

bookcode和bookinfo是post-type book的字段,storeurl是post-typestores 的customfield

我想做的是…根据书籍下拉列表中选择的商店,我想显示每本书的商店和post-type商店中相应的storeurl,以及书籍的图书代码和图书信息。

在下面显示所有帖子。。。使用正确的店名图书编码&所有帖子的bookinfo,但storeurl只为最后一篇帖子正确提取我如何才能正确提取所有帖子的

<?php 
while (have_posts()): the_post();?>
<div class="bookindex">
     <div class="bookdata">
        <?php               
        $storelist = get_field('storelist');            
        foreach ($storelist as $post) :  setup_postdata($post);
        $storename = get_the_title($post->id);
        $storelink = strip_tags(get_field('storelink',$post->id));
        //var_dump($storelink);     
        ?>
        <div class="storename">
            <?php echo $storename;?>
    </div>
        <?php endforeach; wp_reset_postdata(); ?>   
    <?php   
        $bookinfo = get_field('bookinfo',$post->id);
        ?>  
    <div class="bookinfo">
            <?php echo $bookinfo; ?>
    </div> 
    <?php
    $bookcode = get_field('bookcode',$post->id);
    ?>
    <div class="clickbtn">
            <a href="<?php echo $storelink; ?>">
                     <?php echo $bookcode; ?>
            </a>
    </div>
    </div>       
</div> 
<?php endwhile; ?>

新代码

<?php 
while (have_posts()): the_post();   
?>
<div class="bookindex">
     <div class="bookdata">         
        <?php    
        $bookinfo = get_field('bookinfo',$post->ID);
        $bookcode = get_field('bookcode',$post->ID);
        $storelist = get_field('storelist');   
        $stores=array(); 
        foreach ($storelist as $store):
        $stores[] = array(
        'name' => get_the_title( $store->ID ),
        'link' => strip_tags( get_field( 'storelink', $store->ID ) )
    );
    endforeach; ;
        ?>
        <div class="storename">
            <?php echo $stores[$post->ID];?>
    </div>
    <div class="bookinfo">
            <?php echo $bookinfo; ?>
    </div> 
    <div class="clickbtn">
            <a href="<?php echo $stores[$post->ID]; ?>">
                     <?php echo $bookcode; ?>
            </a>
    </div>
    </div>       
</div> 
<?php endwhile; ?>

它既不返回storename也不返回storeurl

您在foreach ( $storelist as $post )循环中定义$storelink,但在循环结束之前不会使用它,这意味着只有最后定义的$storelink可用。如果你需要积累一堆商店名称和标题,你可以考虑这样的东西:

$stores = array();
foreach ( get_field( 'storelist' ) as $store ) {
  $stores[] = array(
    'name' => get_the_title( $store->ID ),
    'link' => strip_tags( get_field( 'storelink', $store->ID ) )
  );
}

然后,您将有一系列商店来购买可以用于构建链接的书籍(如果我正确理解您的用法;无论哪种方式,$storelink仅适用于循环中的最后一项的神秘之处在于,直到循环之后才使用该变量)。

编辑:您的更新版本尝试引用不存在的特定数组键;恐怕我可能把我的数组建议搞得更混乱了。如果我正确理解你想做什么,这样的事情应该符合要求:

<?php while ( have_posts() ) : the_post(); ?>
  <div class="bookindex">
    <?php
      // Since $bookinfo and $bookcode don't appear to change, we'll get them once and save it
      $bookinfo = get_field( 'bookinfo', $post->ID );
      $bookcode = get_field( 'bookcode', $post->ID );
    ?>
    <?php foreach ( get_field( 'storelist' ) as $store ) : ?>
      <div class="bookdata">
        <div class="storename">
          <?php echo get_the_title( $store->ID );?>
        </div>
        <div class="bookinfo">
          <?php echo $bookinfo; ?>
        </div>
        <div class="clickbtn">
          <a href="<?php echo strip_tags( get_field( 'storelink', $store->ID ) ); ?>"><?php echo $bookcode; ?></a>
        </div>
      </div><!-- .bookdata -->
    <?php endforeach; ?>
  </div><!-- .bookindex -->
<?php endwhile; ?>

编辑2:很明显,我不知道您想要如何回复链接,但原始问题的答案("为什么$storelink只适用于$storelist循环的最后一次迭代?")保持不变-变量被多次覆盖,而在迭代之间没有对其进行任何处理。