首页 > 解决方案 > Wordpress 如何为自定义帖子类型执行嵌套/多级查询

问题描述

我正在尝试显示具有相应子模块的不同自定义帖子类型(名为“leistungen”)的列表。

所以在 URL“/services”下我想要这样的东西。

服务A

服务乙

我在 UI 中有以下设置

在此处输入图像描述

我当前的存档循环看起来像这样。我似乎错过了一些东西,但经过几个小时的尝试,我还是没有得到它。

  <?php
  $outer_args = array(
    'post_type'     => 'leistungen',
    'numberposts'   => -1,
    'post_parent'   => 0
  );

  $outer_query = new WP_Query($args);

  if ($outer_query->have_posts()) : ?>

    <?php while ($outer_query->have_posts()) : $outer_query->the_post(); ?>

      <?php $outer_id = get_the_ID(); ?>
      <h2><?php the_title(); ?></h2>

      <?php $issue = new WP_Query(array(
        'numberposts'   => -1,
        'post_type'  => 'leistungen',
        'post_parent'  => $outer_id,
      )); ?>

      <?php
      if ($inner_query->have_posts()) ?>
      <?php while ($inner_query->have_posts()) : $inner_query->the_post(); ?>
        <p><?php the_title(); ?></p>
      <?php endwhile; ?>
      <?php $inner_query->reset_postdata(); ?>

    <?php endwhile; ?>

  <?php endif; ?>

  <?php wp_reset_query(); ?>

目前,我既没有得到结果,也没有任何错误。

标签: phpwordpresswordpress-themingcustom-post-typecustom-wordpress-pages

解决方案


您可以使用WP_Querywith 组合get_pages来实现您想要的。

$args = array(
  'post_type'      => 'leistungen',
  'posts_per_page' => -1,
);

$results = new WP_Query($args);

if ($results) {
  while ($results->have_posts()) {
    $results->the_post();

    echo "<h3>" . get_the_title() . "<h3>";

    $sub_pages_args = array(
      'post_type' => 'leistungen',
      'child_of'  => get_the_ID(),
    );

    $sub_pages = get_pages($sub_pages_args);

    echo "<ul>";
    foreach ($sub_pages as $sub_page) {
      echo "<li>";
      echo $sub_page->post_title;
      echo "</li>";
    }
    echo "</ul>";
  }
}

wp_reset_postdata();

哪个输出:

Service A

    Module A1
    Module A2
    Module A3

Service B

    Module B1
    Module B2
    Module B3

测试和工作!让我知道你是否也可以让它工作!


推荐阅读