我有一个名为'产品'的自定义帖子类型
在产品中有一个名为“子类别”(selsubcat)的自定义字段,其中包含14个不同的类别。
这些类别是; CAM / REC / ACC / SWH / NET / MON / HDMI / ENC / SIGNS / PIR / WIFI / POLE / SOUND。
我要做的是显示不同标签中的所有产品,其中标签是子类别,每个标签将显示该类别的产品。目前我已将meta_value
定义为“CAM”,这将显示#tabs-1
div中所有类别为“CAM”的产品 - 这是正确的。
我现在需要以某种方式循环每个类别并在其他13个标签中显示产品。
因此#tabs-1
将显示“CAM”类别的所有产品,#tabs-2
将显示“REC”类别的所有产品,依此类推......
这就是我现在所拥有的: -
<div id="tabs">
<ul>
<?php
if( have_rows('sub_category', 'option') ): $cat_increment = 1;
while ( have_rows('sub_category', 'option') ) : the_row(); ?>
<!-- Tab Sub Categories -->
<li><a href="#tabs-<?php echo $cat_increment; ?>"><?php the_sub_field('category_name'); ?></a></li>
<?php $cat_increment++; endwhile;
else : endif;
?>
</ul>
<?php
$posts = get_posts(array(
'posts_per_page'=> -1,
'post_type' => 'products',
'order' => 'ASC',
'meta_key' => 'selsubcat',
'meta_value' => 'CAM'
));
if( $posts ): ?>
<div id="tabs-1">
<table id="table-products" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th class="hidden">id</th>
<th>Image</th>
<th>Product Code</th>
<th>Description</th>
<th>Cost</th>
<th>Qty</th>
<th>Total Cost</th>
<th>Options</th>
</tr>
</thead>
<tfoot>
<tr>
<th class="hidden">id</th>
<th>Image</th>
<th>Product Code</th>
<th>Description</th>
<th>Cost</th>
<th>Qty</th>
<th>Total Cost</th>
<th>Options</th>
</tr>
</tfoot>
<?php foreach( $posts as $post ):
setup_postdata( $post );
?>
<tbody>
<tr>
<td class="hidden"><?php echo $row['id']; ?></td>
<td><span class="product-image" style="background:url(<?php the_field('image'); ?>);"></span></td>
<td><?php the_field('code'); ?></td>
<td><?php the_field('description'); ?></td>
<td><?php the_field('cost_price'); ?></td>
<td><input type="text" /></td>
<td><input type="text" /></td>
<td><input type="button" class="add-row" name="add-row" value="Add"></td>
</tr>
</tbody>
<?php $product_increment++; endforeach; ?>
</table>
</div>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
</div>
我已经陷入困境,所以任何帮助都会非常感激!
答案 0 :(得分:0)
首先将所有类别id存储在一个数组中,而不是在foreach
循环中获取每个类别的名称和帖子并将它们保存在另一个数组中(类别名称作为键并作为值发布),现在你有一个数组将所有帖子和类别存储在其中!
$categories_id = array(1,2,3,4,5,6,7,8,9,10,11,12,13);
$posts = array();
foreach ($categories_id as $id) {
$term = get_term($id,'product_category');
$term_name = $term->name;
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'product_category',
'field' => 'id',
'terms' => $id
)
)
);
$query = new WP_Query( $args );
while($query->have_posts()){
$query->the_post();
$image = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), 'thumbnail' );
$posts[$term_name][] = array(
'title' => get_the_title(),
'link' => get_the_permalink(),
'image' => $image[0]
);
}
wp_reset_query();
}
将数组打印到标签中:
<div class="tabs">
<ul class="tab-links">
<?php
$count = 0;
$class = "active";
foreach ($posts as $key => $value) : ?>
<li class="<?php echo $class; ?>"><a href="#tab<?php echo $count; ?>"><?php echo $key; ?></a></li>
<?php
if($count == 0)
$class = "";
$count++;
endforeach; ?>
</ul>
<div class="tab-content">
<?php
$count = 0;
$class = "active";
foreach ($posts as $key => $value): ?>
<div id="tab<?php echo $count; ?>" class="tab <?php echo $class; ?>">
<?php
foreach ($posts[$key] as $post) :
//echo post['title']
//echo post['link']
//echo post['image']
endforeach; ?>
</div>
<?php
if($count == 0)
$class = "";
$count++;
endforeach; ?>
</div>
</div>