我一直在寻找解决问题的方法。我找不到与我要达到的目标完全相同的东西,所以我真的很受困扰,感谢任何帮助!
我有一个名为“ magazine”的CPT,其中包含几个ACF字段。 ACF的一个领域是杂志出版的“年份”。另一个字段是“杂志编号”,就像一个唯一的ID。每年出版几本杂志。
我想要实现的是输出,该输出在相应的“年”中发布了每个“年”的“ ul”元素和每个“杂志编号”的“ li”元素。
对于这样的例子:
<ul class="2019">
<li>200</li>
<li>199</li>
<li>198</li>
<li>197</li>
<li>196</li>
</ul>
<ul class="2018">
<li>195</li>
<li>194</li>
<li>193</li>
<li>192</li>
<li>191</li>
</ul>
从逻辑上讲,我不知道如何解决这个问题。如何交叉引用这些字段,将所有“年份”字段(数个字段)缩小为一个输出,然后输出特定年份发布的所有“杂志编号”,然后输出每年的多个列表,如上所示? / p>
答案 0 :(得分:0)
您可以尝试这样的操作。对我来说,您似乎需要先获取所有年份,然后每年查询以获取杂志号。我不确定这在您的服务器上有多密集,您只需要尝试一下即可。可能需要调整您的字段名称。
<?php
global $post;
$args = array(
'post_type' => 'magazine'
);
$posts = new WP_Query($args); // Query posts of 'magazine' post type
$magazine_years = array(); // set up array to put years in
if ($posts) {
foreach ($posts as $post) {
setup_postdata( $post );
$the_year = get_field('year'); // get the value of year field
$magazine_years[] = $the_year; // add year to the array
}
}
wp_reset_postdata(); // reset the query so we dont introduce a problem with more queries
foreach ($magazine_years as $year) {
// do a query for each year
$args = array(
'post_type' => 'magazine',
'meta_key' => 'year',
'meta_value_num' => $year
);
$posts = new WP_Query($args);
if ($posts) { ?>
<!-- create your list -->
<h1><?php echo $year; ?></h1>
<ul class="<?php echo $year; ?>">
<?php foreach($posts as $post) {
setup_postdata( $post );
<li><php the_field('magazine_number'); ?></li>
} ?>
</ul>
<?php
}
// reset the query data so you can run another without issue
wp_reset_postdata();
}
答案 1 :(得分:0)
在您的输入@DubVader的帮助下,我设法获得了所需的结果
这是我使用的代码:
<?php foreach($magazine_year as $option ){
$args = array(
'post_type' => 'magazine',
'meta_key' => 'year',
'meta_value' => $option
);
$the_query = new WP_Query( $args ); ?>
<?php if( $the_query->have_posts() ):
?>
<ul class="<?php echo $option; ?>">
<?php while( $the_query->have_posts() ) : $the_query->the_post(); ?>
<li>
<?php the_field('magazine_number'); ?>
</li>
<?php endwhile; ?>
</ul>
<?php endif; }?>
<?php wp_reset_query(); // Restore global post data stomped by the_post(). ?>