Comment personnaliser the_archive_title ()?

36

Dans le archive.php de mon thème enfant, j'ai le code suivant pour afficher le titre de mes pages d'archive:

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

Mais cela affiche mes titres comme "Catégorie: Titre de la catégorie " au lieu de simplement le titre sans la "Catégorie:" ajoutée au début.

Mon premier instinct a été de remplacer get_the_archive_title() de wp-includes/general-template . Mais d'après ce que j'ai lu, apparemment, je ne suis pas censé modifier les éléments centraux de wordpress, même avec des substitutions d'un thème enfant.

Quelle est donc la meilleure pratique pour contrôler la sortie de the_archive_title() ?

    
posée fildred13 24.01.2015 - 20:57

6 réponses

32

Si vous consultez le code source de get_the_archive_title() , vous verrez qu'il existe un filtre. fourni, appelé get_the_archive_title , à travers lequel vous pouvez filtrer la sortie de la fonction.

Vous pouvez utiliser ce qui suit pour modifier la sortie sur une page de catégorie

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});
    
réponse donnée Pieter Goosen 25.01.2015 - 04:36
25

La réponse acceptée fonctionne pour supprimer le préfixe Category: des titres d'archives de catégorie, mais pas d'autres types de taxonomie ou de publication. Pour exclure d'autres préfixes, il existe deux options:

  1. Reconstruisez le titre pour toutes les variantes utilisées dans la fonction get_the_archive_title() d'origine:

    // 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. Ou supprimez simplement tout ce qui ressemble à un préfixe de titre (qui peut modifier les titres réels contenant un mot suivi du caractère deux-points):

    // 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);
    });
    
réponse donnée Quinn Comendant 27.09.2015 - 20:49
6

Vous pouvez utiliser

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';
    
réponse donnée Andrei Gheorghiu 25.01.2015 - 03:23
6

Une autre option est:

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

Remplacer la marque: avec le texte que vous souhaitez supprimer.

Cela vaut la peine de regarder la différence entre get_the_archive_title () et the_archive_title () the_archive_title () retourne un tableau get_the_archive_title () retourne une chaîne

    
réponse donnée rhysclay 25.06.2015 - 06:18
0

Ben Gillbanks a une bonne solution qui gère tous les messages. types et taxonomies:

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' );
    
réponse donnée Dan Knauss 27.01.2018 - 06:52
0

Vous pouvez utiliser post_type_archive_title() pour obtenir le titre d'une archive sans le texte "Archives:".

    
réponse donnée Mark Williams 17.04.2018 - 17:23

Lire d'autres questions sur les étiquettes