GET_TEMPLATE_PART()-后处理不起作用?

时间:2012-04-17 作者:mathiregister

也许我只是不明白get_template_part() 正在执行…

我有一个文件叫做event-list.php 这应该作为其他页面和文件的模板,以便列出所有我的事件(自定义帖子类型)!

在这里面event-list.php 我有这个…

<?php
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
    $wr_event_fields = get_post_custom();
    $event_date_timestamp = $wr_event_fields[\'_wr_event_date\'][0];
    $event_date = strftime(\'%d.%m.%Y\', $event_date_timestamp);
    $event_time = $wr_event_fields[\'_wr_event_time\'][0];
    $event_speaker = $wr_event_fields[\'_wr_event_speaker\'][0];  
    //get_template_part( \'event-item\' );
?>
    <!-- event-item.php -->
    <div id="event-<?php the_ID(); ?>" <?php post_class(); ?>>

        <div class="event-date"><?php echo $event_date; ?></div>
        <div class="event_time"><?php echo $event_time; ?></div>
        <div class="event-speaker"><?php echo $event_speaker; ?></div>
        <div class="event-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
        <div class="event-description-excerpt"><?php the_excerpt(); ?></div>

    </div>
    <!-- event-item.php -->

<?php endwhile; ?>
所以我想做的是在event-list.php 已命名event-item.php 它只保存活动的布局。我想用这个event-item.php 也许以后也会在不同的循环中。它应该只是我网站上每个活动项目的标记。如果我改变一下even-item.php 模板我整个网站上任何循环中的所有“事件”都应该更改。

我遇到的问题是上述示例代码中的问题。我使用get_template_part( \'event-item\' ); 包括event-item.php 我的循环中的布局结构。我在这个模板之外得到了它的自定义帖子元。然而,这不起作用!

正如您在上面的示例中所看到的,我必须从event-item.php 在我的event-list.php 因此,填写了post meta内容。

你知道我这里没有什么或我做错了什么吗?

提前谢谢你。

马特

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

尝试全球化$post 的内部event-item.php.

另外:一定要打电话wp_reset_postdata() 在您关闭$loop while循环。

e、 g.:

<!-- event-item.php -->
<?php 
// globalize $post
global $post; 
?>
<div id="event-<?php the_ID(); ?>" <?php post_class(); ?>>

    <div class="event-date"><?php echo $event_date; ?></div>
    <div class="event_time"><?php echo $event_time; ?></div>
    <div class="event-speaker"><?php echo $event_speaker; ?></div>
    <div class="event-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
    <div class="event-description-excerpt"><?php the_excerpt(); ?></div>

</div>
<!-- event-item.php -->
然后:

<?php 
endwhile; 

// Restore $post global to the primary query
wp_reset_postdata();
?>
编辑假设问题只是post元数据,我建议将post元数据变量移动到内部loop-item.php. 只是猜测,但可能您的局部变量没有通过include() 属于的函数get_template_part().

所以,像这样:

<!-- event-item.php -->
<?php
// Define these here, inside loop-item.php
$wr_event_fields = get_post_custom();
$event_date_timestamp = $wr_event_fields[\'_wr_event_date\'][0];
$event_date = strftime(\'%d.%m.%Y\', $event_date_timestamp);
$event_time = $wr_event_fields[\'_wr_event_time\'][0];
$event_speaker = $wr_event_fields[\'_wr_event_speaker\'][0]; 
?> 
<div id="event-<?php the_ID(); ?>" <?php post_class(); ?>>

    <div class="event-date"><?php echo $event_date; ?></div>
    <div class="event_time"><?php echo $event_time; ?></div>
    <div class="event-speaker"><?php echo $event_speaker; ?></div>
    <div class="event-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
    <div class="event-description-excerpt"><?php the_excerpt(); ?></div>

</div>
<!-- event-item.php -->
Also, 避免undefined variable 注意,您应该使用isset() 条件句;e、 g.更改此项:

$event_date_timestamp = $wr_event_fields[\'_wr_event_date\'][0];
。。。为此:

$event_date_timestamp = ( isset( $wr_event_fields[\'_wr_event_date\'][0] ) ? $wr_event_fields[\'_wr_event_date\'][0] : false );

SO网友:Tom J Nowell

而不是执行以下操作:

get_template_part( \'event-item\' );
改为执行以下操作:

get_template_part( \'event\',\'item\' );
get_template_part 预期文件名为:parameter1-parameter2.php

另外,请确保声明要用作全局变量的变量,否则它们将超出范围且不会显示:

global $event_date, $event_time, $event_speaker;

结束

相关推荐

simply loop through posts

我知道这是一个真正的新手问题,但我似乎无法从帖子中获得循环。它所做的只是从页面本身中提取。我制作了一个模板并添加了循环。<?php if( have_posts() ) { while( have_posts() ) { the_post(); ?> <h2><?php the_title(); ?></h2> <?php } } ?>