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; ?>
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