Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress WP ACF-将不同的域/然后循环与WP查询相结合_Wordpress_Acfpro - Fatal编程技术网

Wordpress WP ACF-将不同的域/然后循环与WP查询相结合

Wordpress WP ACF-将不同的域/然后循环与WP查询相结合,wordpress,acfpro,Wordpress,Acfpro,我已经找了几个小时来解决我的问题。我找不到任何和我想达到的目标完全一样的东西,所以我真的被卡住了,非常感谢任何帮助 我有一个名为“杂志”的CPT,有几个ACF字段。ACF的一个领域是该杂志出版的“年份”。另一个字段是“杂志编号”,它类似于一个唯一的ID。每年都会出版几本杂志 我试图实现的是一个输出,它为每个“年”提供一个“ul”元素,为每个“杂志号”提供一个“li”元素,这些元素在相应的“年”中发布 对于像这样的exmaple: <ul class="2019"> <li

我已经找了几个小时来解决我的问题。我找不到任何和我想达到的目标完全一样的东西,所以我真的被卡住了,非常感谢任何帮助

我有一个名为“杂志”的CPT,有几个ACF字段。ACF的一个领域是该杂志出版的“年份”。另一个字段是“杂志编号”,它类似于一个唯一的ID。每年都会出版几本杂志

我试图实现的是一个输出,它为每个“年”提供一个“ul”元素,为每个“杂志号”提供一个“li”元素,这些元素在相应的“年”中发布

对于像这样的exmaple:

<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>
  • 二百
  • 199
  • 198
  • 197
  • 196
  • 195
  • 194
  • 193
  • 192
  • 191

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

您可以尝试类似的方法。对我来说,似乎你需要先获取所有年份,然后每年运行查询以获取杂志编号。我不确定这在您的服务器上会有多密集,您只需尝试一下。可能需要根据字段名进行调整

<?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();

}


你可以试试这样的。对我来说,似乎你需要先获取所有年份,然后每年运行查询以获取杂志编号。我不确定这在您的服务器上会有多密集,您只需尝试一下。可能需要根据字段名进行调整

<?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();

}


在您的输入@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(). ?>    


在您的输入@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(). ?>    


您试图在何处输出此信息?这是在存档中吗?我试图在一个单独的杂志页面上输出,稍后我可以添加一些代码,从我如何使“年份”列表工作,然后我需要第二列所有“杂志编号”当我点击年份时(我将使用jQuery)。你试图在哪里输出这些信息?这是存档吗?我试图在一个单独的magazin页面上输出,稍后我可以添加一些我如何使“年份”列表工作的代码,然后当我点击年份时,我需要为所有“杂志编号”添加第二列(我将使用jQuery)。非常感谢您的输入,我尝试了以下代码,但它不起作用,我得到了一个很长的列表,每个“li”元素都有相同的杂志编号。很有趣。在这种情况下,似乎需要稍作调整,但这是您需要完成所需的总体想法。我们可能只是缺少设置post数据。我对原来的解决方案作了调整。你看到的li元素的数量是否表明,li元素的总数与帖子的总数相对应?当我尝试你的代码时,我也有很多空的'lis'和太多的相同项目,因此比帖子的总数多得多。而且,您知道我如何将这些值保存在嵌套数组中,如
2018=>array(156155154153)
?是的。创建一个空数组以放入年份和ID。如果在循环期间将该年的所有ID放入它们自己的数组中,那么在循环结束后,可以将该年及其ID传递给预先创建的数组。这里有一个例子:非常感谢您的输入,我尝试了以下代码,但它不起作用,我得到了一个很长的列表,每个“li”元素都有相同的杂志编号。很有趣。在这种情况下,似乎需要稍作调整,但这是您需要完成所需的总体想法。我们可能只是缺少设置post数据。我对原来的解决方案作了调整。你看到的li元素的数量是否表明,li元素的总数与帖子的总数相对应?当我尝试你的代码时,我也有很多空的'lis'和太多的相同项目,因此比帖子的总数多得多。而且,您知道我如何将这些值保存在嵌套数组中,如
2018=>array(156155154153)
?是的。创建一个空数组以放入年份和ID。如果在循环期间将该年的所有ID放入它们自己的数组中,那么在循环结束后,可以将该年及其ID传递给预先创建的数组。下面是一个例子: