it-swarm.com.de

Nur die Links zur vorherigen/nächsten Seite abrufen (nicht Titel, <a> usw.)

Ich verwende derzeit die folgende Methode, um einen Link zur vorherigen/nächsten Blog-Seite zu erhalten:

<?php previous_post_link( '%link', '%title' ); ?>

Dies schließt jedoch das äußere Element, den Namen usw. ein. Ich möchte nur den Link, z. http://domain.com/blog/page/2

Gibt es eine Funktion, die ich nicht für meine Anforderungen sehe?

Klarstellung

  • Dies ist für die nächste Blog-Seite (nicht Blog-Post)
  • Ich möchte nur den Link, nicht das Ankerelement

Danke vielmals

5
Ben Everard

Kurze Antwort: get_previous_posts_page_link ist die gewünschte Funktion:

<?php if($url = get_previous_posts_page_link()): ?>
  do stuff with $url
<?php endif; ?>

Längere Antwort: Folge dem Code.

previous_posts_link ruft get_previous_posts_link auf.

<?php
/**
 * Display the previous posts page link.
 *
 * @since 0.71
 * @uses get_previous_posts_link()
 *
 * @param string $label Optional. Previous page link text.
 */
function previous_posts_link( $label = null ) {
    echo get_previous_posts_link( $label );
}

get_previous_posts_link ruft previous_posts auf, um den Link-URI selbst abzurufen.

<?php
/**
 * Return the previous posts page link.
 *
 * @since 2.7.0
 *
 * @param string $label Optional. Previous page link text.
 * @return string|null
 */
function get_previous_posts_link( $label = null ) {
    global $paged;

    if ( null === $label )
        $label = __( '&laquo; Previous Page' );

    if ( !is_single() && $paged > 1 ) {
        $attr = apply_filters( 'previous_posts_link_attributes', '' );
        return '<a href="' . previous_posts( false ) . "\" $attr>". preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&#038;$1', $label ) .'</a>';
    }
}

previous_posts ist nur eine kleine Hülle um die Funktion, die Sie suchen: get_previous_posts_page_link

<?php
/**
 * Display or return the previous posts page link.
 *
 * @since 0.71
 *
 * @param boolean $echo Optional. Echo or return;
 */
function previous_posts( $echo = true ) {
    $output = esc_url( get_previous_posts_page_link() );

    if ( $echo )
        echo $output;
    else
        return $output;
}

Die Funktion, die wir wollen:

<?php
/**
 * Retrieve previous posts page link.
 *
 * Will only return string, if not on a single page or post.
 *
 * Backported to 2.0.10 from 2.1.3.
 *
 * @since 2.0.10
 *
 * @return string|null
 */
function get_previous_posts_page_link() {
    global $paged;

    if ( !is_single() ) {
        $nextpage = intval($paged) - 1;
        if ( $nextpage < 1 )
            $nextpage = 1;
        return get_pagenum_link($nextpage);
    }
}

Ich habe all das mit einbezogen, um zu veranschaulichen, wie Sie Antworten finden können, indem Sie durch den Kern schauen. Tools wie ack helfen Ihnen beim Einstieg:

Shell$ cd /path/to/your/wordpress/install
Shell$ ack "function previous_posts_link"

Im Allgemeinen kann WordPress ziemlich gut sicherstellen, dass eine Funktion nur eine Sache tut. Das Zurückverfolgen von erweiterten Funktionen (ua previous_posts_link und anderen Vorlagen-Tags) zu grundlegenderen Funktionen ist normalerweise eine gute Möglichkeit, um einige interessante Dinge zu lernen und Ihre Antwort zu finden.

15
chrisguitarguy
<?php get_previous_posts_link(); ?>

Offensichtlich speichern Sie dies in einem Array wie

<?php $prev = get_previous_posts_link(); ?>
1
BennyC

Wenn Sie keine anderen Elemente möchten, können Sie stattdessen den folgenden Code zur Seitenvorlage Ihres Themas hinzufügen. Ihre Links werden dann $ prevID und $ nextID zugewiesen, mit denen Sie tun können, was Sie wollen.

<?php
$pagelist = get_pages('sort_column=menu_order&sort_order=asc');
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}

$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>
0
Liam Jay

Ähnlich wie @ Liam-Jay, aber nur einen der Beiträge bekommen

$prev_post = get_previous_post();
empty($prev_post) or $link = $prev_post->guid;

Ich denke, das sollte gut funktionieren, ungetestet.

0
BennyC