it-swarm.com.de

Benutzerdefinierte Seitenlinks für paginierte Beiträge wp_link_pages <! - nextpage -> quicktag

Weiß jemand, ob es möglich ist, wp_link_pages so zu ändern, dass der Titel jedes Quicktags auf der nächsten Seite anstelle von Zahlen verwendet wird? Ich kann anscheinend nichts dazu finden.

Dies ist ein Beispiel, wie ich den Quicktag verwende:

<!--nextpage--><!--pagetitle:Overview-->

Mit wp_link_pages(); wird angezeigt/ausgegeben; Pages: 1 2

Ich würde es vorziehen, anzuzeigen/auszugeben; Pages: Overview | 2nd Page Title | 3rd Page Title

Wo es den <!--pagetitle:Overview--> nimmt und diesen als Link zur nächsten Seite verwendet.

Irgendwelche Ideen/Hilfe sehr geschätzt, S.

1
sta777

Dies wird ein bisschen hackisch sein, aber es ist möglich, eine alternative Funktion zu verwenden.

Fügen Sie dies der Datei functions.php Ihres Themas hinzu.

function wp_link_pages_titled($args = '') {
    $defaults = array(
        'before' => '<p>' . __('Pages:'), 
        'after' => '</p>',
        'link_before' => '', 
        'link_after' => '',
        'echo' => 1
    );

    $r = wp_parse_args( $args, $defaults );
    extract( $r, EXTR_SKIP );

    global $page, $numpages, $multipage, $more, $pagenow, $pages;

    $output = '';
    if ( $multipage ) {
        $output .= $before;
        for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) {
            $part_content = $pages[$i-1];
            $has_part_title = strpos( $part_content, '<!--pagetitle:' );
            if( 0 === $has_part_title ) {
                $end = strpos( $part_content, '-->' );
                $title = trim( str_replace( '<!--pagetitle:', '', substr( $part_content, 0, $end ) ) );
            }
            $output .= ' ';
            if ( ($i != $page) || ((!$more) && ($page==1)) ) {
                $output .= _wp_link_page($i);
            }
            $title = isset( $title ) && ( strlen( $title ) > 0 ) ? $title : 'First';
            $output .= $link_before . $title . $link_after;
            if ( ($i != $page) || ((!$more) && ($page==1)) )
                $output .= '</a>';
        }
        $output .= $after;
    }
    if ( $echo )
        echo $output;
    return $output;
}

Aktualisieren Sie nun jeden Anruf, den Sie zu wp_link_pages führen müssen, um stattdessen die neue Funktion wp_link_pages_titled aufzurufen.

Es ist nicht perfekt und irgendwie abgedreht, aber es wird das tun, wonach Sie gefragt haben. Stellen Sie nur sicher, dass Sie dieses Format verwenden, wenn Sie sie in Ihre Posts schreiben.

Content intro

<!--nextpage--><!--pagetitle: Title 1 -->

Next page content 1

<!--nextpage--><!--pagetitle: Title 2 -->

Next page content 2

<!--nextpage--><!--pagetitle: Title 3 is longer -->

Next page content 3

<!--nextpage--><!--pagetitle: Another Title -->

Next page content 4

Sie können den Link zur ersten Seite auch mit einem Titel versehen, er muss jedoch vor allen anderen Elementen angezeigt werden, z. direkt in der ersten Zeile, zB ..

<!--pagetitle: Title for very first link -->
Content intro

Code wurde mit dem Gedanken geschrieben, ihn zum Laufen zu bringen. Es gibt Raum für Verbesserungen. Ich wollte vor allem veranschaulichen, dass es möglich ist. Es liegt an Ihnen (oder irgendjemand anderem), ihn zu erweitern.

Hoffe, das hilft dir, die Dinge ins Rollen zu bringen ..;)

3
t31os

Tolle Lösung - dies hilft wirklich dabei, dass das PageNavi-Plugin so funktioniert, wie ich es mir erhoffe.

Ein Tweak, den ich am Code vorgenommen habe, war, "First" in "Introduction" zu ändern (Sie können das Intro je nach Verwendungszweck durch etwas anderes ersetzen). Fügen Sie das Komma hinzu, das Sie auch am Ende der Seitentitel tun müssen.

$title = isset( $title ) && ( strlen( $title ) > 0 ) ? $title : 'First';

Also das:

Einleitung Erste Ergebnisse

Wird dies: (was eine bessere Formatierung ist)

Einleitung, erster Blick, Schlussfolgerungen

Also kaum mehr als ein Formatierungs-Tweak, hilft aber der Lesbarkeit. Ich habe den enthaltenen Code für die erste Seite nicht zum Laufen gebracht, also habe ich ihn hart in die Funktion codiert. Nicht schön, aber effektiv, da ich die erste Seite immer als "Einführung" bezeichne.

0
user4667

Tolle Lösung! Ich habe jedoch Probleme mit der Verwendung dieser Funktion. Wenn meine Seite so aussieht

Content intro
<!--nextpage--><!--pagetitle: Title 1 -->
Next page content 1
<!--nextpage--><!--pagetitle: Title 2 -->
Next page content 2
<!--nextpage--><!--pagetitle: Title 3 is longer -->
Next page content 3
<!--nextpage--><!--pagetitle: Another Title -->
Next page content 4

Es sieht toll aus, aber wenn

Content intro
<!--nextpage-->
Next page content 1
<!--nextpage--><!--pagetitle: Title 2 -->
Next page content 2
<!--nextpage-->
Next page content 3
<!--nextpage--><!--pagetitle: Another Title -->
Next page content 4

das Ergebnis ist schrecklich! Ich habe ein paar Änderungen vorgenommen, um das Problem zu beheben (nur Änderungen)

        if( 0 === $has_part_title ) {
            $end = strpos( $part_content, '-->' );
            $title = trim( str_replace( '<!--pagetitle:', '', substr( $part_content, 0, $end ) ) ).', ';
        } else { $title = $i.', ';}

Es scheint jetzt besser zu funktionieren! ;-)

0
Ivan Volkov