it-swarm.com.de

Wie kann ich den_archive_title () anpassen?

Im archive.php meines Kinderthemas habe ich den folgenden Code zum Anzeigen des Titels meiner Archivseiten:

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

Aber das zeigt meine Titel als "Kategorie: Kategorie Titel " anstatt einfach den Titel ohne das vorangestellte "Kategorie:".

Mein erster Instinkt war, get_the_archive_title() von wp-includes/general-template zu überschreiben. Aber nach dem, was ich gelesen habe, soll ich anscheinend nie das Kernmaterial von WordPress ändern, auch nicht mit Überschreibungen von einem Kinderthema.

Was ist die beste Methode, um die Ausgabe von the_archive_title() zu steuern?

38
fildred13

Wenn Sie sich den Quellcode von get_the_archive_title() ansehen, werden Sie feststellen, dass ein Filter namens get_the_archive_title mitgeliefert wird, über den Sie die Ausgabe der Funktion filtern können.

Sie können Folgendes verwenden, um die Ausgabe auf einer Kategorieseite zu ändern

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

    if( is_category() ) {

        $title = single_cat_title( '', false );

    }

    return $title;

});
37
Pieter Goosen

Die akzeptierte Antwort entfernt das Präfix Category: aus den Titeln des Kategoriearchivs, jedoch nicht aus anderen Taxonomie- oder Beitragstypen. Um andere Präfixe auszuschließen, gibt es zwei Möglichkeiten:

  1. Erstellen Sie den Titel für alle in der ursprünglichen Funktion get_the_archive_title() verwendeten Varianten neu:

    // 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. Oder entfernen Sie einfach alles, was wie ein Titelpräfix aussieht (was tatsächliche Titel verändern kann, die ein Wort gefolgt vom Doppelpunkt enthalten):

    // 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

Du könntest benutzen

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

Eine andere Option ist:

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

Marke ersetzen: mit dem Text, den Sie entfernen möchten.

Es lohnt sich, den Unterschied zwischen get_the_archive_title () und the_archive_title () zu untersuchen. The_archive_title () gibt ein Array zurück. Get_the_archive_title () gibt einen String zurück

6
rhysclay

Ben Gillbanks hat eine nette Lösung die alle Post-Typen und Taxonomien handhabt:

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

Sie können post_type_archive_title() verwenden, um den Titel eines Archivs ohne den Text "Archives:" abzurufen.

0
Mark Williams