Soporte » Plugins y Hacks » Hacks » ¿Es posible eliminar el screen_reader_text de la paginación?

  • Resuelto Fernando Carrascosa

    (@fcarrascosa)


    Hola a todos.

    Estoy desarrollando un tema propio para mi página web personal, y estoy dándome de cabezas con la paginación del blog…

    Veréis, partiendo de la función

    get_the_posts_navigation()

    Entiendo que tiene cuatro argumentos:

    • mid_size (int)
    • prev_text (string)
    • next_text (string)
    • screen_reader_text (string)

    Es este último argumento el que me trae de cabeza (screen_reader_text), entiendo que es una cadena de texto con algo parecido al título de la paginación, pero yo no quiero que aparezca. Intento darle un valor false y me devuelve un valor por defecto.

    Tras revisar el core, en wp-includes/link-template.php me encuentro con esta función:

    function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) {
    	if ( empty( $screen_reader_text ) ) {
    		$screen_reader_text = __( 'Posts navigation' );
    	}
    
    	$template = '
    	<nav class="navigation %1$s" role="navigation">
    		<h2 class="screen-reader-text">%2$s</h2>
    		<div class="nav-links">%3$s</div>
    	</nav>';
    
    	/**
    	 * Filter the navigation markup template.
    	 *
    	 * Note: The filtered template HTML must contain specifiers for the navigation
    	 * class (%1$s), the screen-reader-text value (%2$s), and placement of the
    	 * navigation links (%3$s):
    	 *
    	 *     <nav class="navigation %1$s" role="navigation">
    	 *         <h2 class="screen-reader-text">%2$s</h2>
    	 *         <div class="nav-links">%3$s</div>
    	 *     </nav>
    	 *
    	 * @since 4.4.0
    	 *
    	 * @param string $template The default template.
    	 * @param string $class    The class passed by the calling function.
    	 * @return string Navigation template.
    	 */
    	$template = apply_filters( 'navigation_markup_template', $template, $class );
    
    	return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links );
    }

    Me gustaría poderla reescribir y necesito ayuda sobre cómo hacerlo porque no tengo ni idea… Y sugerir que al poner false como valor de screen_reader_text, sencillamente el título no se mostrara. ¿O está así por alguna razón concreta?

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • Moderador LGrusin

    (@lgrusin)

    Puedes usar en su lugar las funciones
    previous_post_link()
    y
    next_post_link()

    Si quieres usar esa función tendrás que utilizar algún truco como lo hacen en los últimos themes, twentyfourteen, etc. Mediante CSS ocultan el texto poniendo un pixel de alto y ancho… 🙂

    Un saludo

    Hola, @lgrusin.

    Lo primero gracias por tu respuesta, algo asi pensé hacer hasta que dije ‘si hay una función específica para esto, mejor tirar de ella’, pero me encontre con este problema.

    Seguramente lo que acabe haciendo sea reescribir la funcion en cuestión, el hecho de «ocultar» mediante css el texto no me hace especial gracia, es una entidad h2, que tanto los buscadores como el navegador le da una relevancia.

    El hecho es que me parece que eso deberia ser un tema a solucionar en futuras versiones de wordpres…

    De nuevo, muchas gracias por tu respuesta y seguiremos informando.

    Moderador LGrusin

    (@lgrusin)

    Fernando, toda la vida se han usado las funciones previous_post_link() y next_post_link().

    Un ejemplo sería:

    <nav class="nav-single">
    <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentytwelve' ); ?></h3>
    <span class="nav-previous"><?php previous_post_link( '%link', '<span class="meta-nav">' . _x( '←', 'Previous post link', 'twentytwelve' ) . '</span> %title' ); ?></span>
    <span class="nav-next"><?php next_post_link( '%link', '%title <span class="meta-nav">' . _x( '→', 'Next post link', 'twentytwelve' ) . '</span>' ); ?></span>
    </nav>

    Este código lo he cogido del theme twentytwelve. Ahí puedes ver que añaden el H3 manualmente, en este caso valdría eliminar esa línea.

    Deberías echarle un vistazo a varios themes para ver cómo lo hacen.

    Un saludo

    Claro, eso pienso yo, pero si la función EXISTE como tal en el core (es relativamente reciente, creo), usar los previous y next posts + enlaces de paginación (estoy hablando de un archive.php o un home.php) no tiene demasiado sentido, ¿no es mejor tomar la funcion y redefinirla?

    Moderador LGrusin

    (@lgrusin)

    Con get_the_posts_navigation() siempre saldrá screen_reader_text. Esta función se creó por motivos de accesibilidad para dispositivos no visuales como lectores de pantalla. Aquí tienes la discusión https://make.wordpress.org/accessibility/2015/02/09/hiding-text-for-screen-readers-with-wordpress-core/

    Por cierto, el ejemplo que he puesto está mal. En vez de
    previous_post_link()
    es
    previous_posts_link()
    y en vez de
    next_post_link()
    es
    next_posts_link()

    Las primeras son para navegar entre posts. La segundas son para la paginación del blog. Lo tendrías que hacer con éstas.

    Saludos

    Gracias por el link, ahora lo entiendo mucho mejor (y el porqué existe como «obligatoria»).
    🙂

Viendo 6 respuestas - de la 1 a la 6 (de un total de 6)
  • El debate ‘¿Es posible eliminar el screen_reader_text de la paginación?’ está cerrado a nuevas respuestas.