Je lisais ceci par @nacin et découvrais wp_query au lieu de query_posts que j’avais l'habitude d'utiliser.
Ce que je veux c'est:
mettre ceci dans un fichier template
pour interroger tous les messages de cette catégorie, dans le cas présent '3'
pour afficher, le cas échéant, le premier résultat sur la page, le dernier post collant
après le premier post-it, s'il y en a un, affiche le reste des posts en excluant ce post-it s'il a été mis
Les problèmes que j'ai vus sont les suivants: - si je fais posts_per_page = 1 sur la boucle collante, je ne peux pas faire posts_per_page = -1 sur le reste de la boucle de publications. Pour résoudre ce problème, je viens de définir le nombre à 999.
Je devrais dire maintenant que le code que j'ai fonctionne . Cependant, c'est pour un site à très fort trafic, et je veux m'assurer que c'est la meilleure façon de le faire, et je ne suis pas sûr d'utiliser wp_query comme il convient pour le faire car les requêtes d'origine sont essentiellement les mêmes. un autre avec et sans poteaux collants.
global $wp_query;
$wp_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 1,
'category__in' => 3,
'post__in' => get_option( 'sticky_posts' )
));
while ($wp_query->have_posts()) : $wp_query->the_post();
$exclude_featured = $post->ID;
echo the_title();
echo '<br />';
endwhile;
echo '<br />';
echo '<br />';
global $wp_query;
$args = array_merge(
$wp_query->query_vars,
array(
'post__in' => null,
'posts_per_page' => 999,
'ignore_sticky_posts' => 1,
'post__not_in' => array($exclude_featured)
)
);
query_posts( $args );
while ($wp_query->have_posts()) : $wp_query->the_post();
if ( $exclude_featured == get_the_ID() )
continue;
echo the_title();
echo '<br />';
endwhile;
Merci pour toute aide les gars.
vous pouvez utiliser wp_list_pluck();
if ( $exclude_featured )
$args['post__not_in'] = wp_list_pluck( $exclude_featured->posts, 'ID' );
$args['posts_per_page'] = 999;
query_posts( $args );
endif;
while ( have_posts() ) : the_post();
...
Voici le moyen très simple de le faire.
$args = array(
'posts_per_page' => -1,
'category__in' => 3,
'ignore_sticky_posts' => 0
);
$my_custom_query = new WP_Query( $args );
while ( $my_custom_query->have_posts() ) :$my_custom_query->the_post();
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
//Your Stuff
endwhile;
// Reset Post Data
wp_reset_postdata();
global $wp_query;
surtout 2x.br
... plusieurs fois si vous utilisez la <?php post_class();
Utilisez CSS, de cette façon vous obtiendrez automatiquement une classe appelée .sticky
!Voici une mise à jour utilisant 2 requêtes pour adresser les détails que j'ai manqués, car ce sera assez sûr.
// **Loop 1** get the first sticky only
$sticky = get_option( 'sticky_posts' );
$the_query = new WP_Query( 'p=' . $sticky[0]);
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
// your content
<?php endwhile; wp_reset_postdata(); ?>
//////////////
//**Loop 2** exclude the sticky from the Loop 1
$args = array(
'posts_per_page' => -1,
'ignore_sticky_posts' => 1,
'post__not_in' => array($sticky[0])
);
$super_query = new WP_Query($args);
while ( $super_query->have_posts() ) : $super_query->the_post(); ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
// your content
<?php endwhile; wp_reset_postdata(); ?>
Je vois 2 problèmes majeurs. a) Vous ne devriez pas modifier directement une variable globale & b) Vous ne devriez pas utiliser query_posts
. Voici un exemple retravaillé
functions.php
add_action('pre_get_posts', 'customize_query');
function customize_query($query) {
if(!$query->is_main_query() || !is_page_template('template-file-name.php'))
return;
$wp_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 1,
'category__in' => 3,
'post__in' => get_option( 'sticky_posts' )
));
$query->set('posts_per_page', -1);
$query->set('ignore_sticky_posts', 1);
if(!empty($wp_query->posts))
$query->set('post__not_in', array($wp_query->posts[0]->ID));
}
dans le fichier modèle
$query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 1,
'category__in' => 3,
'post__in' => get_option( 'sticky_posts' )
));
while ($query->have_posts()) : $query->the_post();
echo the_title();
echo '<br />';
endwhile;
echo '<br />';
echo '<br />';
while (have_posts()) : the_post();
echo the_title();
echo '<br />';
endwhile;