我有一个简单的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'来“修复”它。我不能使用它,因为我想在德国博客上使用它,并且复数形式并非都是一致的(比如额外的)。
这是语法错误还是我完全错了?
答案 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 /
<h1 class="page-title">Pressemitteilungen: test term1</h1>