Cómo agregar una clase CSS a previous_post_link u obtener la URL del post anterior/siguiente
¿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?

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');

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>

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.

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 } ?>

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

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(); ?>

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>
