¿Cómo personalizar the_archive_title ()?

41

En el tema de mi hijo archive.php, tengo el siguiente código para mostrar el título de mis páginas de archivo:

    <?php
        the_archive_title( '<h1 class="page-title">', '</h1>' );
    ?>

Pero eso muestra mis títulos como "Categoría: Título de categoría " en lugar de simplemente el título sin la "Categoría:" antepuesta.

Mi primer impulso fue anular get_the_archive_title()de wp-includes/general-template. Pero por lo que he leído, aparentemente no se supone que altere las cosas centrales de WordPress, incluso con anulaciones de un tema secundario.

Entonces, ¿cuál es la mejor forma de controlar la salida de the_archive_title()?

fildred13
fuente
Publique su solución como una respuesta separada. También puede aceptar el mío y aceptar el suyo si lo desea :-)
Pieter Goosen el
Vaya, pensé que borré esta edición. Su método terminó siendo mejor, así que quise eliminar el mío. Lo haré ahora.
fildred13

Respuestas:

40

Si observa el código fuente deget_the_archive_title() , verá que se proporciona un filtro llamado get_the_archive_title, a través del cual puede filtrar la salida de la función.

Puede usar lo siguiente para cambiar la salida en una página de categoría

add_filter( 'get_the_archive_title', function ( $title ) {

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});
Pieter Goosen
fuente
66
Esto no funciona en una página de archivo con un título de Archive: Books(donde Bookses un tipo de publicación personalizada). La single_cat_title()función solo devuelve un título de página si el tipo es una categoría o etiqueta . ¿Puede modificar su respuesta para incluir una solución que funcione con todos los tipos de contenido?
Quinn Comendant
@QuinnComendant Mire el código fuente, líneas 1239 y 1240 :-). Si tiene un problema, simplemente haga una nueva pregunta específica para su pregunta
Pieter Goosen el
1
Correcto, uno debe devolver un título alternativo para cada taxonomía o tipo de publicación para el que desean títulos diferentes. He publicado una respuesta que excluye los prefijos de todos los tipos.
Quinn Comendant
28

La respuesta aceptada funciona para eliminar el Category:prefijo de los títulos de archivo de categoría, pero no otros tipos de taxonomía o publicación. Para excluir otros prefijos, hay dos opciones:

  1. Reconstruya el título para todas las variantes utilizadas en la get_the_archive_title()función original :

    // Return an alternate title, without prefix, for every type used in the get_the_archive_title().
    add_filter('get_the_archive_title', function ($title) {
        if ( is_category() ) {
            $title = single_cat_title( '', false );
        } elseif ( is_tag() ) {
            $title = single_tag_title( '', false );
        } elseif ( is_author() ) {
            $title = '<span class="vcard">' . get_the_author() . '</span>';
        } elseif ( is_year() ) {
            $title = get_the_date( _x( 'Y', 'yearly archives date format' ) );
        } elseif ( is_month() ) {
            $title = get_the_date( _x( 'F Y', 'monthly archives date format' ) );
        } elseif ( is_day() ) {
            $title = get_the_date( _x( 'F j, Y', 'daily archives date format' ) );
        } elseif ( is_tax( 'post_format' ) ) {
            if ( is_tax( 'post_format', 'post-format-aside' ) ) {
                $title = _x( 'Asides', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-gallery' ) ) {
                $title = _x( 'Galleries', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-image' ) ) {
                $title = _x( 'Images', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-video' ) ) {
                $title = _x( 'Videos', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-quote' ) ) {
                $title = _x( 'Quotes', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-link' ) ) {
                $title = _x( 'Links', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-status' ) ) {
                $title = _x( 'Statuses', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-audio' ) ) {
                $title = _x( 'Audio', 'post format archive title' );
            } elseif ( is_tax( 'post_format', 'post-format-chat' ) ) {
                $title = _x( 'Chats', 'post format archive title' );
            }
        } elseif ( is_post_type_archive() ) {
            $title = post_type_archive_title( '', false );
        } elseif ( is_tax() ) {
            $title = single_term_title( '', false );
        } else {
            $title = __( 'Archives' );
        }
        return $title;
    });
  2. O simplemente elimine cualquier cosa que parezca un prefijo de título (que puede alterar los títulos reales que contienen una palabra seguida del carácter de dos puntos):

    // Simply remove anything that looks like an archive title prefix ("Archive:", "Foo:", "Bar:").
    add_filter('get_the_archive_title', function ($title) {
        return preg_replace('/^\w+: /', '', $title);
    });
Quinn Commandado
fuente
6

Podrías usar

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';
Andrei Gheorghiu
fuente
Esto no funciona en una página de archivo con un título de Archivo: Libros (donde Libros es un tipo de publicación personalizada).
Ese tipo brasileño
@ThatBrazilianGuy single_cat_titleusa single_term_titleinternamente, lo que también funciona en taxonomías. Asegúrese de que su tema no tenga una de las siguientes plantillas definidas: taxonomy-book.phpo taxonomy.php, porque tienen prioridad archive.php. Además, considere probar cualquiera de los métodos en las otras respuestas. Esta respuesta es bastante antigua, estaba funcionando bien en el momento en que la publiqué, pero ya no estoy desarrollando para WordPress.
Andrei Gheorghiu
6

Otra opción es:

<?php echo str_replace('Brand: ','',get_the_archive_title()); ?>

Reemplazar marca: con cualquier texto del que desee deshacerse.

Vale la pena analizar la diferencia entre get_the_archive_title () y the_archive_title () the_archive_title () devuelve una matriz get_the_archive_title () devuelve una cadena

rhysclay
fuente
the_archive_title () hace eco del título y get_the_archive_title () no, por lo que son básicamente lo mismo. Si necesita alterar el contenido, entonces usaría get.
Robert fue el
1

Ben Gillbanks tiene una buena solución que maneja todos los tipos de publicaciones y taxonomías:

function hap_hide_the_archive_title( $title ) {
// Skip if the site isn't LTR, this is visual, not functional.
// Should try to work out an elegant solution that works for both directions.
if ( is_rtl() ) {
    return $title;
}
// Split the title into parts so we can wrap them with spans.
$title_parts = explode( ': ', $title, 2 );
// Glue it back together again.
if ( ! empty( $title_parts[1] ) ) {
    $title = wp_kses(
        $title_parts[1],
        array(
            'span' => array(
                'class' => array(),
            ),
        )
    );
    $title = '<span class="screen-reader-text">' . esc_html( $title_parts[0] ) . ': </span>' . $title;
}
return $title;
}
add_filter( 'get_the_archive_title', 'hap_hide_the_archive_title' );
Dan Knauss
fuente
0

Puede usar post_type_archive_title()para obtener el título de un archivo sin el texto "Archivos:".

Mark Williams
fuente