it-swarm.com.de

Benutzerdefinierte Loops, klebrige Pfosten und ein Albtraum der Paginierung

Ich habe alles versucht. Ich habe jeden angeschaut. Single. Frage. Hier, in StackOverflow, dem WP -Hilfeforum, wurde 10 Seiten tief gegoogelt und JEDE Codekombination, die ich in den letzten 2 Tagen gefunden habe, buchstäblich ausprobiert. Das kann doch nicht unmöglich sein? Das Ziel scheint so einfach!

THE GOAL: Zeige ALLE klebrigen Beiträge zuerst und danach die normalen Beiträge - MIT PAGINATION.

Beispiel: Wenn die Anzahl der Posts pro Seite auf 10 festgelegt ist und 15 Sticky-Posts und 15 normale Posts vorliegen, sind Seite 1 10 Sticky-Posts, Seite 2 5 Sticky-Posts und dann 5 normale Posts und Seite 3 10 normale Posts. Bestellt nach Datum.

Ich habe mehrere Loops ausprobiert, verschiedene Abfragen, und bin CLOSE aber bisher ohne Zigarre gekommen. Folgendes habe ich bisher:

<!-- 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(); ?>

Das Obige zeigt ALLE klebrigen Pfosten und dann (5) normale Pfosten. Dies ist der nächste, den ich bekommen habe, aber # 1, ich möchte nicht ALLE klebrigen Beiträge auf der ersten Seite anzeigen, ich möchte die Paginierungsregeln einhalten. # 2, ALLE Haftnotizen werden auf allen Seiten angezeigt. Wenn ich also 50 Sticky Posts und 50 normale Posts habe, zeigt jede Seite 55 Posts - die ersten 50 sind die Sticky Posts und die letzten 5 sind normal, was nicht mein Ziel ist (siehe DAS ZIEL oben).

Gibt es eine einfache Änderung an einem oder beiden Loops? Sollte ich eine Doppelschleife verwenden oder gibt es eine andere/bessere Option, um dies zu tun? Ich bin offen für Vorschläge, solange ich es zur Arbeit bekomme. Ich sollte beachten: Ich verwende WP 3.2.1 und eine abgespeckte Nicht-Plugin-Paginierungsfunktion, die aus WP-PageNavi stammt (die vollständige Paginierungsfunktion ist hier zu sehen: http://paste2.org/p/1596821 ).

Jede Hilfe wird geschätzt!

1
RodeoRamsey

@Chris_O ist richtig ... Momentan werden Haftnotizen in benutzerdefinierten Beitragstypen nicht unterstützt. Sie müssen also etwas mit dem von Ihnen verwendeten Thema zu tun haben.

Wenn Sie das CPT-Problem jetzt außer Acht lassen ... und davon ausgehen, dass es genauso funktioniert wie WordPress-Beiträge, dann ist das Ziel, das Sie beschreiben, genau die Art und Weise, wie "klebrige" Beiträge in WordPress erstellt wurden (dh alle klebrigen Beiträge vor dem Anzeigen anzeigen) die normalen Beiträge und halten Sie sich an die Paginierung), so was kann ich sagen, Ihr Problem liegt in der Tatsache, dass Sie versuchen, zwei separate Schleifen zu erstellen. Um die Beiträge so anzuzeigen, wie Sie es möchten, sollten Sie nur eine Schleife verwenden.

Haben Sie versucht, nur eine Schleife auszuführen (d. H. Die zweite Abfrage zu entfernen und die erste durch die folgende zu ersetzen, um festzustellen, ob die Stickies automatisch hinzugefügt werden)?

$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

Ich würde Ihre Vorlagenschleife mit dem obigen Code kombinieren.

Fügen Sie dann eine Bedingung in die 1. und 2. Schleife ein.

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

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

}

Dies würde wahrscheinlich nicht sofort funktionieren, ist aber definitiv in die richtige Richtung, wenn Sie mehr Bedingungen verwenden, um die gewünschten Einstellungen zu erhalten.

Daher bin ich ein neuer Benutzer mit diesem Konto auf der WordPress-Börse. Ich kann keine Kommentare posten und bitte Sie, den Code mit dem "get_template_part ('loop')" oder dem Loop-Template zu kombinieren. Ich könnte wahrscheinlich eine bessere Antwort von dort geben.

0
Anri