Cómo agregar una clase CSS a previous_post_link u obtener la URL del post anterior/siguiente

14 may 2011, 15:40:33
Vistas: 29.8K
Votos: 10

¿Cómo puedo agregar una clase CSS a la salida de previous_post_link u obtener solo la URL para crear yo mismo el markup HTML?

0
Todas las respuestas a la pregunta 7
1
20

Existen filtros para las funciones previous_post_link y next_post_link que funcionan de manera diferente a previous_posts_link_attributes y next_posts_link_attributes, no estoy seguro por qué esto no está documentado en el sitio web de WordPress.

function posts_link_next_class($format){
     // Agregar clase al enlace de siguiente publicación
     $format = str_replace('href=', 'class="next clean-gray" href=', $format);
     return $format;
}
add_filter('next_post_link', 'posts_link_next_class');

function posts_link_prev_class($format) {
     // Agregar clase al enlace de publicación anterior
     $format = str_replace('href=', 'class="prev clean-gray" href=', $format);
     return $format;
}
add_filter('previous_post_link', 'posts_link_prev_class');
4 jun 2013 03:35:45
Comentarios

Esta es la mejor opción ya que reemplaza la variable $format antes de que entre en la sentencia echo adjacent_post_link().

eteich eteich
28 jun 2013 19:15:40
2
10

Puedes utilizar la función más nativa que está "debajo" de previous_/next_post_link();:

# get_adjacent_post( $in_same_cat = false, $excluded_categories = '', $previous = true )
$next_post_obj  = get_adjacent_post( '', '', false );
$next_post_ID   = isset( $next_post_obj->ID ) ? $next_post_obj->ID : '';
$next_post_link     = get_permalink( $next_post_ID );
$next_post_title    = '»'; // equivale a "»"
?>
<a href="<?php echo $next_post_link; ?>" rel="next" class="pagination pagination-link pagination-next">
    <?php echo $next_post_title; ?>
</a>
14 may 2011 15:53:35
Comentarios

El enlace a tu fuente de GitHub está roto. ¿Podrías actualizarlo por favor?

pixeline pixeline
27 jun 2013 23:00:28

@pixeline El plugin ya no está disponible. Simplemente era demasiado trabajo mantenerlo actualizado para algo que ofrecía gratis junto con una docena de plugins más.

kaiser kaiser
28 jun 2013 01:40:29
1

Podrías colocar un elemento alrededor de la llamada a la función y darle estilo de esa manera. Así:

<div class="previous_post_link"><?php previous_post_link('%link'); ?></div>

luego controlar el enlace en el css.

.previous_post_link a { algunos estilos aquí }
14 may 2011 15:49:44
Comentarios

Esto podría funcionar con CSS estándar, pero con Bootstrap, será más difícil.

Dexter Dexter
25 feb 2022 12:21:09
0

Solo un pequeño añadido: el problema con el hook de abajo es que están en forma plural y tu pregunta implica "que quieres darles estilo en forma singular".

posts_link_attributes() {
    return 'class="styled-button"';
}

add_filter('next_posts_link_attributes', 'posts_link_attributes');
add_filter('previous_posts_link_attributes', 'posts_link_attributes');

Aunque funcionan perfectamente, estos son los enlaces que se muestran al final de las listas de publicaciones, no los que están al final de publicaciones individuales. La lógica dice que deberíamos poder duplicar este código con las formas singulares ("next_post_link" y "previous_post_link") y funcionaría. Desafortunadamente, ese no es el caso.

Bueno, dado que los filtros para los enlaces singulares de siguiente y anterior se aplican de manera diferente ver esto

El código de abajo debería funcionar para enlaces singulares. Ponlos en tu archivo function.php

function post_link_attributes($output) {
    $code = 'class="styled-button"';
    return str_replace('<a href=', '<a '.$code.' href=', $output);
}

add_filter('next_post_link', 'post_link_attributes');
add_filter('previous_post_link', 'post_link_attributes');

El código anterior está probado y funciona. Sin embargo, puedes solucionar esto sin usar el function.php es agregar una clase LI alrededor de cada enlace:

    <!--BEGIN: Page Nav-->
    <?php if ( $wp_query->max_num_pages > 1 ) : // si hay más de una página activar paginación ?>

        <nav id="page-nav">
            <h1 class="hide">Navegación de página</h1>
            <ul class="clear-fix">
                <li class="prev-link"><?php next_posts_link('« Página anterior') ?></li>
                <li class="next-link"><?php previous_posts_link('Página siguiente »') ?></li>
            </ul>
        </nav>

    <?php endif; ?>
    <!--END: Page Nav-->

