diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php
index 65ab7ba0d7..c9feb504da 100644
--- a/src/wp-includes/taxonomy.php
+++ b/src/wp-includes/taxonomy.php
@@ -4131,16 +4131,20 @@ function get_term_link( $term, $taxonomy = '') {
* post without specifying the Post ID. You can also use it outside the Loop to
* display the taxonomies for a specific post.
*
- * The available defaults are:
- * 'post' : default is 0. The post ID to get taxonomies of.
- * 'before' : default is empty string. Display before taxonomies list.
- * 'sep' : default is empty string. Separate every taxonomy with value in this.
- * 'after' : default is empty string. Display this after the taxonomies list.
- * 'template' : The template to use for displaying the taxonomy terms.
- *
* @since 2.5.0
*
- * @param array $args Override the defaults.
+ * @param array $args {
+ * Arguments about which post to use and how to format the output.
+ *
+ * @type int|WP_Post $post Post ID or object to get taxonomies of. Default current post.
+ * @type string $before Displays before the taxonomies. Default empty string.
+ * @type string $sep Separates each taxonomy. Default is a space.
+ * @type string $after Displays after the taxonomies. Default empty string.
+ * @type string $template Template for displaying a taxonomy label and list of
+ * terms. Default is "Label: Terms."
+ * @type string $term_template Template for displaying a single term in the list.
+ * Default is the term name linked to its archive.
+ * }
*/
function the_taxonomies( $args = array() ) {
$defaults = array(
@@ -4148,8 +4152,10 @@ function the_taxonomies( $args = array() ) {
'before' => '',
'sep' => ' ',
'after' => '',
- /* translators: %s: taxonomy label, %l: list of term links */
- 'template' => __( '%s: %l.' )
+ /* translators: %s: taxonomy label, %l: list of terms formatted as per $term_template */
+ 'template' => __( '%s: %l.' ),
+ /* translators: %1$s: term link, %2$s: term name */
+ 'term_template' => '%2$s',
);
$r = wp_parse_args( $args, $defaults );
@@ -4173,8 +4179,10 @@ function get_the_taxonomies( $post = 0, $args = array() ) {
$post = get_post( $post );
$args = wp_parse_args( $args, array(
- /* translators: %s: taxonomy label, %l: list of term links */
+ /* translators: %s: taxonomy label, %l: list of terms formatted as per $term_template */
'template' => __( '%s: %l.' ),
+ /* translators: %1$s: term link, %2$s: term name */
+ 'term_template' => '%2$s',
) );
$taxonomies = array();
@@ -4194,6 +4202,9 @@ function get_the_taxonomies( $post = 0, $args = array() ) {
if ( empty( $t['template'] ) ) {
$t['template'] = $args['template'];
}
+ if ( empty( $t['term_template'] ) ) {
+ $t['term_template'] = $args['term_template'];
+ }
$terms = get_object_term_cache( $post->ID, $taxonomy );
if ( false === $terms ) {
@@ -4202,7 +4213,7 @@ function get_the_taxonomies( $post = 0, $args = array() ) {
$links = array();
foreach ( $terms as $term ) {
- $links[] = "$term->name";
+ $links[] = wp_sprintf( $t['term_template'], esc_attr( get_term_link( $term ) ), $term->name );
}
if ( $links ) {
$taxonomies[$taxonomy] = wp_sprintf( $t['template'], $t['label'], $links, $terms );
diff --git a/tests/phpunit/tests/taxonomy.php b/tests/phpunit/tests/taxonomy.php
index 1fd3cd356c..e7da80a5f7 100644
--- a/tests/phpunit/tests/taxonomy.php
+++ b/tests/phpunit/tests/taxonomy.php
@@ -49,6 +49,20 @@ class Tests_Taxonomy extends WP_UnitTestCase {
$this->assertEquals( array( 'category', 'post_tag' ), array_keys( $taxes ) );
}
+ /**
+ * @group 27238
+ */
+ public function test_get_the_taxonomies_term_template() {
+ $post_id = $this->factory->post->create();
+
+ $taxes = get_the_taxonomies( $post_id, array( 'term_template' => '%2$s' ) );
+ $this->assertEquals( 'Categories: Uncategorized.', $taxes['category'] );
+
+ $taxes = get_the_taxonomies( $post_id, array( 'term_template' => '%2$s' ) );
+ $link = get_category_link( 1 );
+ $this->assertEquals( 'Categories: Uncategorized.', $taxes['category'] );
+ }
+
function test_the_taxonomies() {
$post_id = $this->factory->post->create();
@@ -57,10 +71,24 @@ class Tests_Taxonomy extends WP_UnitTestCase {
$output = ob_get_clean();
$link = get_category_link( 1 );
- $expected = "Categories: Uncategorized.";
+ $expected = 'Categories: Uncategorized.';
$this->assertEquals( $expected, $output );
}
+ /**
+ * @group 27238
+ */
+ function test_the_taxonomies_term_template() {
+ $post_id = $this->factory->post->create();
+
+ $output = get_echo( 'the_taxonomies', array( array( 'post' => $post_id, 'term_template' => '%2$s' ) ) );
+ $this->assertEquals( 'Categories: Uncategorized.', $output );
+
+ $output = get_echo( 'the_taxonomies', array( array( 'post' => $post_id, 'term_template' => '%2$s' ) ) );
+ $link = get_category_link( 1 );
+ $this->assertEquals( 'Categories: Uncategorized.', $output );
+ }
+
function test_get_link_taxonomy() {
foreach ( get_object_taxonomies('link') as $taxonomy ) {
$tax = get_taxonomy($taxonomy);