it-swarm.com.de

Wie wird die aktuelle Seitennummer (wp_link_pages) formatiert?

Wenn ein Beitrag auf mehrere Seiten aufgeteilt wird, verwenden Sie die native Funktion wp_link_pages, um eine Navigationsseitenleiste am Ende des Beitrags anzuzeigen.

Ich versuche, diese Elemente für mein Thema zu formatieren, aber es scheint, dass die aktuelle Seitenzahl nicht formatiert werden kann.

Ich stelle mir vor, dass ich die wp_link_pages Funktion überschreiben sollte, aber ich lerne immer noch die Grundlagen der WP Programmierung.

Können Sie mir helfen, die Schritte zu identifizieren, die zur Lösung dieses Problems erforderlich sind?

1
Drake

Leider gibt es keine Möglichkeit, dies nur mit nativen Funktionen zu tun: WP ist… Request Agnostic und erstellt immer Links zur aktuellen Seite (Navigationsmanus, Listenseiten…).

Sie können auch keinen Filter verwenden, da wp_link_pages() keinen geeigneten Filter hat.

In meinen Themes verwende ich eine eigene Funktion, die auf diesem Code basiert. Es ist wahrscheinlich zu lang, um es hier zu posten, also habe ich es als Plugin auf GitHub gestellt: Logical Page Links .
Sie können das Plugin wie es ist verwenden oder den Code in Ihr Theme kopieren.

Das resultierende Markup sieht folgendermaßen aus:

<p class="pager"> 
  <b title='You are here.'>1</b>  
  <a class=number href='http://example.com/page/2/'>2</a> 
</p>

Der <b> markiert die aktuelle Seite, Sie können sie folgendermaßen formatieren:

.pager b
{
    color:      #fff;
    background: #111;
}

Weitere Funktionen finden Sie in der Readme-Datei des Plugins.

Aktualisieren

Ich habe die Frage falsch verstanden. Ich dachte, Sie brauchen eine solche Funktion für Archive. Es tut uns leid.

Hier ist eine umgeschriebene Version von wp_link_pages() als Plugin. Ich nehme an, Sie werden es in Ihr Thema einfügen.

<?php # -*- coding: utf-8 -*-
/*
Plugin Name: Numbered In-Page Links
Description: Replacement for wp_link_pages with numbers. Use do_action( 'numbered_in_page_links' );
Version:     1.0
Required:    3.1
Author:      Thomas Scholz
Author URI:  http://toscho.de
License:     GPL v2
*/
! defined( 'ABSPATH' ) and exit;

add_action( 'numbered_in_page_links', 'numbered_in_page_links', 10, 1 );

/**
 * Modification of wp_link_pages() with an extra element to highlight the current page.
 *
 * @param  array $args
 * @return void
 */
function numbered_in_page_links( $args = array () )
{
    $defaults = array(
        'before'      => '<p>' . __('Pages:')
    ,   'after'       => '</p>'
    ,   'link_before' => ''
    ,   'link_after'  => ''
    ,   'pagelink'    => '%'
    ,   'echo'        => 1
        // element for the current page
    ,   'highlight'   => 'b'
    );

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

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

    if ( ! $multipage )
    {
        return;
    }

    $output = $before;

    for ( $i = 1; $i < ( $numpages + 1 ); $i++ )
    {
        $j       = str_replace( '%', $i, $pagelink );
        $output .= ' ';

        if ( $i != $page || ( ! $more && 1 == $page ) )
        {
            $output .= _wp_link_page( $i ) . "{$link_before}{$j}{$link_after}</a>";
        }
        else
        {   // highlight the current page
            // not sure if we need $link_before and $link_after
            $output .= "<$highlight>{$link_before}{$j}{$link_after}</$highlight>";
        }
    }

    print $output . $after;
}
4
fuxia

Ich stimme seb zu Die Möglichkeit dazu besteht darin, link_before und link_after zu verwenden. Verwenden Sie zum Erweitern beispielsweise 'link_before' => '<span class="page-link-number">', 'link_after' => '</span>'

Dann haben Sie folgende Ausgabe:

<p class="page-links"><span class="before">Pages:</span> 
<a href="http://myurl.com/page-blah/1/"><span class="page-link-number">1</span></a> 
<span class="page-link-number">2</span> 
<a href="http://myurl.com/page-blah/3/"><span class="page-link-number">3</span></a>
</p>

wo wir uns gerade auf seite zwei befinden.

DANN können Sie festlegen, ob die Klasse "page-link-number" das Kind eines Links ist oder nicht.

.page-links a {
    color: #004c98;
    text-decoration: none;
}

.page-links .page-link-number { /* this is the default "current" state */
    background: #e5e5e5;
    display: inline-block;
    margin: 4px;
    padding: 4px 6px;
}

.page-links a .page-link-number { /* if it's inside a link, change the background color */
    background: #fff;
}

.page-links a .page-link-number:hover { /* add a hover state */
   background: #e0f0ff;
}
3
Vicki Farmer

Eine einfache Möglichkeit, die ich jetzt benutze, ist die Verwendung von 'link_before' und 'link_after' als Teil der Argumente von wp_link_pages. Sie können dann jede Zahl, einschließlich der aktiven, in ein Tag einbinden und dann entsprechend formatieren.

3
Seb

@toscho danke für den Beitrag, es hat sehr geholfen! Ich bin noch einen Schritt weiter gegangen und habe beiden Ausgaben Listenelement-Tags hinzugefügt, damit ich es einfacher gestalten kann.

Ich füge diesen Hack in deinen Code ein, da er jemandem helfen könnte.

$output .= _wp_link_page( $i ) . "<li>{$link_before}{$j}{$link_after}</a></li>"

$output .= "<li><$highlight>{$link_before}{$j}{$link_after}</$highlight></li>"

Camilo

0
Camilo Delvasto

Zuerst müssen Sie eine CSS-Klasse für target bereitstellen, die Sie mit den Argumenten von wp_link_pages() selbst ausführen können:

wp_link_pages( 'before=<p class="link-pages">Page: ' );

Gestalten Sie jetzt einfach die Klasse .link-pages. Folgendes verwende ich:

.link-pages {
    clear:both;
    font-size:10pt;
    text-align:center;
}
.link-pages a {
    margin: 0px 3px 0px 3px;
    padding: 0px 3px 0px 3px;
}

Natürlich ganz nach Ihren Wünschen.

0
Chip Bennett

Es ist möglich, die aktuelle Seite mit einem WP Filter zu markieren. Der in wp_link_pages() verwendete Filter wp_link_pages_link empfängt das Verknüpfungselement, das eine einzelne Nummer für die aktuelle Seite und einen Anker für andere Seiten darstellt. So können wir überprüfen, ob es sich bei dem Artikel um eine Zahl handelt, und ihn in einen Bereich einwickeln:

/**
 * Filter wp_link_pages to wrap current page in span.
 *
 * @param $link
 * @return string
 */
function elliot_link_pages( $link ) {
    if ( ctype_digit( $link ) ) {
        return '<span class="current">' . $link . '</span>';
    }
    return $link;
}
add_filter( 'wp_link_pages_link', 'elliot_link_pages' );

Vorausgesetzt, Sie filtern die Links nicht bereits so, dass die aktuelle Seite keine einzige Zahl mehr ist. Sie können es dann mit der Klasse current stilisieren.

0
Elliot