0

Dank für das Aufnehmen eines Intrest

ich für einige suchen eine klare, gute Praxis zur Verfügung zu stellen, beispielsweise (oder einen Link zu einer bereits existierenden), wie man Erstellen Sie eine A bis Z-Liste von Posts mit Paginierung für benutzerdefinierte Beitragstyp in der neuesten Version von Wordpress basierend auf dem Szenario unten.A bis Z Liste der Beiträge mit Paginierung für Custom Beitrag Typ

Es gibt zwei vorhandene Fragen, die ich auf dieser Seite gefunden habe, aber die Frage nicht eindeutig oder definitiv beantworten.

Um die Dinge einfach zu halten für mich das Szenario zu erklären und für diejenigen, die reagieren. Ich gründe meine Erklärung auf einer Website über Fruit. Wenn ich versuche, die gegebenen Antworten zu verwenden, hoffe ich, dass es für mich und andere Lernende einfach sein wird, den Antworten zu folgen und sie in ihren eigenen Code zu integrieren.

Grundstruktur

  • Ich habe einen Gewohnheit Beitrag Typen "Fruits" genannt erstellt.
  • Ich habe eine Reihe von Beiträge innerhalb Früchte, jedes mit einem Beitrag Titel einer bestimmten Frucht geschaffen z.B. "Bananen".
  • Ich habe eine Seitenvorlage innerhalb der folgenden Div erstellt: <div id="MyAtoZArea" class="MyAtoZStyle"></div>.

Ausgabe

  • Im div würde ich Code wie die eine Liste aller Beiträge in dem benutzerdefinierten Post-Typ "Fruits" angezeigt wird.
  • Ich mag die Ausgabe in einer ungeordneten Liste einzuwickeln <ul> mit jedem Titel <li>
  • Ich mag die Liste eine andere Listenposition ist alphabetisch nach dem Post-Titel sortiert werden.
  • Da sich jeder Buchstabe des Alphabets ändert, möchte ich, dass es eingefügt wird. Zum Beispiel:

A
Äpfel
Aprikosen
B
Bananen

  • ich für Buchstaben des Alphabets möchte nicht, wenn es keine anwendbar angezeigt werden sollen, Beiträge.Zum Beispiel:

A
Äpfel
K
Kiwi
S
Strawberrys

  • Schließlich würde Ich mag maximal 20 Beiträge zeigen, Verwenden der Seitennummerierung, um das n anzuzeigen Ext 20 und so weiter.

Können Sie helfen? Wenn ja, post unten.

Alle konstruktiven Leitlinien und Kommentare sind willkommen.

+0

klären, wie Seitenumbruch funktionieren sollte. Sollte es nach 20 Posts alphabetisch paginieren oder sollte es wie A sein: [posts1-18] B [post19-20] -> neue Seite C [...] – niklas

+0

Hallo Niklas, für mich sollte Paginierung 20 Beiträge alphabetisch z. Früchte: Seite 1 (Beiträge 1-20) Seite 2 (Beiträge 21-40) Seite 3 (Beiträge 41-60) aber wenn Sie ein Beispiel für Obst haben: Seite 1 (alle A Beiträge) Seite 2 (alle B Beiträge) 3 (alle C-Posts) Ich bin sicher, dass andere es nützlich finden können. Ich habe ein paar Tage ohne Erfolg gesucht, um ein gutes Tutorial zu finden. – Nathwales

Antwort

0

Ich würde es tun, wie unten. Der folgende Code, den Sie in Ihrer Vorlage schreiben sollte:

<?php 
//get the posts first 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array(
    'paged' => $paged, 
    'posts_per_page' => 20, 
    'post_type' => 'fruits', 
    'post_status' => 'publish', 
    'orderby' => 'title' 
); 
$fruits = new WP_Query($args); 
?> 
<ul> 
<?php 
//loop through all the posts in the custom query 
if($fruits->have_posts()) { 
    $current_first_letter = ''; 

    while($fruits->have_posts()) { 
    $fruits->the_post(); 
    $title = the_title(); 
    if (is_string($title)) { 
     $first_letter = $title[0] 
     //output a first letter list item with a custom class to be styled differently in your css if it is a new first letter  
     if ($first_letter != $current_first_letter) { 
      echo '<li class="divider"'> . strtoupper($first_letter) . '</li>'; 
      $current_first_letter = $first_letter; 
     } 
    } 
    ?> 
    <li><?php the_title(); ?></li> 
    <?php 
    } 
} 
?> 
</ul> 

//pagination 
<?php if ($fruits->max_num_pages > 1) { // check if the max number of pages is greater than 1 ?> 
    <nav class="prev-next-posts"> 
    <div class="prev-posts-link"> 
     <?php echo get_next_posts_link('Older Entries', $fruits->max_num_pages); // display older posts link ?> 
    </div> 
    <div class="next-posts-link"> 
     <?php echo get_previous_posts_link('Newer Entries'); // display newer posts link ?> 
    </div> 
    </nav> 
<?php } ?> 

//restore original post data 
<?php wp_reset_postdata(); ?> 

Sie könnten easyly Code ändern auch

0

Bitte verwenden Sie diesen Code unten ohne Beiträge für Buchstaben Etiketten angezeigt werden soll. Der folgende Code solltest du in deiner post type template verwenden: es funktioniert wirklich für mich ... Ich habe auch diesen Code getestet .... Siehe Screenshots 1. http://prntscr.com/dxzi22 (von A bis Z) 2. http://prntscr.com/dxziih (Voll von A bis Z mit Paginierung) ... Sie müssen etwas CSS dafür tun ...

<?php 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
$args = array('paged' => $paged,'posts_per_page' => -1,'post_type' => 'services','post_status' => 'publish','orderby' => 'title','order' => 'asc'); 
$fruits = new WP_Query($args); 
if($fruits->have_posts()){ 
    $current_first_letter = ''; 
    $t = array(); 
    $s = array(); 
    while($fruits->have_posts()){ 
    $fruits->the_post(); 
    $title = get_the_title(); 
    if(is_string($title)){ 
     $first_letter = strtoupper($title[0]); 
     if($first_letter != $current_first_letter){ 
      $t[] = $first_letter; 
      $current_first_letter = $first_letter; 
     } 
    } 
    $s[$first_letter][] = get_the_title(); 
    } 
} 

$t = array_unique($t); 
$tc = count($t); 
$sc = count($s); 
for($i=0; $i<$tc; $i++){ 
    ?> 
    <div> 
     <h4><?php echo $t[$i]; ?></h4> 
     <ul> 
     <?php 
     foreach($s as $key => $value){ 
      if($key == $t[$i]){ 
       $vc = count($value); 
       for($j=0; $j<$vc; $j++){ 
     ?> 
      <li><?php echo $value[$j]; ?></li> 
     <?php 
       } 
      } 
     } 
     ?> 
     </ul> 
    </div> 
    <?php 
} 
if($fruits->max_num_pages > 1){ ?> 
    <nav class="prev-next-posts"> 
    <div class="prev-posts-link"> 
     <?php echo get_next_posts_link('Older Entries', $fruits->max_num_pages); ?> 
    </div> 
    <div class="next-posts-link"> 
     <?php echo get_previous_posts_link('Newer Entries'); ?> 
    </div> 
    </nav> 
<?php } ?> 
<?php wp_reset_postdata(); ?>