我使用的方法是将我的所有单一视图集中在一个视图中loop-single.php
因此,有一个简单的switch语句,它将根据post类型渲染每个视图:
switch($post->post_type) {
do_action(\'basey_loop_single\');
default: ?>
<?php echo apply_filters(\'basey_page_title_news\', __(\'<h1>News</h1>\',\'basey\')); ?>
<?php /* Start loop */ ?>
<?php while (have_posts()) : the_post(); ?>
<?php basey_post_before(); ?>
<article <?php post_class() ?> id="post-<?php the_ID(); ?>">
<?php basey_post_inside_before(); ?>
<header>
<h2 class="entry-title"><?php the_title(); ?></h2>
<?php basey_entry_meta(); ?>
</header>
<div class="entry-content">
<?php the_content(); ?>
</div>
<footer>
<?php wp_link_pages(array(\'before\' => \'<nav id="page-nav"><p>\' . __(\'Pages:\', \'basey\'), \'after\' => \'</p></nav>\' )); ?>
<div class="taxonomy">
<?php echo __(\'Posted in \',\'basey\'); the_category(\', \'); ?>
</div>
<?php $tag = get_the_tags(); if (!$tag) { } else { ?><div class="tags"><?php the_tags(); ?></div><?php } ?>
<div class="commentLinks"><?php comments_popup_link( __( \' 0 Comments\', \'blank\' ), __( \' 1 Comment\', \'blank\' ), __( \' % Comments\', \'blank\' ), \'comments-link\', __(\'Comments closed\', \'blank\')); ?> <?php if ( comments_open() ) : ?>| <a href="<?php the_permalink(); ?>#respond" title="<?php echo __(\'Add a Comment\',\'basey\'); ?>"><?php echo __(\'Add a Comment\',\'basey\'); ?></a><?php endif; ?>
</div>
</footer>
<?php basey_post_inside_after(); ?>
<?php comments_template(); ?>
</article>
<?php basey_post_after(); ?>
<?php endwhile; /* End loop */ ?>
<?php }
你可以在顶部看到我包括了
do_action()
调用我希望可以扩展的区域(可以通过我编写的其他插件或主题函数插入)。虽然这也是PHP的部分核心问题-->有没有一种方法可以像插入数组一样插入switch语句(如下所示):
function add_extra_fruits($fruits) {
$extra_fruits = array(
\'plums\',
\'kiwis\',
\'tangerines\',
\'pepino melons\'
);
// combine the two arrays
$fruits = array_merge($extra_fruits, $fruits);
return $fruits;
}
add_filter(\'add_fruits\', \'add_extra_fruits\');
最合适的回答,由SO网友:TheDeadMedic 整理而成
不是很确定你在找什么-像这样的?
<?php echo apply_filters( \'basey_page_title_news\', __( \'<h1>News</h1>\', \'basey\' ) ) ?>
<?php
while ( have_posts() ) : the_post();
switch ( true ) :
case has_action( "basey_loop_single_$post->post_type" ) :
do_action( "basey_loop_single_$post->post_type", $post );
break;
default : ?>
<!-- your fallback code -->
<?php
endswitch;
endwhile;
?>
如果插件/主题为特定的帖子类型创建了一个钩子,它将替换默认输出。