如何定制_ARCHIVE_TITLE()?

时间:2015-01-24 作者:fildred13

在我的孩子主题中archive.php, 我有以下代码用于显示存档页面的标题:

    <?php
        the_archive_title( \'<h1 class="page-title">\', \'</h1>\' );
    ?>
但这会将我的标题显示为“Category:Category Title”,而不是简单地显示没有前置“Category:”的标题。

我的第一反应是get_the_archive_title() 从…起wp-includes/general-template. 但从我读到的内容来看,显然我不应该改变wordpress的核心内容,即使有来自子主题的覆盖。

那么,控制the_archive_title()?

6 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

如果你看the source code of get_the_archive_title(), 您将看到提供了一个名为get_the_archive_title, 通过它可以过滤函数的输出。

您可以使用以下内容更改类别页面上的输出

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

    if( is_category() ) {

        $title = single_cat_title( \'\', false );

    }

    return $title;

});

SO网友:Quinn Comendant

接受的答案可以删除Category: 来自类别存档标题的前缀,但不是其他分类法或帖子类型。要排除其他前缀,有两个选项:

为原始版本中使用的所有变体重建标题get_the_archive_title() 功能:

// 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;
});
或者,简单地去掉任何看起来像标题前缀的内容(这可能会改变实际标题,其中包含一个后跟冒号字符的单词):

// 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);
});

SO网友:rhysclay

另一种选择是:

<?php echo str_replace(\'Brand: \',\'\',get_the_archive_title()); ?>
替换品牌:用任何你想摆脱的文字。

值得研究get\\u the\\u archive\\u title()和the\\u archive\\u title()之间的区别the\\u archive\\u title()返回一个数组get\\u the\\u archive\\u title()返回一个字符串

SO网友:tao

You could use

echo \'<h1 class="page-title">\' . single_cat_title( \'\', false ) . \'</h1>\';
SO网友:Dan Knauss

本·吉尔班克斯has a nice solution 处理所有帖子类型和分类:

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\' );

SO网友:Mark Williams

您可以使用post_type_archive_title() 获取没有“存档:”文本的存档的标题。

结束

相关推荐

theme functions (hooks)

WordPress已经提出了这个问题,但没有答案。我只是想在这个论坛上试试,如果有人知道的话,因为我也有同样的问题。要使用jquery滑块编辑我的主题,如何转到该脚本?,显示“$主题->挂钩(\'content\\u before\');”在content div标记中。有人能帮忙吗?我的主题索引。php包含以下内容<div id=\"main\"> <?php $theme->hook(\'main_before\'); ?> &#x