1

我一直在寻找几个小时来解决我的问题。我找不到任何与我想要实现的目标完全一样的东西。所以我真的被困住了,感谢任何帮助!

我有一个名为“杂志”的 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>

从逻辑上讲,我不知道如何解决这个问题。如何交叉引用字段,将所有“年份”字段(几个)减少到一个输出,然后输出特定年份发布的所有“杂志编号”,然后输出每个年份的几个列表,如上图所示?

4

2 回答 2

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(). ?>    
于 2019-10-15T10:46:16.440 回答
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();

}
于 2019-10-14T20:05:46.337 回答