Je montre sur ma page d'accueil uniquement les messages avec l'image sélectionnée. Mon problème est que, à chaque chargement de page suivante, je reçois les mêmes résultats, c'est-à-dire l'obtention de doublons. J'utilise la commande par champ personnalisé. Toutes les directions/idées pouvant mener à ce problème sont les bienvenues. Ci-dessous ma boucle principale
// Layout
if(is_category())
{
$post_layout = blt_get_option('category_post_layout', 'normal');
}
elseif(is_author())
{
$post_layout = blt_get_option('author_post_layout', 'normal');
}
elseif(is_archive())
{
$post_layout = blt_get_option('archive_post_layout', 'normal');
}
else
{
$post_layout = blt_get_option('home_post_layout', 'normal');
}
$i = 1;
if(have_posts()){
while(have_posts()){
the_post();
get_template_part( 'inc/template-parts/content', $post_layout );
// Ad spot #4
if($ad_spot_between_posts = blt_get_option('spot_between_posts', 'none') != 'none'){
$ad_posts_frequency = blt_get_option('spot_between_posts_frequency', 3);
// take into account ad frequency
if(($i % (int) $ad_posts_frequency) == 0){
blt_get_ad_spot( 'spot_between_posts' );
}
}
$i++;
}
}else{
$has_posts = false;
}
Et voici mon index:
<?php get_header(); ?>
<div id="site-content" class="clearfix">
<?php
// Front Page - Top of container
if(is_front_page() and is_active_sidebar('front-top_of_container')){
dynamic_sidebar('front-top_of_container');
}
?>
<div id="site-content-column"><?php
if(is_archive()){
blt_get_title();
}
if(have_posts()){
echo '<div class="row">';
include(get_template_directory().'/loop.php');
echo '</div>';
// Previous/next page navigation.
if(!blt_get_option('enable_infinite_scrolling')){
the_posts_pagination(array(
'prev_text' => '<i class="fa fa-chevron-left"></i>',
'next_text' => '<i class="fa fa-chevron-right"></i>',
'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Page', 'blue' ) . ' </span>',
));
}
}else{
get_template_part( 'inc/template-parts/content', 'none' );
} ?>
</div><?php
#
# SIDEBAR
# ========================================================================================
# Load the sidebar if needed
# ========================================================================================
#
if(in_array(blt_get_option('sidebar_layout', 'right'), array('left', 'right'), true)){
get_sidebar();
} ?>
</div>
<?php get_footer(); ?>
Edit: fonction de défilement infini
function blt_infinitepaginate(){
$has_posts = true;
$type = isset($_POST['type']) ? $_POST['type'] : false;
$loopFile = $_POST['loop_file'];
$paged = $_POST['page_no'];
$posts_per_page = get_option('posts_per_page');
$post_id = isset($_POST['post_id']) ? $_POST['post_id'] : false;
# Load the posts
if($post_id){
include(get_template_directory().'/loop-hottest.php');
}else{
query_posts( array( 'paged' => $paged+1, 'post_status' => 'publish', 'post__not_in' => get_option('sticky_posts') ) );
include(get_template_directory().'/loop.php');
}
if(!$has_posts){
return false;
}
exit;
}
function blt_change_main_loop( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( is_home() and isset($_GET['page'])) {
$query->set( 'posts_per_page', $_GET['page'] * get_option('posts_per_page') );
return;
}
}
add_action( 'pre_get_posts', 'blt_change_main_loop', 1 );
}
Il est assez difficile de répondre correctement à votre question avec la quantité de contexte dans votre question, mais je vais essayer d'utiliser le contexte de votre question précédente
Ayant un peu plus de contexte ici sur le modèle, et si je lis ceci correctement, cela se trouve sur votre index.php, je crois toujours et je maintiens mon point que pre_get_posts
est votre réponse. Abordez ce problème comme suit (uniquement s'il ne s'agit pas d'une page de garde statique, car ce qui suit ne fonctionnera pas)
Supprimez votre requête personnalisée. Revenez à votre configuration par défaut où vous obtenez tous les messages normalement
Ensuite, utilisez pre_get_posts
pour modifier la requête principale sur votre page d'accueil afin d'afficher uniquement les publications avec des vignettes. Cela devrait résoudre votre problème avec la pagination
Ajoutez les éléments suivants dans votre fichier functions.php: ( requiert au moins PHP 5.3 )
add_action( 'pre_get_posts', function ( $q )
{
if ( $q->is_home() // Target the home page only
&& $q->is_main_query() // Target only the main query
) {
$meta_query = array(
array(
'key' => '_thumbnail_id'
)
);
$q->set( 'meta_query', $meta_query );
}
});
Si cela ne résout pas votre problème, vous devez vraiment publier plus de contexte.
Je ne vais pas entrer dans les détails concernant query_posts
et à quel point c'est vraiment grave, je l'ai couvert dans ma réponse précédente à votre question précédente. Comme vous n'avez probablement pas codé cela, je contacterais le développeur à ce sujet.
Quoi qu'il en soit, pour résoudre rapidement votre problème avec le défilement infini, vous devez ajouter ce qui suit à vos arguments query_posts
.
'meta_query' => array( array( 'key' => '_thumbnail_id' ) ),
Juste une note, je préférerais réécrire la fonction de défilement infini complète avec WP_Query
comme décrit dans votre question précédente.