Gepaggerte Posts - Wie verwende ich Nummern und nächste / vorherige Links?

17

Ich möchte, dass wp_link_pages (mehrseitige Posts) die Seitenzahlen, das Wort "Zurück" vor diesen Nummern und ein "Weiter" nach diesen Nummern anzeigt. Es würde so aussehen:

Zurück 1, 2, 3, 4 Weiter

Ich versuche dies ohne Plugin zu tun . Folgendes habe ich bisher versucht, aber es funktioniert nicht, es zeigt nur Zahlen an.

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>
AndrettiMilas
quelle

Antworten:

12

Die von Ihnen verwendete Funktion wp_link_pagesCodex verfügt standardmäßig nicht über die von Ihnen gesuchte Funktion.

Sie können es jedoch problemlos erweitern, indem Sie eine Rückruffunktion verwenden, die als Filter für die Funktionsargumente registriert ist :

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

Der Filter wird dann die Parameter ändern , die in dieser Funktion verwendet werden , on-the-fly und spritzen die fehlenden Verbindungen zu den prevund nextArgumente , die Ausgabe auf der linken und rechten Seite der ARE numerierten Verbindungsliste ( next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

Verwendung:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

Wenn Ihr Thema immer die vorherigen und nächsten Links verwendet, können Sie die Funktion ein wenig ändern, um sie zum Standardverhalten zu machen, wenn number(die Standardeinstellung) verwendet wird, sodass Sie weniger in Ihre Themen schreiben müssen.

Dies ist eine etwas andere Implementierung, wie von Velvet Blues vorgeschlagen .

hakre
quelle
Abgesehen von einigen Kommentaren und vorzeitigen Rückmeldungen sind Implementierung, Optionsname und Erklärung genau die gleichen wie bei mir. Übersehen ich etwas? Welchen Nutzen bringt Ihre Lösung? Vielen Dank.
Velvet Blues
Wahrscheinlich, wenn ich den Code vergleiche.
Hakre
Hakres Lösung so lange verfügbar, wie die Frage hier ist. Vollständige Antworten (= verständlich, ohne auf externe Quellen angewiesen zu sein) werden in StackExchange immer bevorzugt.
fuxia
6

Die wp_link_pages()Funktion zeigt nur entweder Text oder Nummer an, niemals beides. Wenn Sie sich den Code der Funktion ansehen, werden Sie feststellen, dass es keine Möglichkeit gibt, das Verhalten durch Übergabe von Parametern zu ändern.

Davon abgesehen gibt es drei Möglichkeiten, dies ohne ein Plugin zu tun:

  1. Erstellen Sie Ihre eigene Funktion in der Datei functions.php Ihres Themas. Funktioniert, aber dann hättest du eine neue Funktion.
  2. Verwenden Sie 2-3 Instanzen von wp_link_pages(). Sehr ineffizienter Hack.
  3. Verwenden Sie einen Filter. Bevorzugte Methode . Siehe unten.

Ich habe in meinem Blog einen Artikel dazu geschrieben. Grundsätzlich benutze ich den Filter wp_link_pages_args und füge eine Funktion in die Datei functions.php ein, die eine neue Option 'next_and_number' hinzufügt.

WordPress Hack: Nummer anzeigen & Nächste / Vorherige Links mit wp_link_pages ()

Velvet Blues
quelle
Cooler Mann ... Ich habe über die 4 globalen Werte nachgedacht, bin aber nie auf eine Lösung gekommen ... +1!
Rutwick Gangurde
3

Versuchen Sie dies, Sie können es anpassen. Aber es sollte machen, was du wolltest :-)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}
Tareq
quelle
Wie können wir damit umgehen? wordpress.org/support/topic/… oder wie man einen dynamischen benutzerdefinierten Titel vor der Seitenzahl hinzufügt.
Ravi Patel
1

Ich verstehe nicht, was das Problem ist ... Hast du einen Fehler?

Das sollte funktionieren:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

Sie müssen next_or_number nicht hinzufügen, da number bereits die Standardeinstellung ist.

Matte_
quelle
Aus irgendeinem Grund funktioniert das nicht, aber es scheint mir richtig zu sein. Ich frage mich, ob es eine Änderung in 3.3 gab oder ob ich etwas in functions.php einfügen muss.
AndrettiMilas
2
Ja , ich versuchte auch dies, es funktioniert , wenn Sie setzen next_or_numberauf next. Es werden jedoch nur die Links "Weiter" und "Zurück" angezeigt, nicht die Zahlen!
Rutwick Gangurde
1
Ich brauche beides, wie im Beispiel gezeigt.
AndrettiMilas
1

Dieser Code ist in der Schleife der Beiträge? Die Kodierung ist für mich in Ordnung. Hier ist das Codex-Beispiel zur Verwendung:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>
Caio Alves
quelle
Dieser Code funktioniert nicht.
AndrettiMilas
Code behoben. Es tut uns leid. Einige Attribute haben keinen Wert.
Caio Alves
1
Dies führt nicht zu den Ergebnissen, die ich in meiner Frage gesucht habe, es werden nur Zahlen angezeigt.
AndrettiMilas
0

Die Antwort ist anders, aber es hat @ 荒野 荒野 灯 dazu inspiriert, seine Antwort zu löschen. Imho es ist das Beste, als die einfachste und flexibelste Lösung:

Die Lösung hängt von ab paginate_links(). Das einzige, was zu wissen ist, ist, basedass die URl von Anfang an angehängt wird %_%, die dann durch ersetzt wird format. So lange wir nutzen get_permalink().'%_%';, wissen wir, dass wir auf jeden Fall auf dem aktuellen Post bleiben werden. Im Inneren formatwird das #durch die Seitennummer ersetzt:

function wpse37256_paginate_paged()
{
    if ( ! $paginate_links = paginate_links( array(
         'type'      => 'array'

        ,'total'     => $GLOBALS['numpages']
        ,'mid_size'  => 1
        ,'end_size'  => 1

        #,'prev_next' => false
        ,'prev_text' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
Kaiser
quelle