web-dev-qa-db-fra.com

Boucles personnalisées, poteaux collants et cauchemar de pagination

J'ai tout essayé. J'ai regardé tous. unique. question. ici, sur StackOverflow, le WP forum d'aide, googlé 10 pages de profondeur et a littéralement essayé CHAQUE combinaison de code que j'ai pu trouver, au cours des 2 derniers jours, sans que rien puisse fonctionner comme je le souhaite. Cela ne peut sûrement pas être impossible? L'objectif semble si simple!

OBJECTIF: Affiche TOUS les messages collants en premier, puis les messages normaux après eux - AVEC PAGINATION.

Exemple: avec un nombre de messages par page égal à 10, 15 messages collants et 15 messages normaux, la page 1 correspond à 10 messages collants, la page 2 à 5 messages collants, puis à 5 messages normaux et la page 3 à 10 messages normaux. Commandé par date.

J'ai essayé plusieurs boucles, diverses requêtes et je suis venu FERMER mais jusqu'à présent, pas de cigare. Voici ce que j'ai jusqu'à présent:

<!-- THIS CODE QUERIES ALL POSTS AND RETURNS ONLY STICKY POSTS, DISPLAYED AT TOP OF THE PAGE -->
<?php
// show only ads within this specific category
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
//$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
    'post_type' => 'my_custom_post_type',
    'ad_cat' => $term->slug,
    'caller_get_posts' => 1,
    'post__in' => $sticky,
    'posts_per_page' => -1
    //'paged' => $paged
    );
query_posts($args);
?>
<?php get_template_part( 'loop', 'post_featured' ); ?>
<?php wp_reset_query(); ?>

<!-- THIS CODE QUERIES ALL POSTS AND RETURNS ONLY REGULAR POSTS, DISPLAYED BELOW THE STICKIES -->    
<?php
// show only ads within this specific category
$term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$sticky=get_option('sticky_posts');
$args=array(
    'post_type' => 'my_custom_post_type',
    'ad_cat' => $term->slug,
    'caller_get_posts' => 1,
    'post__not_in' => $sticky,
    'paged' => $paged,
    );
query_posts($args);
?>
<?php get_template_part( 'loop', 'post_normal' ); ?>
<?php wp_reset_query(); ?>

Ce qui précède montre TOUS les messages collants, puis (5) messages normaux. C’est le plus proche que j’ai eu, mais n ° 1, je ne veux pas afficher TOUS les posts collants sur la première page, je veux adhérer aux règles de pagination. # 2, TOUS les messages collants apparaissent sur toutes les pages paginées. Donc, si j'ai 50 posts collants et 50 posts normaux, chaque page contient 55 posts - les 50 premiers sont les posts collants et les 5 derniers sont normaux, ce qui n'est pas mon objectif (voir BUT ci-dessus).

Y at-il une modification facile à une ou les deux boucles? Devrais-je utiliser une double boucle ou existe-t-il une autre/meilleure option pour le faire? Je suis ouvert aux suggestions tant que je peux le faire fonctionner. Je dois noter que j'utilise WP 3.2.1 et une fonction de pagination allégée non prise à partir de WP-PageNavi (la fonction de pagination complète est visible ici: http://paste2.org/p/1596821 ).

Toute aide est appréciée!

1
RodeoRamsey

@Chris_O a raison ... les publications actuellement collantes ne sont pas prises en charge dans les types de publication personnalisés; elles doivent donc avoir un lien avec le thème que vous utilisez.

Abstraction faite du problème du CPT ... et en supposant que cela fonctionne de la même manière que les stickies wordpress, l’objectif que vous décrivez est exactement la manière dont les posts "collants" sont conçus pour fonctionner dans wordpress les messages normaux et adhérer à la pagination), donc de ce que je peux dire de votre problème réside dans le fait que vous essayez de créer deux boucles séparées. Afin d'afficher les messages de la manière dont vous souhaitez qu'ils soient affichés, vous ne devez utiliser qu'une seule boucle.

Avez-vous essayé d’exécuter juste une boucle (c’est-à-dire supprimer la deuxième requête et remplacer la première par quelque chose de similaire à ce qui suit pour voir si les notes persistantes sont ajoutées automatiquement)?

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

$args=array(
  'post_type' => 'my_custom_post_type',
  'paged' => $paged,
  'posts_per_page' => 10
);
query_posts($args);

get_template_part( 'loop', 'post_normal' );
0
drebabels

Je voudrais combiner votre boucle de modèle avec le code ci-dessus.

Et ensuite, insérez une condition dans la 1ère boucle et la 2ème boucle.

if($paged == 1) {
//Show Special Content for First

} else if($paged => 2) {
//Show Content for pages greater than 2

}

Cela ne fonctionnerait probablement pas immédiatement, mais nous allons certainement dans la bonne direction en utilisant davantage de conditions pour obtenir les bons paramètres.

Par conséquent, je suis un nouvel utilisateur avec ce compte sur l'échange wordpress, je ne peux pas poster de commentaires et vous demande de combiner le code avec "get_template_part ('loop')" ou le modèle de boucle. Je pourrais probablement donner une meilleure réponse à partir de là.

0
Anri