从Wordpress中的父子关系中的自定义帖子类型中获取自定义字段值

时间:2013-08-09 05:28:05

标签: php wordpress

我使用Wordpress Types插件创建了两个新的自定义帖子类型。即。酒店和客房。房间类型是酒店的孩子。除此之外,我还在两种帖子类型中添加了一些自定义字段。它包括通用详细信息,如酒店地址,电话号码,电子邮件等。在Room post类型下,我添加了room_image,room_price和room_description自定义字段。

我可以在单个酒店页面上显示这些自定义字段以及房间详细信息。但我被困在索引页面,我必须显示酒店详细信息的摘要以及按降序排列的房价。这是我用来显示酒店详细信息的代码

<?php 
                        // WP_Query arguments
$args = array (
    'post_type'              => 'hotel',    
    'order'                  => 'DESC',
    'orderby'                => 'date',
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();

?>
<article>
                        <header>
                            <figure><img width="300" height="160" alt="Placeholder" src="<?php echo get_post_meta($query->post->ID,'wpcf-image',true);?>"><div class="fit-a"></div></figure>
                            <h3><a href="<?php echo get_permalink($query->post->ID ); ?>"><?php echo $query->post->post_title;?></a></h3>
<?php   

        // do something

    }
} else {
    // no posts found
}

// Restore original Post Data
wp_reset_postdata();?>

如何根据父母酒店获取儿童房价?

2 个答案:

答案 0 :(得分:2)

在每个酒店的循环内,您可以通过调用类型插件中包含的以下函数来访问您的酒店类型的子帖:types_child_posts('name_of_your_child_CPT')

在你的情况下它应该是这样的:

<?php 
// WP_Query arguments
$args = array (
'post_type'              => 'hotel',    
'order'                  => 'DESC',
'orderby'                => 'date',
);

// The Query
$query = new WP_Query( $args );

// The Loop
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();

?>
<article>
    <header>
        <figure><img width="300" height="160" alt="Placeholder" src="<?php echo get_post_meta($query->post->ID,'wpcf-image',true);?>"><div class="fit-a"></div></figure>
        <h3><a href="<?php echo get_permalink($query->post->ID ); ?>"><?php echo $query->post->post_title;?></a></h3>

    <?php
    // are there rooms for current hotel (room is the name of your child Custom Post type)
    $rooms = types_child_posts('room');

    foreach($rooms as $room)
    {
        echo '<div class="room">';
            // here we display the title of a room
            echo '<div class="room_name">'.$room->post_title.'</div>';
            // here we display a custom field (price) of a room
            echo '<div class="room_price">'.array_pop(get_post_custom_values('wpcf-room-price', $room->ID)).'</div>';
        echo '</div>';
    }

    }
} else {
    // no posts found
}

// Restore original Post Data
wp_reset_postdata();?>

我希望这可以帮到你。

答案 1 :(得分:0)

我希望我能正确理解你的问题

首先我们需要致电酒店查询。然后显示其图像和自定义元。然后在酒店查询 - 显示房间帖子和元。

<?php
$parent = array( 'post_type' => 'hotel', 'post_parent' => 0, 'order' => 'DESC', 'orderby' => 'date');
$hotelparent = new WP_Query($parent);
if ( $hotelparent->have_posts() ) : while ($hotelparent->have_posts()) : $hotelparent->the_post();?>
<article>
<header>
<figure><img width="300" height="160" alt="Placeholder" src="<?php echo get_post_meta($hotelparent->ID,'wpcf-image',true);?>"><div class="fit-a"></div></figure>
<h3><a href="<?php the_permalink(); ?>"><?php the_title();?></a></h3>
</header>
<?php $child = array('post_type' => 'hotel', 'post_parent' => $post->ID, 'order' => 'DESC', 'hierarchical'=>1);
$rooms = new WP_Query( $child );
if ( $rooms->have_posts() ) : while ($rooms->have_posts()) : $rooms->the_post(); ?>
<?php echo get_post_meta($rooms->ID,'YOUR_META',true);?>
<?php endwhile; endif; ?>
</article>
<?php endwhile; endif; ?>