<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[30209] trunk: Introduce `term_template` param to `get_the_taxonomies()`.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/30209">30209</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/30209","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>boonebgorges</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2014-11-03 18:48:42 +0000 (Mon, 03 Nov 2014)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Introduce `term_template` param to `get_the_taxonomies()`.

This parameter allows theme and plugin authors to specify the formatting they
would like on the term links as they are parsed into the taxonomy list.

Props hereswhatidid, dlh, davidjlaietta.
See <a href="https://core.trac.wordpress.org/ticket/27238">#27238</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludestaxonomyphp">trunk/src/wp-includes/taxonomy.php</a></li>
<li><a href="#trunktestsphpunitteststaxonomyphp">trunk/tests/phpunit/tests/taxonomy.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludestaxonomyphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/taxonomy.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/taxonomy.php        2014-11-03 17:00:06 UTC (rev 30208)
+++ trunk/src/wp-includes/taxonomy.php  2014-11-03 18:48:42 UTC (rev 30209)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4131,16 +4131,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">  * post without specifying the Post ID. You can also use it outside the Loop to
</span><span class="cx" style="display: block; padding: 0 10px">  * display the taxonomies for a specific post.
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * 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.
- *
</del><span class="cx" style="display: block; padding: 0 10px">  * @since 2.5.0
</span><span class="cx" style="display: block; padding: 0 10px">  *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">- * @param array $args Override the defaults.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ * @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.
+ * }
</ins><span class="cx" style="display: block; padding: 0 10px">  */
</span><span class="cx" style="display: block; padding: 0 10px"> function the_taxonomies( $args = array() ) {
</span><span class="cx" style="display: block; padding: 0 10px">        $defaults = array(
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4148,8 +4152,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                'before' => '',
</span><span class="cx" style="display: block; padding: 0 10px">                'sep' => ' ',
</span><span class="cx" style="display: block; padding: 0 10px">                'after' => '',
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                /* translators: %s: taxonomy label, %l: list of term links */
-               'template' => __( '%s: %l.' )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         /* 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' => '<a href="%1$s">%2$s</a>',
</ins><span class="cx" style="display: block; padding: 0 10px">         );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $r = wp_parse_args( $args, $defaults );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4173,8 +4179,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">        $post = get_post( $post );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $args = wp_parse_args( $args, array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                /* translators: %s: taxonomy label, %l: list of term links */
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         /* translators: %s: taxonomy label, %l: list of terms formatted as per $term_template */
</ins><span class="cx" style="display: block; padding: 0 10px">                 'template' => __( '%s: %l.' ),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                /* translators: %1$s: term link, %2$s: term name */
+               'term_template' => '<a href="%1$s">%2$s</a>',
</ins><span class="cx" style="display: block; padding: 0 10px">         ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        $taxonomies = array();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4194,6 +4202,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">                if ( empty( $t['template'] ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $t['template'] = $args['template'];
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                if ( empty( $t['term_template'] ) ) {
+                       $t['term_template'] = $args['term_template'];
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $terms = get_object_term_cache( $post->ID, $taxonomy );
</span><span class="cx" style="display: block; padding: 0 10px">                if ( false === $terms ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -4202,7 +4213,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $links = array();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                foreach ( $terms as $term ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        $links[] = "<a href='" . esc_attr( get_term_link( $term ) ) . "'>$term->name</a>";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 $links[] = wp_sprintf( $t['term_template'], esc_attr( get_term_link( $term ) ), $term->name );
</ins><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $links ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $taxonomies[$taxonomy] = wp_sprintf( $t['template'], $t['label'], $links, $terms );
</span></span></pre></div>
<a id="trunktestsphpunitteststaxonomyphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/taxonomy.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/taxonomy.php    2014-11-03 17:00:06 UTC (rev 30208)
+++ trunk/tests/phpunit/tests/taxonomy.php      2014-11-03 18:48:42 UTC (rev 30209)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -49,6 +49,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $this->assertEquals( array( 'category', 'post_tag' ), array_keys( $taxes ) );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        /**
+        * @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' => '<span class="foo"><a href="%1$s">%2$s</a></span>' ) );
+               $link = get_category_link( 1 );
+               $this->assertEquals( 'Categories: <span class="foo"><a href="' . $link . '">Uncategorized</a></span>.', $taxes['category'] );
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function test_the_taxonomies() {
</span><span class="cx" style="display: block; padding: 0 10px">                $post_id = $this->factory->post->create();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -57,10 +71,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $output = ob_get_clean();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $link = get_category_link( 1 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $expected = "Categories: <a href='$link'>Uncategorized</a>.";
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $expected = 'Categories: <a href="' . $link . '">Uncategorized</a>.';
</ins><span class="cx" style="display: block; padding: 0 10px">                 $this->assertEquals( $expected, $output );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        /**
+        * @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' => '<span class="foo"><a href="%1$s">%2$s</a></span>' ) ) );
+               $link = get_category_link( 1 );
+               $this->assertEquals( 'Categories: <span class="foo"><a href="' . $link . '">Uncategorized</a></span>.', $output );
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         function test_get_link_taxonomy() {
</span><span class="cx" style="display: block; padding: 0 10px">                foreach ( get_object_taxonomies('link') as $taxonomy ) {
</span><span class="cx" style="display: block; padding: 0 10px">                        $tax = get_taxonomy($taxonomy);
</span></span></pre>
</div>
</div>

</body>
</html>