我的主题的archive.php中包含以下代码:

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


这给了我类似“类别:俄罗斯”,“标签:美国”,“作者:约翰”的标题“。

我想删除“类别:”,“标签:”和“作者:”部分,只显示类别,标签和作者名称。

有人知道如何做到这一点吗?

谢谢。

#1 楼

您可以扩展我在此答案中提到的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_tax() ) { //for custom post types
                $title = sprintf( __( '%1$s' ), single_term_title( '', false ) );
            } elseif (is_post_type_archive()) {
                $title = post_type_archive_title( '', false );
            }
        return $title;    
    });
 


评论


这样可行!谢谢,彼得!如果不太熟练的技术人员正在寻找相同的解决方案:将Pieter的代码添加到functions.php文件中就可以了!

–尼克
2015年2月27日在21:05



在子主题中执行此操作,以使您的更改不会在主题更新时丢失。

–于尔根·保罗(JürgenPaul)
16年8月19日在7:01

这很好用,但是缺少档案和自定义分类法的情况。

–JacobTheDev
16年11月23日在16:57

请参阅Ben Gillbanks对所有职位类型档案和分类法的解决方案。

– Dan Knauss
18年1月27日在5:54

刚刚添加了对CPT存档的支持:)

– Maxwell s.c
3月9日20:43

#2 楼

使用功能single_term_title()

评论


您可以在WP中以多种方式执行操作,但是我总是选择最简单的解决方案。谢谢蒂莫。

– f055
18年1月11日在14:22

嗯,这对并非所有术语的档案都无效。因此,我认为这不是一个很好的解决方案。

– GDY
19年4月5日在7:13

您能告诉@GDY,档案中应显示哪些非术语?

– Iggy
19/12/17在5:19

这给我返回“ null”,我应该设置什么设置吗?

– Marcello Perri
12月15日12:38

#3 楼

对于没有词的CPT标题:'Archive':

如果要为CPT构建自定义存档模板,并且只想输出CPT的标题而没有多余的词(如“ Archive”),请使用以下功能而是:

post_type_archive_title();


来自developer.wordpress.org

评论


很好-此功能正是我所需要的。请注意,第一个参数已经默认为空字符串,第二个参数默认为true,这将回显结果而不是返回结果...因此您可以仅使用post_type_archive_title()获得与echo完全相同的结果post_type_archive_title('' ,false)

– squarecandy
19/12/8在23:32

#4 楼

我觉得这太过简化了,但这就是我所做的...

<h1><?php echo str_replace("Archives: ", "", get_the_archive_title()); ?></h1>


评论


对于非英语网站来说,这是行不通的。

– Maxwell s.c
18年9月9日在15:50

#5 楼

echo '<h1 class="page-title">' . single_cat_title( '', false ) . '</h1>';
在taxonomy-category.php中不在主题公开范围之内。

#6 楼

我会使用过滤器并将其放在文件functions.php中。

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

   $title =  single_cat_title( '', false );
   return $title; 
}


评论


这是一个不错的解决方案,但实际上您应该在将$ title更新为single_cat_title之前检查is_category(),如果不是is_category(),则只需返回$ title不变即可。

–保罗501
8月20日22:53

#7 楼

您可以使用以下内容仅包含标题而没有前缀

single_cat_title();


评论


虽然是正确的,但之前在其他答案中已经建议过这一点。

–尼古拉
18-2-27在18:52

#8 楼

假设格式始终是:Prefix: Archive Name,我们可以使用带有PHP的substr()和strpos()函数的get_the_archive_title()来找到第一个冒号后跟一个空格,然后仅显示其后的内容。

<?php // Only show the portion of the string following the first ": "
  echo substr(get_the_archive_title(), strpos(get_the_archive_title(), ': ') + 2);
?>


#9 楼

目录:wp-includes

文件:general-template.php

查找功能:get_the_archive_title()
更改:

if ( is_category() ) {
        $title = sprintf( __( 'Category: %s' ), single_cat_title( '', false ) );
    } elseif ( is_tag() ) {
        $title = sprintf( __( 'Tag: %s' ), single_tag_title( '', false ) );
    } elseif ( is_author() ) {
        $title = sprintf( __( 'Autor: %s' ), '<span class="vcard">' . get_the_author() . '</span>' );
    }


到:

if ( is_category() ) {
        $title = sprintf( __( '%s' ), single_cat_title( '', false ) );
    } elseif ( is_tag() ) {
        $title = sprintf( __( '%s' ), single_tag_title( '', false ) );
    } elseif ( is_author() ) {
        $title = sprintf( __( '%s' ), '<span class="vcard">' . get_the_author() . '</span>' );
    }//if you want to remove or just change text if you need to


评论


错误,您是否真的建议在这里破解内核?

– cjbj
2016年9月6日下午13:42

这是一个非常非常糟糕的主意。如果不创建单独的分支,则无法立即更新。

– fuxia♦
2016年9月6日下午13:57

很抱歉,如果我中断了角色,我会一言不发,但这只是另一个解决方案,没有恶意。所以,您说我入侵了自己的网站,还是无法共享核心文件中的代码?

– Dragan Nikolic
16年9月6日在17:36

好吧,这是您的网站,您可以编辑任何内容-甚至是核心文件。但是,如果您更新Wordpress,网络将中断。

–浣熊
16-09-22在0:08