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

时间:2014-04-10 15:51:55

标签: php wordpress-plugin advanced-custom-fields

我有2本书型和商店,其中商店被指定为书籍的后期对象。

bookcode和bookinfo是posttype-book和storeurl的字段是posttype-stores的自定义域

我想要做什么...根据书籍下拉菜单中选择的商店,我想显示商店和每本书的邮政类型商店的相应商店以及书籍的书籍和书籍信息

在下面的所有帖子中都会显示...正确的商店名簿记录&所有帖子的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; ?>

它不会返回商店名称或商店

1 个答案:

答案 0 :(得分:0)

您在$storelink循环中定义foreach ( $storelist as $post ),但在结束循环之前不使用它,这意味着只有最后定义的$ 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循环的最后一次迭代?“)保持不变 - 变量被多次覆盖而没有在迭代之间完成任何操作。