Php 高级自定义字段-仅第一次提取的post对象的自定义字段
我有两个PostType books和stores,其中stores被指定为books的postobject bookcode和bookinfo是posttype book的字段,storeurl是posttype stores的customfield 我想做的是…根据在books下拉列表中选择的商店,我想显示每本书的商店和posttype store中对应的storeurl,以及书的bookcode和bookinfo 在下面显示的所有帖子中,所有帖子都显示了正确的storename bookcode和bookinfo,但storeurl仅针对最后一篇帖子正确提取,如何才能正确提取所有帖子Php 高级自定义字段-仅第一次提取的post对象的自定义字段,php,wordpress,advanced-custom-fields,Php,Wordpress,Advanced Custom Fields,我有两个PostType books和stores,其中stores被指定为books的postobject bookcode和bookinfo是posttype book的字段,storeurl是posttype stores的customfield 我想做的是…根据在books下拉列表中选择的商店,我想显示每本书的商店和posttype store中对应的storeurl,以及书的bookcode和bookinfo 在下面显示的所有帖子中,所有帖子都显示了正确的storename bookc
<?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; ?>
新代码
它不会返回您在
foreach($storelist as$post)
循环中定义的$storelink
的storename或storeurl,但在结束循环之前不会使用它,这意味着只有最后定义的$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
循环的最后一次迭代正确?”)保持不变-在迭代之间,变量被多次覆盖,但没有对其执行任何操作。Come没有一个回复如果我将endeach移动到click btn下方,则也不会提取除最后一篇文章外的所有内容的storelink加上bookinfo和click btn,在中的每篇文章都会重复多次bookssteve我更新了代码…使用u建议的修改,但现在我发现它既不返回storename也不返回storeurl。它不回显storename或storeurl,现在还重复post numerpus次数。发送屏幕截图bookdata似乎在bookindexanswer中重复多次以进行编辑2:我使用的是代码u在没有任何更改的情况下给出了在book post中选择的storename,然后在posttype stores中搜索storename并回显相应的storelink字段Hey我已将其排序…我只是将$store->ID更改为$store,它很有效…thanx太多steve了
<?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; ?>