Este código no está probado y nota la pluralidad.

29 may 2018 00:51:53
2

Prueba de la siguiente manera--

<?php $prv_post = get_previous_post();
$next_post = get_next_post(); 
?>
<?php if(!empty($prv_post)) { ?>
<a href="<?php echo get_permalink($prv_post->ID ); ?>" class="prev" rel="prev">
<span class="meta-nav"><?php _e('Publicación anterior', 'awe') ?></span>
<span class="nav-icon"><i class="fa fa-angle-double-left"></i></span>
<?php echo get_the_title($prv_post->ID ); ?> ...
</a>
<?php } ?>

<?php if(!empty($next_post)) { ?>
<a href="<?php echo get_permalink($next_post->ID ); ?>" class="next" rel="next">
<span class="meta-nav"><?php _e('Siguiente publicación', 'awe') ?></span>
<span class="nav-icon"><i class="fa fa-angle-double-right"></i></span>
<?php echo get_the_title($next_post->ID ); ?> ...
</a>
<?php } ?>
20 jun 2015 12:24:59
Comentarios

¿Por qué usas echo get_*, cuando hay funciones relacionadas que muestran su salida por defecto, como the_title()?

Pieter Goosen Pieter Goosen
20 jun 2015 12:28:43

echo devuelve el valor. Sí, tienes razón si estás en single.php no necesitas echo get_*, pero si creas una función entonces necesitas echo get_*.. Espero que lo entiendas.

Jahirul Islam Mamun Jahirul Islam Mamun
20 jun 2015 12:31:56
0

Todo muy bueno, aunque la forma más simple que encontré fue agregar un div en el archivo functions.php que envuelve los enlaces. El mío lo nombré class="plinks"

if ( ! function_exists( 'themename_post_nav' ) ) :
function themename_post_nav() {
global $post;
$previous = ( is_attachment() ) ? get_post( $post->post_parent ) : get_adjacent_post( false, '', true );
$next     = get_adjacent_post( false, '', false );
if ( ! $next && ! $previous )
return;
?>
<nav>
<div class="plinks">
<?php next_post_link( '%link', _x( 'Anterior', 'Enlace anterior', 'themename' ) ); ?>
<?php previous_post_link( '%link', _x( 'Siguiente', 'Enlace siguiente', 'themename' ) ); ?>
</div>
</nav>
<?php
}
endif;

Luego en tu archivo css simplemente escribe una nueva clase para

.plinks a{
display:inline-block;
margin:1em 4px;
font-size:1em;
font-weight:500;
border:0;
padding:8px 1em;
color:#fff;
background:#000;
}
.plinks a:hover{
opacity:0.8;
}

Llámalo en cualquiera de las páginas de plantilla de tu tema usando

<?php themename_post_nav(); ?>
2 jul 2016 18:22:24
0

Este código verificará si las variables $previous_post_obj y $next_post_obj están vacías antes de generar los botones "anterior" y "siguiente", respectivamente. Si alguna de las variables está vacía, el botón correspondiente no se mostrará.

<div>
  <?php $previous_post_obj = get_adjacent_post( '', '', true );
  if ( ! empty( $previous_post_obj ) ) {
    $previous_post_ID = isset( $previous_post_obj->ID ) ? $previous_post_obj->ID : '';
    $previous_post_link = get_permalink( $previous_post_ID ); ?>
    <a href="<?php echo $previous_post_link; ?>" rel="prev" class="prev">
      <span>anterior</span>
    </a>
  <?php } ?>
  <?php $next_post_obj = get_adjacent_post( '', '', false );
  if ( ! empty( $next_post_obj ) ) {
    $next_post_ID = isset( $next_post_obj->ID ) ? $next_post_obj->ID : '';
    $next_post_link = get_permalink( $next_post_ID ); ?>
    <a href="<?php echo $next_post_link; ?>" rel="next" class="next">
      <span>siguiente</span>
    </a>
  <?php } ?>
</div>
27 dic 2022 15:59:19