我有两个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
循环的最后一次迭代?")保持不变-变量被多次覆盖,而在迭代之间没有对其进行任何处理。