web-dev-qa-db-fra.com

Fonction d'archive personnalisée

Je travaille à la création d'une page d'archives personnalisée pour le site Web de mon église. Sur ma page d'archives, je souhaite que le sermon de la semaine dernière soit affiché en haut dans une boîte spéciale, suivi des futurs sermons et enfin des Archives du sermon.

J'aimerais que les futurs sermons et les archives de Sermon soient séparés par un titre ... c'est-à-dire.

Sermons Futurs

Archives du sermon

Mon problème est que lorsque je clique sur le bouton pour accéder aux anciens messages Sermon dotés de la fonction de pagination, les sermons actuels et futurs s'affichent sur toutes les pages d'archives sur lesquelles je suis!

Comment faire pour que le sermon actuel et les futurs sermons ne s'affichent que sur la page 1, et pas lorsque je clique pour afficher les messages plus anciens?

Voici mes fonctions:

// Create the loop for the sermons page
function sermon_posts() {
    if(is_page('sermons')) {
        current_sermon_archives(); ?>
        <h2 class="sm-header">Future Sermons</h2>
        <?php future_sermon_archives(); ?>
        <h2 class="sm-header">Sermon Archives</h2>
        <?php sermon_archives(); 
    } 
}

function current_sermon_archives() {
    $thisSunday = date('d', strtotime('last Sunday'));
    $thisSundayMonth = date('n', strtotime('last Sunday'));
        $lastWeekSermon = new WP_Query(array( 'posts_per_page' => 1,
                                        'post_type' => 'sermon_post',
                                        'monthnum' => $thisSundayMonth,
                                        'day' => $thisSunday) );

if ( $lastWeekSermon->have_posts() ) : while ( $lastWeekSermon->have_posts() ) : $lastWeekSermon->the_post();  ?>

<div id="sm-upcoming-archives">
    <h2 class="sm-header">Last Week's Sermon</h2>
        <div class="scripture-post">
            <h2><p><?php the_title(); ?></p><span class="sm-date"> - <?php the_time(get_option('date_format')); ?></span></h2>

                    <?php echo get_the_term_list( get_the_ID(), 'speaker' ) ?>
<?php the_content(); ?>
<div class="sermonexcerpt">
                        <?php $thereisdescription = get_post_meta($post->ID, "_description", true);
                        if($thereisdescription){ ?>
                            <?php echo get_post_meta($post->ID, "_description", true); ?>
                        <?php }else{ ?>
                        <?php } ?></div>

    </div>
</div>
    <?php endwhile; else: ?>
        <?php wp_reset_postdata(); ?>
    <?php endif; 
}

function future_sermon_archives() {
    $current_year = date(' Y', strtotime('next Sunday'));
    $current_month = date('M ', strtotime('next Sunday'));
    $current_day = date('d', strtotime('next Sunday'));
    $futureSermon = new WP_Query(array( 'showposts' => '3',
                                            'post_type' => 'sermon_post',
                                            'monthnum' => $current_month,
                                            'day' => $current_day) );

        if ( $futureSermon->have_posts() ) : while ( $futureSermon->have_posts() ) : $futureSermon->the_post();  ?>

<div id="sm-upcoming-archives">
    <h2 class="sm-header">Last Week's Sermon</h2>
        <div class="scripture-post">
            <h2><p><?php the_title(); ?></p><span class="sm-date"> - <?php the_time(get_option('date_format')); ?></span></h2>

                    <?php echo get_the_term_list( get_the_ID(), 'speaker' ) ?>
<?php the_content(); ?>
<div class="sermonexcerpt">
                        <?php $thereisdescription = get_post_meta($post->ID, "_description", true);
                        if($thereisdescription){ ?>
                            <?php echo get_post_meta($post->ID, "_description", true); ?>
                        <?php }else{ ?>
                        <?php } ?></div>

    </div>
</div>
    <?php endwhile; else: ?>
        <?php wp_reset_postdata(); ?>
    <?php endif; 
}

function sermon_archives() {
    query_posts(array('post_type'=>'sermon_post', 'paged' => get_query_var( 'paged' ) ) ); ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="scripture-post">
            <h2><p><?php the_title(); ?></p><span class="sm-date"> - <?php the_time(get_option('date_format')); ?></span></h2>

                    <?php echo get_the_term_list( get_the_ID(), 'speaker' ) ?>
<?php the_content(); ?>
<div class="sermonexcerpt">
                        <?php $thereisdescription = get_post_meta($post->ID, "_description", true);
                        if($thereisdescription){ ?>
                            <?php echo get_post_meta($post->ID, "_description", true); ?>
                        <?php }else{ ?>
                        <?php } ?></div>

</div>

        <?php endwhile; else: ?>
    <?php endif; ?>
<div class="navigation">
                <?php if (function_exists("pagination")) {                       pagination($additional_loop->max_num_pages);
                        } ?></div>
<?php }

Je sais que cela ressemble à beaucoup de code, mais en réalité ce sont toutes des fonctions assez similaires ...

Comment faire pour que le sermon actuel et les futurs sermons ne s'affichent que sur la page 1, et pas lorsque je clique pour afficher les messages plus anciens?

1
Caleb

Vous voulez is_paged() ( voir Codex ). Cela retourne true si vous êtes à la page 2,3, etc. et false si vous êtes sur la première page. Alors...

if(!is_paged()){
     //Display current / future sermons
}

//Display archived sermons.
1
Stephen Harris