добавить действие() в инструкцию switch
Я использую подход, при котором все мои одиночные представления объединяются в одно loop-single.php
и, таким образом, у меня есть простой оператор переключения, который будет отображать каждое одиночное представление в зависимости от типа сообщения:
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');
1 answers
Не вполне уверены, что вам нужно - что-то вроде этого?
<?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;
?>
Если плагин/тема создали крючок для определенного типа сообщения, он заменит вывод по умолчанию.