获取带有父母,子女和元数据的帖子类型

时间:2019-08-17 22:25:05

标签: php wordpress

我想在自定义帖子类型下的所有帖子显示在我的网站首页上。这本身很容易做到,但是我找不到正确构造它的方法。我想以这种方式显示信息:

    Parent Page
     - Child Page
    [Meta data from above child]
    - Child Page
    [Meta data from above child]

以下内容与我所需要的内容很接近,但它只显示了所有页面,父母和孩子。我需要将它们归类为以下类别:

<?php
$arr_query_args = array(
    'numberposts'  => -1,
    'post_type'    => 'tours',
    'orderby'   => 'title', 
    'order'     => 'ASC',
);

$arr_posts = get_posts( $arr_query_args );

global $post;

foreach( $arr_posts as $this_post ) { ?>

    <?php $museum = get_post_meta( $this_post->ID, 'tour_museum', true ); // The museum ?>
    <?php $permalink = get_permalink($this_post->ID); // Get the post's permalink ?>
    <?php $parent_title = get_the_title($this_post->post_parent); // Post parent title ?>
    <?php $parentId = $this_post->post_parent; $linkToParent = get_permalink($parentId); // Post parent URL ?>

    <li class="<?php echo $parent_title; ?>">
    <a href="<?php echo $linkToParent; ?>"><?php echo $parent_title; ?></a>
    <ul class="children">
    <li><a href="<?php echo $permalink; ?>"><?php echo $this_post->post_title ?></a></li>
    </ul>
    <small><?php echo $museum; ?></small>
    </li>

<?php } ?>

我已经四处张望,已经测试了几件事,但是无法正确构造该结构。我不需要父页面或子页面的内容,仅需要标题,永久链接和一些元数据。谢谢!

1 个答案:

答案 0 :(得分:0)

您获取帖子的方式,无论父级是谁,它都会获取所有帖子,因此,为了实现分层显示,可以使用以下解决方案:

  1. 通过在post_parent => 0函数中设置WP_Query来获取顶级父母

例如

$arr_query_args = array(
    'numberposts'  => -1,
    'post_type'    => 'tours',
    'orderby'   => 'title', 
    'order'     => 'ASC',
    'post_parent'  => 0
);

$parent_posts = get_posts( $arr_query_args );
  1. 然后循环访问顶级父母,并通过在post_parent => $parent->ID函数中设置WP_Query来使用那些父母的ID来获取他们的孩子

例如

while($parent_posts->have_posts()): $parent_posts->the_post();

    $arr_query_args_child = array(
        'numberposts'  => -1,
        'post_type'    => 'tours',
        'orderby'   => 'title', 
        'order'     => 'ASC',
        'post_parent'  => get_the_ID()
    );

    $child_posts = get_posts( $arr_query_args_child );

    // loop for child post here and fetch meta data etc.

endwhile;
  1. 然后使用儿童ID,通过get_post_meta函数获取相关元数据。

使用上述方法,您应该能够实现所需的输出。