Obtener solo los enlaces de página anterior/siguiente (sin título, <a> etc)

8 jul 2012, 21:11:30
Vistas: 24.7K
Votos: 8

Actualmente uso el siguiente método para obtener un enlace de página anterior/siguiente del blog:

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

Sin embargo, esto incluye el elemento exterior, nombre, etc. Solo quiero el enlace, por ejemplo: http://domain.com/blog/page/2

¿Hay alguna función que no esté viendo que se ajuste a mis requisitos?

Aclaración

  • Esto es para la siguiente página del blog (no para entradas del blog)
  • Solo quiero el enlace, no el elemento anchor

Muchas gracias

0
Todas las respuestas a la pregunta 6
1
19

Respuesta corta: get_previous_posts_page_link es la función que necesitas:

<?php if($url = get_previous_posts_page_link()): ?>
  haz algo con $url
<?php endif; ?>

Respuesta más detallada: sigue el código.

previous_posts_link llama a get_previous_posts_link.

<?php
/**
 * Muestra el enlace a la página anterior de posts.
 *
 * @since 0.71
 * @uses get_previous_posts_link()
 *
 * @param string $label Opcional. Texto del enlace a la página anterior.
 */
function previous_posts_link( $label = null ) {
    echo get_previous_posts_link( $label );
}

get_previous_posts_link llama a previous_posts para obtener la URI del enlace.

<?php
/**
 * Devuelve el enlace a la página anterior de posts.
 *
 * @since 2.7.0
 *
 * @param string $label Opcional. Texto del enlace a la página anterior.
 * @return string|null
 */
function get_previous_posts_link( $label = null ) {
    global $paged;

    if ( null === $label )
        $label = __( '&laquo; Página Anterior' );

    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 es simplemente un envoltorio alrededor de la función que estás buscando: get_previous_posts_page_link

<?php
/**
 * Muestra o devuelve el enlace a la página anterior de posts.
 *
 * @since 0.71
 *
 * @param boolean $echo Opcional. Mostrar o devolver;
 */
function previous_posts( $echo = true ) {
    $output = esc_url( get_previous_posts_page_link() );

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

La función que queremos:

<?php
/**
 * Recupera el enlace a la página anterior de posts.
 *
 * Solo devolverá una cadena si no está en una página o entrada única.
 *
 * Retrocompatible con 2.0.10 desde 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);
    }
}

Incluí todo eso para ilustrar cómo puedes encontrar respuestas revisando el núcleo de WordPress. Herramientas como ack pueden ayudarte a empezar:

shell$ cd /ruta/a/tu/instalacion/wordpress
shell$ ack "function previous_posts_link"

En general, WordPress es bastante bueno asegurándose de que una función solo haga una cosa. Rastrear desde funciones más amplias (como previous_posts_link y otras etiquetas de plantilla) hasta funciones más básicas suele ser una buena manera de aprender cosas interesantes y encontrar tu respuesta.

8 jul 2012 22:00:30
Comentarios

¡Vaya, una respuesta muy informativa, y sigue funcionando después de 5 años, gracias!

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

Obviamente lo guardas en un array, como

<?php $prev = get_previous_posts_link(); ?>
8 jul 2012 21:31:59
Comentarios

¿Hay alguna manera de obtener solo el enlace, sin el elemento <a href=""></a>?

Ben Everard Ben Everard
8 jul 2012 21:41:53
0

Si no deseas ningún otro elemento, puedes añadir el siguiente código a la plantilla de página de tu tema. Tus enlaces serán asignados a $prevID y $nextID, con los que podrás hacer lo que quieras.

<?php
// Obtener lista de páginas ordenadas por menú
$pagelist = get_pages('sort_column=menu_order&sort_order=asc');
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}

// Buscar la página actual en el array
$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];  // ID de la página anterior
$nextID = $pages[$current+1];  // ID de la página siguiente
?>
8 jul 2012 21:37:29
1

Similar a @liam-jay, pero obteniendo solo una de las publicaciones

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

Creo que esto debería funcionar bien, aunque no está probado.

8 jul 2012 21:49:39
Comentarios

Un GUID no es un enlace. Parece uno, pero no lo es.

fuxia fuxia
8 jul 2012 23:13:01
0

esto funciona:

    <?php
    $next_post_url = get_permalink( get_adjacent_post(false,'',false)->ID ); // Obtiene la URL del siguiente post
    $previous_post_url = get_permalink( get_adjacent_post(false,'',true)->ID ); // Obtiene la URL del post anterior        
    ?>
18 sept 2019 09:09:33
0

Para la posteridad. previous_posts() y next_posts() harán exactamente eso.

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