Obține linkurile paginii anterioare / următoare (fără titlu, <a> etc)

8 iul. 2012, 21:11:30
Vizualizări: 24.7K
Voturi: 8

În prezent folosesc următoarea metodă pentru a obține un link către pagina anterioară / următoare a blogului:

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

Totuși, aceasta include elementul exterior, numele etc., eu vreau doar linkul, de exemplu http://domain.com/blog/page/2

Există vreo funcție pe care nu o văd pentru a-mi satisface cerințele?

Clarificare

  • Aceasta este pentru următoarea pagină de blog (nu postare de blog)
  • Vreau doar linkul, nu elementul ancoră

Mulțumesc mult

0
Toate răspunsurile la întrebare 6
1
19

Răspuns scurt: get_previous_posts_page_link este funcția pe care o căutați:

<?php if($url = get_previous_posts_page_link()): ?>
  faci ceva cu $url
<?php endif; ?>

Răspuns detaliat: urmăriți codul.

previous_posts_link apelează get_previous_posts_link.

<?php
/**
 * Afișează linkul către pagina anterioară de articole.
 *
 * @since 0.71
 * @uses get_previous_posts_link()
 *
 * @param string $label Opțional. Textul pentru linkul către pagina anterioară.
 */
function previous_posts_link( $label = null ) {
    echo get_previous_posts_link( $label );
}

get_previous_posts_link apelează previous_posts pentru a obține URI-ul linkului.

<?php
/**
 * Returnează linkul către pagina anterioară de articole.
 *
 * @since 2.7.0
 *
 * @param string $label Opțional. Textul pentru linkul către pagina anterioară.
 * @return string|null
 */
function get_previous_posts_link( $label = null ) {
    global $paged;

    if ( null === $label )
        $label = __( '&laquo; Pagina Anterioară' );

    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 este doar un wrapper simplu în jurul funcției pe care o căutați: get_previous_posts_page_link

<?php
/**
 * Afișează sau returnează linkul către pagina anterioară de articole.
 *
 * @since 0.71
 *
 * @param boolean $echo Opțional. Afișează sau returnează;
 */
function previous_posts( $echo = true ) {
    $output = esc_url( get_previous_posts_page_link() );

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

Funcția pe care o căutăm:

<?php
/**
 * Obține linkul către pagina anterioară de articole.
 *
 * Va returna doar un string, dacă nu este pe o pagină sau articol singular.
 *
 * Backportată la 2.0.10 din 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);
    }
}

Am inclus toate acestea pentru a ilustra cum puteți găsi răspunsuri căutând prin codul sursă. Instrumente precum ack vă pot ajuta să începeți:

shell$ cd /calea/catre/instalarea/wordpress
shell$ ack "function previous_posts_link"

În general, WordPress este destul de bun în a asigura că o funcție face doar un lucru. Urmărirea de la funcții mai generale (cum ar fi previous_posts_link și alte tag-uri de șablon) înapoi la funcții mai de bază este de obicei o metodă bună de a învăța câteva lucruri interesante și de a găsi răspunsul.

8 iul. 2012 22:00:30
Comentarii

Uau, răspuns foarte informativ și încă funcționează după 5 ani, mulțumesc!

Davey Davey
4 iul. 2017 19:40:44
1
<?php get_previous_posts_link(); ?>

Evident, stochezi aceasta într-un array, precum

<?php $prev = get_previous_posts_link(); ?>
8 iul. 2012 21:31:59
Comentarii

Există o modalitate de a obține doar linkul, fără elementul <a href=""></a>?

Ben Everard Ben Everard
8 iul. 2012 21:41:53
0

Dacă nu doriți alte elemente, puteți adăuga următorul cod în template-ul paginii din tema dumneavoastră. Linkurile vor fi atribuite variabilelor $prevID și $nextID, pe care le puteți folosi după preferințe.

<?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];
?>
8 iul. 2012 21:37:29
1

Similar cu @liam-jay, dar doar obținând unul dintre articole

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

Cred că ar trebui să funcționeze bine, deși netestat.

8 iul. 2012 21:49:39
Comentarii

Un GUID nu este un link. Pare unul, dar nu este.

fuxia fuxia
8 iul. 2012 23:13:01
0

acest cod funcționează:

    <?php
    $next_post_url = get_permalink( get_adjacent_post(false,'',false)->ID );
    $previous_post_url = get_permalink( get_adjacent_post(false,'',true)->ID );        
    ?>
18 sept. 2019 09:09:33
0

Pentru posteritate. previous_posts() și next_posts() vor face exact asta.

echo previous_posts( 0, false );
echo next_posts( 0, false );
13 ian. 2022 19:05:07