web-dev-qa-db-fra.com

WP_Query ne devient pas collant post en haut, lorsqu'il est utilisé dans un modèle de page

Je crée un thème dans lequel j'ai créé un modèle de page appelé page_default-blog.php à utiliser pour créer une page de blog. Dans ce fichier, j'ai le code suivant:

$paged = (get_query_var('page')) ? get_query_var('page') : 1;
$args = array(
  'paged' => $paged,
);
$custom_query = new WP_Query($args);

if ($custom_query->have_posts()) : 
  while($custom_query->have_posts()) : $custom_query->the_post(); ?>
    the_title();
    echo "<br>";
  endwhile;
endif;
wp_reset_postdata();

Le problème est que le post-it ne vient pas en haut, même si ignore_sticky_posts est défini sur false par défaut dans $ args.

Le post-it s'affiche en haut si j'utilise le fichier "index.php", mais il ne vient pas si je configure la page d'accueil en tant que page de blog.

S'il vous plaît laissez-moi savoir comment je peux le faire fonctionner. Merci.

Edit 1: Voici le résultat de var_dump ($custom_query->request);:

string(217) "SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 0, 4"

Edit 2: Voici à quoi ressemble mon fichier modèle page_default-blog.php:

<?php
/*
    Template Name: Blog Default
*/
get_header();

wp_reset_postdata();
wp_reset_query();

$args = array(
  'post_type' => 'post',
  'posts_per_page' => -1,
  'ignore_sticky_posts' => 0,
);
$custom_query = new WP_Query( $args );
var_dump( $custom_query->is_home ); // This is returning bool(false)
?>

<div class="container">
  <?php
  if ($custom_query->have_posts()) : while($custom_query->have_posts()) : $custom_query->the_post(); ?>
    <?php
    echo the_title();
    echo "<br>";
    ?>
    <?php endwhile;
  endif;
    wp_reset_postdata();
  ?>
</div>

<?php get_footer(); ?>

Ce qui précède est le fichier exact que j'utilise actuellement. Je l'ai simplifié pour essayer de trouver le problème, mais je n'ai toujours pas réussi à le faire, car le titre du post-it collant n'apparaît pas en haut de la liste.

1
user1981248

Vous avez un filtre personnalisé dans un plugin ou dans votre thème qui joue avec WP_Query. Votre problème est que quelque chose met is_home à false. Ce n'est pas le comportement par défaut, par défaut, is_home devrait renvoyer true dans toute instance personnalisée de WP_Query.

is_home est l’un des facteurs contributifs responsables de la configuration des posts collants en haut dans une requête. Si sa valeur est false, vous ne pourrez pas placer les posts collants au premier plan.

Vous devriez désactiver vos plugins un par un et vérifier lequel est la cause du problème. Vous devez également tester votre code sur un thème groupé pour éliminer votre thème en tant que coupable possible.

4
Pieter Goosen