web-dev-qa-db-fra.com

Type de message personnalisé Pagination & messages en double

Je travaille sur un modèle qui utilisera des types de post personnalisés et des taxonomies personnalisées. J'ai des problèmes de pagination et de messages en double.

HOME.PHP

BOUCLE n ° 1 Sur la page d'accueil (home.php), j'ai 2 boucles. Le premier montre 1 article (type d'article personnalisé: Projets) auquel est attribuée la taxonomie personnalisée "En vedette".

BOUCLE N ° 2 Sur la deuxième boucle, j'ai les six "projets" les plus récents (type de message personnalisé), mais je ne veux pas de doublon de la première boucle. Sous les six postes je voudrais une pagination

Les deux boucles dans home.php fonctionnent .. mais j'ai toujours cette copie et je ne parviens pas à faire fonctionner la pagination ..

Pastebin

  • home.php: http://Pastebin.com/6ac2asue

  • functions.php: http://Pastebin.com/1SK206Bh

    <?php $do_not_duplicate = array();
    $folio_loop = new WP_Query( array
        (
            'featured' => 'featured-post',
            'post_type' => 'projects',
            'posts_per_page' => '1',
            )
        );
    
         while ( $folio_loop->have_posts() ) : $folio_loop->the_post();
        $do_not_duplicate[] = $post->ID; ?>
    
        <div id="featured" style="position: relative;">
    
    
            <div class="featured-overlay" style="position: absolute; right: 20px; bottom: 20px; width: 165px; height: 165px; text-align: center;">
                <div class="project-meta-featured">
              <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
            <span>
            <?php
                global $post;
                $text = get_post_meta( $post->ID, '_cmb_project_meta', true );
                echo $text;
            ?>
            </span>
            <br />
            <?php
                global $post;
                $text = get_post_meta( $post->ID, '_cmb_client_meta', true );
                echo $text;
            ?>
    
    
            </a>
              </div>
            </div>
    
            <?php if ( has_post_thumbnail()) : ?>
                <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>" >
                    <?php the_post_thumbnail('featured'); ?>
                </a>
            <?php endif; ?>
    
    
    
        </div>
    
    <?php endwhile; ?>
    
2
Eamon

Je pense que la meilleure façon d'implémenter ceci est d'utiliser pre_get_posts hook. Regardez ce code

function customize_query( $query ) {
    $post = get_posts(array(
         'post_type' => 'projects',
         'taxonomy' => 'featured',
         'numberposts' => 1
    ));
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'post_type', 'projects' );
        $query->set( 'posts_per_page', 6 );
        if($post && !empty($post))
            $query->set( 'post__not_in', array($post[0]->ID) );
    }
}
add_action( 'pre_get_posts', 'customize_query' );

Puis dans votre page d'accueil

$post = get_posts(array(
     'post_type' => 'projects',
     'taxonomy' => 'featured',
     'numberposts' => 1
));
// display the post just retrieved, it must be coming from cache

// we can use the global query since now it contains the 6 posts we want
while(have_posts()) :
    the_post();
    // display the post
endwhile;

Vous aurez besoin de le modifier beaucoup mais cela pourrait vous aider à réaliser ce que vous voulez. Ici, la pagination devrait être normale, puisque vous venez de modifier la requête de la page principale

1
Mridul Aggarwal