web-dev-qa-db-fra.com

Comment personnaliser the_archive_title ()?

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 le "Catégorie:" ajouté.

Mon premier instinct a été de remplacer get_the_archive_title() à partir 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.

Alors, quel est le meilleur moyen de contrôler la sortie de the_archive_title()?

38
fildred13

Si vous regardez le code source de get_the_archive_title() , vous verrez qu’un filtre est fourni, appelé get_the_archive_title, à travers lequel vous pouvez filtrer la sortie de la fonction.

Vous pouvez utiliser ce qui suit pour changer 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;

});
37
Pieter Goosen

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 alors, supprimez simplement tout ce qui ressemble à un préfixe de titre (qui peut modifier les titres 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);
    });
    
28
Quinn Comendant

Vous pourriez utiliser

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';
6
Andrei Gheorghiu

Une autre option est:

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

Remplacer la marque: avec le texte dont vous souhaitez vous débarrasser.

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

6
rhysclay

Ben Gillbanks a une solution intéressante qui gère tous les types de postes et toutes les 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' );
0
Dan Knauss

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

0
Mark Williams