добавить действие() в инструкцию 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');
Author: mor7ifer, 2012-07-03

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;

?>

Если плагин/тема создали крючок для определенного типа сообщения, он заменит вывод по умолчанию.

 1
Author: TheDeadMedic, 2012-07-05 15:21:46