如何更改存档标题以使用复数版本的分类标签而不是单数

时间:2017-09-24 16:05:53

标签: php wordpress wordpress-theming taxonomy

我有一个简单的Wordpress博客,有两个类别:slugs是'comment'和'press_release'。当我在任一类别的帖子的single.php页面上时,它应显示“评论”或“新闻稿”。当我在任何类别档案的archive.php上时,我想将其标题为“评论”或“新闻稿”。

我已将此代码添加到functions.php中,但它只会使整个网站在浏览器中显示为空白。

---更新的代码---

来自functions.php

$labels = array(
    'name'              => _x( 'Kommentare', 'taxonomy general name'),
    'singular_name'     => _x( 'Kommentar', 'taxonomy singular name'),
    'menu_name'         => __( 'Kommentare')
);

$labels = array(
    'name'              => _x( 'Pressemitteilungen', 'taxonomy general name'),
    'singular_name'     => _x( 'Pressemitteilung', 'taxonomy singular name'),
    'menu_name'         => __( 'Pressemitteilungen')
);

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

    if( is_tax() ) {
        $tax = get_taxonomy( get_queried_object()->taxonomy );
        /* use the "name" label instead of "singular_name" to showl the plural version */
        $title = sprintf( __( '%1$s: %2$s' ), 
                 $tax->labels->name, 
                 single_term_title( '', false ) );
    }
    return $title;
});

索引(对于复数版本),如archive.php

<?php if (have_posts()) : ?>

   <?php $post = $posts[0]; ?>

      <?php if (is_category()) { ?>

         <h2><?php echo get_the_archive_title(); ?></h2>

      <?php } elseif (is_author()) { ?>

         <h2><?php _e('Veröffentlicht von %s'); ?></h2>

   <?php } ?>

(但回应'Kategorie:Pressemitteilung'代替'Pressemitteilungen'。)

在单个帖子页面上,例如通常代码块中的single.php

<?php foreach((get_the_category()) as $category) { echo $category->cat_name; } ?>

--- END UPDED CODE ---

---新更新的代码---

add_action( 'init', 'create_taxonomies', 0 );
function create_taxonomies() {
    $labels = array(
        'name'          => _x( 'Pressemitteilungen', 'taxonomy general name'),
        'singular_name' => _x( 'Pressemitteilung', 'taxonomy singular name'),
        'menu_name'     => __( 'Pressemitteilungen')
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'pressemitteilung' )
    );

    register_taxonomy( 'pressemitteilung', array( 'post' ), $args );

        $labels = array(
            'name'              => _x( 'Kommentare', 'taxonomy general name'),
            'singular_name'     => _x( 'Kommentar', 'taxonomy singular name'),
            'menu_name'         => __( 'Kommentare')
        );

        $args = array(
            'hierarchical'      => true,
            'labels'            => $labels,
            'query_var'         => true,
            'rewrite'           => array( 'slug' => 'kommentar' )
        );

        register_taxonomy( 'kommentar', array( 'post' ), $args );
}

add_filter( 'get_the_archive_title', function ( $title ) {
    if( is_tax() ) {
        $tax = get_taxonomy( get_queried_object()->taxonomy );
        $title = sprintf( __( '%2$s' ),
                 $tax->labels->name,
                 single_term_title( '', false ) );
    }
    return $title;
});

---结束新的更新代码---

请注意,我不能通过在'%s'之后添加字母's'来“修复”它。我不能使用它,因为我想在德国博客上使用它,并且复数形式并非都是一致的(比如额外的)。

这是语法错误还是我完全错了?

1 个答案:

答案 0 :(得分:1)

WP默认使用单一标签进行分类法归档。

archive.php使用get_the_archive_title来显示标题,该标题使用singular_name,我们可以从get_the_archive_title的代码行中看到,该代码生成分类档案的标题:

 $title = sprintf( __( '%1$s: %2$s' ), 
         $tax->labels->singular_name, 
         single_term_title( '', false ) );

幸运的是,我们可以使用get_the_archive_title过滤器对其进行过滤。在我们的过滤功能中,我们需要 1.检查存档是否用于分类 2.如果是,请从查询对象中获取分类 3.以与get_the_archive_title函数相同的方式生成标题,但使用'name'而不是'singular_name'。

将此添加到您的functions.php以更改分类档案标题:

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

    if( is_tax() ) {
        $tax = get_taxonomy( get_queried_object()->taxonomy );
        /* use the "name" label instead of "singular_name" to showl the plural version */
        $title = sprintf( __( '%1$s: %2$s' ), 
                 $tax->labels->name, 
                 single_term_title( '', false ) );
    }
    return $title;
});

示例:

在您的问题中,您按如下方式定义了标签:

$labels = array(
    'name'              => _x( 'Comments', 'taxonomy general name'),
    'singular_name'     => _x( 'Comment', 'taxonomy singular name'),
    'menu_name'         => __( 'Comments')
);

默认情况下,WP会在档案中使用singular_name,即“评论”。上面的代码将其更改为使用name,即“评论”。

更改此选项以使用德语标签:

$labels = array(
    'name'              => _x( 'Kommentare', 'taxonomy general name'),
    'singular_name'     => _x( 'Kommentar', 'taxonomy singular name'),
    'menu_name'         => __( 'Kommentare')
);

上面的代码现在将使用“Kommentare”设置为name,而不是singular_name中的“Kommentar”。

更新:

以下是我添加到测试网站的完整代码,它可以运行:

的functions.php:

add_action( 'init', 'create_taxonomies', 0 );
function create_taxonomies() { 
    $labels = array(
        'name'          => _x( 'Pressemitteilungen', 'taxonomy general name'),
        'singular_name' => _x( 'Pressemitteilung', 'taxonomy singular name'),
        'menu_name'     => __( 'Pressemitteilungen')
    );

    $args = array(
        'hierarchical'      => true,
        'labels'            => $labels,
        'query_var'         => true,
        'rewrite'           => array( 'slug' => 'press_release' )
    );

    register_taxonomy( 'press_release', array( 'post' ), $args );    
}

add_filter( 'get_the_archive_title', function ( $title ) {
    if( is_tax() ) {
        $tax = get_taxonomy( get_queried_object()->taxonomy );
        $title = sprintf( __( '%1$s: %2$s' ), 
                 $tax->labels->name, 
                 single_term_title( '', false ) );
    }
    return $title;
});

archive.php

<?php if ( have_posts() ) : ?>
    <h1 class="page-title"><?php echo get_the_archive_title( ); ?></h1>
    [...]

我在WP管理员的testterm1分类中设置了一个测试词press_release,在mysite.com/press_release/testterm1 /

的归档页面中生成了HTML
<h1 class="page-title">Pressemitteilungen: test term1</h1>