snipt

Ctrl+h for KB shortcuts

PHP

WP Tags Dropdown

function dropdown_tag_cloud( $args = '' ) {
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC',
		'exclude' => '', 'include' => ''
	);
	$args = wp_parse_args( $args, $defaults );

	$tags = get_tags( array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags

	if ( empty($tags) )
		return;

	$return = dropdown_generate_tag_cloud( $tags, $args ); // Here's where those top tags get sorted according to $args
	if ( is_wp_error( $return ) )
		return false;
	else
		echo apply_filters( 'dropdown_tag_cloud', $return, $args );
}

function dropdown_generate_tag_cloud( $tags, $args = '' ) {
	global $wp_rewrite;
	$defaults = array(
		'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45,
		'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC'
	);
	$args = wp_parse_args( $args, $defaults );
	extract($args);

	if ( !$tags )
		return;
	$counts = $tag_links = array();
	foreach ( (array) $tags as $tag ) {
		$counts[$tag->name] = $tag->count;
		$tag_links[$tag->name] = get_tag_link( $tag->term_id );
		if ( is_wp_error( $tag_links[$tag->name] ) )
			return $tag_links[$tag->name];
		$tag_ids[$tag->name] = $tag->term_id;
	}

	$min_count = min($counts);
	$spread = max($counts) - $min_count;
	if ( $spread <= 0 )
		$spread = 1;
	$font_spread = $largest - $smallest;
	if ( $font_spread <= 0 )
		$font_spread = 1;
	$font_step = $font_spread / $spread;

	// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
	if ( 'name' == $orderby )
		uksort($counts, 'strnatcasecmp');
	else
		asort($counts);

	if ( 'DESC' == $order )
		$counts = array_reverse( $counts, true );

	$a = array();

	$rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' : '';

	foreach ( $counts as $tag => $count ) {
		$tag_id = $tag_ids[$tag];
		$tag_link = clean_url($tag_links[$tag]);
		$tag = str_replace(' ', '&nbsp;', wp_specialchars( $tag ));
		$a[] = "t<option value='$tag_link'>$tag ($count)</option>";
	}

	switch ( $format ) :
	case 'array' :
		$return =& $a;
		break;
	case 'list' :
		$return = "<ul class='wp-tag-cloud'>nt<li>";
		$return .= join("</li>nt<li>", $a);
		$return .= "</li>n</ul>n";
		break;
	default :
		$return = join("n", $a);
		break;
	endswitch;

	return apply_filters( 'dropdown_generate_tag_cloud', $return, $tags, $args );
}

/*************************************
* USAGE
******************************************/

<select name="tag-dropdown" onchange="document.location.href=this.options[this.selectedIndex].value;">
						<option value="#">Tag</option>
						<?php dropdown_tag_cloud('number=0&order=asc'); ?>
					</select>
https://snipt.net/embed/858f77daff0fe6c84875fda1ec868e1b/
/raw/858f77daff0fe6c84875fda1ec868e1b/
858f77daff0fe6c84875fda1ec868e1b
php
PHP
94
2019-08-22T05:28:56
True
False
False
Feb 26, 2014 at 07:37 AM
/api/public/snipt/116879/
wp-tags-dropdown
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#L-1"> 1</a> <a href="#L-2"> 2</a> <a href="#L-3"> 3</a> <a href="#L-4"> 4</a> <a href="#L-5"> 5</a> <a href="#L-6"> 6</a> <a href="#L-7"> 7</a> <a href="#L-8"> 8</a> <a href="#L-9"> 9</a> <a href="#L-10">10</a> <a href="#L-11">11</a> <a href="#L-12">12</a> <a href="#L-13">13</a> <a href="#L-14">14</a> <a href="#L-15">15</a> <a href="#L-16">16</a> <a href="#L-17">17</a> <a href="#L-18">18</a> <a href="#L-19">19</a> <a href="#L-20">20</a> <a href="#L-21">21</a> <a href="#L-22">22</a> <a href="#L-23">23</a> <a href="#L-24">24</a> <a href="#L-25">25</a> <a href="#L-26">26</a> <a href="#L-27">27</a> <a href="#L-28">28</a> <a href="#L-29">29</a> <a href="#L-30">30</a> <a href="#L-31">31</a> <a href="#L-32">32</a> <a href="#L-33">33</a> <a href="#L-34">34</a> <a href="#L-35">35</a> <a href="#L-36">36</a> <a href="#L-37">37</a> <a href="#L-38">38</a> <a href="#L-39">39</a> <a href="#L-40">40</a> <a href="#L-41">41</a> <a href="#L-42">42</a> <a href="#L-43">43</a> <a href="#L-44">44</a> <a href="#L-45">45</a> <a href="#L-46">46</a> <a href="#L-47">47</a> <a href="#L-48">48</a> <a href="#L-49">49</a> <a href="#L-50">50</a> <a href="#L-51">51</a> <a href="#L-52">52</a> <a href="#L-53">53</a> <a href="#L-54">54</a> <a href="#L-55">55</a> <a href="#L-56">56</a> <a href="#L-57">57</a> <a href="#L-58">58</a> <a href="#L-59">59</a> <a href="#L-60">60</a> <a href="#L-61">61</a> <a href="#L-62">62</a> <a href="#L-63">63</a> <a href="#L-64">64</a> <a href="#L-65">65</a> <a href="#L-66">66</a> <a href="#L-67">67</a> <a href="#L-68">68</a> <a href="#L-69">69</a> <a href="#L-70">70</a> <a href="#L-71">71</a> <a href="#L-72">72</a> <a href="#L-73">73</a> <a href="#L-74">74</a> <a href="#L-75">75</a> <a href="#L-76">76</a> <a href="#L-77">77</a> <a href="#L-78">78</a> <a href="#L-79">79</a> <a href="#L-80">80</a> <a href="#L-81">81</a> <a href="#L-82">82</a> <a href="#L-83">83</a> <a href="#L-84">84</a> <a href="#L-85">85</a> <a href="#L-86">86</a> <a href="#L-87">87</a> <a href="#L-88">88</a> <a href="#L-89">89</a> <a href="#L-90">90</a> <a href="#L-91">91</a> <a href="#L-92">92</a> <a href="#L-93">93</a> <a href="#L-94">94</a></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span id="L-1"><a name="L-1"></a><span class="x">function dropdown_tag_cloud( $args = &#39;&#39; ) {</span> </span><span id="L-2"><a name="L-2"></a><span class="x"> $defaults = array(</span> </span><span id="L-3"><a name="L-3"></a><span class="x"> &#39;smallest&#39; =&gt; 8, &#39;largest&#39; =&gt; 22, &#39;unit&#39; =&gt; &#39;pt&#39;, &#39;number&#39; =&gt; 45,</span> </span><span id="L-4"><a name="L-4"></a><span class="x"> &#39;format&#39; =&gt; &#39;flat&#39;, &#39;orderby&#39; =&gt; &#39;name&#39;, &#39;order&#39; =&gt; &#39;ASC&#39;,</span> </span><span id="L-5"><a name="L-5"></a><span class="x"> &#39;exclude&#39; =&gt; &#39;&#39;, &#39;include&#39; =&gt; &#39;&#39;</span> </span><span id="L-6"><a name="L-6"></a><span class="x"> );</span> </span><span id="L-7"><a name="L-7"></a><span class="x"> $args = wp_parse_args( $args, $defaults );</span> </span><span id="L-8"><a name="L-8"></a> </span><span id="L-9"><a name="L-9"></a><span class="x"> $tags = get_tags( array_merge($args, array(&#39;orderby&#39; =&gt; &#39;count&#39;, &#39;order&#39; =&gt; &#39;DESC&#39;)) ); // Always query top tags</span> </span><span id="L-10"><a name="L-10"></a> </span><span id="L-11"><a name="L-11"></a><span class="x"> if ( empty($tags) )</span> </span><span id="L-12"><a name="L-12"></a><span class="x"> return;</span> </span><span id="L-13"><a name="L-13"></a> </span><span id="L-14"><a name="L-14"></a><span class="x"> $return = dropdown_generate_tag_cloud( $tags, $args ); // Here&#39;s where those top tags get sorted according to $args</span> </span><span id="L-15"><a name="L-15"></a><span class="x"> if ( is_wp_error( $return ) )</span> </span><span id="L-16"><a name="L-16"></a><span class="x"> return false;</span> </span><span id="L-17"><a name="L-17"></a><span class="x"> else</span> </span><span id="L-18"><a name="L-18"></a><span class="x"> echo apply_filters( &#39;dropdown_tag_cloud&#39;, $return, $args );</span> </span><span id="L-19"><a name="L-19"></a><span class="x">}</span> </span><span id="L-20"><a name="L-20"></a> </span><span id="L-21"><a name="L-21"></a><span class="x">function dropdown_generate_tag_cloud( $tags, $args = &#39;&#39; ) {</span> </span><span id="L-22"><a name="L-22"></a><span class="x"> global $wp_rewrite;</span> </span><span id="L-23"><a name="L-23"></a><span class="x"> $defaults = array(</span> </span><span id="L-24"><a name="L-24"></a><span class="x"> &#39;smallest&#39; =&gt; 8, &#39;largest&#39; =&gt; 22, &#39;unit&#39; =&gt; &#39;pt&#39;, &#39;number&#39; =&gt; 45,</span> </span><span id="L-25"><a name="L-25"></a><span class="x"> &#39;format&#39; =&gt; &#39;flat&#39;, &#39;orderby&#39; =&gt; &#39;name&#39;, &#39;order&#39; =&gt; &#39;ASC&#39;</span> </span><span id="L-26"><a name="L-26"></a><span class="x"> );</span> </span><span id="L-27"><a name="L-27"></a><span class="x"> $args = wp_parse_args( $args, $defaults );</span> </span><span id="L-28"><a name="L-28"></a><span class="x"> extract($args);</span> </span><span id="L-29"><a name="L-29"></a> </span><span id="L-30"><a name="L-30"></a><span class="x"> if ( !$tags )</span> </span><span id="L-31"><a name="L-31"></a><span class="x"> return;</span> </span><span id="L-32"><a name="L-32"></a><span class="x"> $counts = $tag_links = array();</span> </span><span id="L-33"><a name="L-33"></a><span class="x"> foreach ( (array) $tags as $tag ) {</span> </span><span id="L-34"><a name="L-34"></a><span class="x"> $counts[$tag-&gt;name] = $tag-&gt;count;</span> </span><span id="L-35"><a name="L-35"></a><span class="x"> $tag_links[$tag-&gt;name] = get_tag_link( $tag-&gt;term_id );</span> </span><span id="L-36"><a name="L-36"></a><span class="x"> if ( is_wp_error( $tag_links[$tag-&gt;name] ) )</span> </span><span id="L-37"><a name="L-37"></a><span class="x"> return $tag_links[$tag-&gt;name];</span> </span><span id="L-38"><a name="L-38"></a><span class="x"> $tag_ids[$tag-&gt;name] = $tag-&gt;term_id;</span> </span><span id="L-39"><a name="L-39"></a><span class="x"> }</span> </span><span id="L-40"><a name="L-40"></a> </span><span id="L-41"><a name="L-41"></a><span class="x"> $min_count = min($counts);</span> </span><span id="L-42"><a name="L-42"></a><span class="x"> $spread = max($counts) - $min_count;</span> </span><span id="L-43"><a name="L-43"></a><span class="x"> if ( $spread &lt;= 0 )</span> </span><span id="L-44"><a name="L-44"></a><span class="x"> $spread = 1;</span> </span><span id="L-45"><a name="L-45"></a><span class="x"> $font_spread = $largest - $smallest;</span> </span><span id="L-46"><a name="L-46"></a><span class="x"> if ( $font_spread &lt;= 0 )</span> </span><span id="L-47"><a name="L-47"></a><span class="x"> $font_spread = 1;</span> </span><span id="L-48"><a name="L-48"></a><span class="x"> $font_step = $font_spread / $spread;</span> </span><span id="L-49"><a name="L-49"></a> </span><span id="L-50"><a name="L-50"></a><span class="x"> // SQL cannot save you; this is a second (potentially different) sort on a subset of data.</span> </span><span id="L-51"><a name="L-51"></a><span class="x"> if ( &#39;name&#39; == $orderby )</span> </span><span id="L-52"><a name="L-52"></a><span class="x"> uksort($counts, &#39;strnatcasecmp&#39;);</span> </span><span id="L-53"><a name="L-53"></a><span class="x"> else</span> </span><span id="L-54"><a name="L-54"></a><span class="x"> asort($counts);</span> </span><span id="L-55"><a name="L-55"></a> </span><span id="L-56"><a name="L-56"></a><span class="x"> if ( &#39;DESC&#39; == $order )</span> </span><span id="L-57"><a name="L-57"></a><span class="x"> $counts = array_reverse( $counts, true );</span> </span><span id="L-58"><a name="L-58"></a> </span><span id="L-59"><a name="L-59"></a><span class="x"> $a = array();</span> </span><span id="L-60"><a name="L-60"></a> </span><span id="L-61"><a name="L-61"></a><span class="x"> $rel = ( is_object($wp_rewrite) &amp;&amp; $wp_rewrite-&gt;using_permalinks() ) ? &#39; rel=&quot;tag&quot;&#39; : &#39;&#39;;</span> </span><span id="L-62"><a name="L-62"></a> </span><span id="L-63"><a name="L-63"></a><span class="x"> foreach ( $counts as $tag =&gt; $count ) {</span> </span><span id="L-64"><a name="L-64"></a><span class="x"> $tag_id = $tag_ids[$tag];</span> </span><span id="L-65"><a name="L-65"></a><span class="x"> $tag_link = clean_url($tag_links[$tag]);</span> </span><span id="L-66"><a name="L-66"></a><span class="x"> $tag = str_replace(&#39; &#39;, &#39;&amp;nbsp;&#39;, wp_specialchars( $tag ));</span> </span><span id="L-67"><a name="L-67"></a><span class="x"> $a[] = &quot;t&lt;option value=&#39;$tag_link&#39;&gt;$tag ($count)&lt;/option&gt;&quot;;</span> </span><span id="L-68"><a name="L-68"></a><span class="x"> }</span> </span><span id="L-69"><a name="L-69"></a> </span><span id="L-70"><a name="L-70"></a><span class="x"> switch ( $format ) :</span> </span><span id="L-71"><a name="L-71"></a><span class="x"> case &#39;array&#39; :</span> </span><span id="L-72"><a name="L-72"></a><span class="x"> $return =&amp; $a;</span> </span><span id="L-73"><a name="L-73"></a><span class="x"> break;</span> </span><span id="L-74"><a name="L-74"></a><span class="x"> case &#39;list&#39; :</span> </span><span id="L-75"><a name="L-75"></a><span class="x"> $return = &quot;&lt;ul class=&#39;wp-tag-cloud&#39;&gt;nt&lt;li&gt;&quot;;</span> </span><span id="L-76"><a name="L-76"></a><span class="x"> $return .= join(&quot;&lt;/li&gt;nt&lt;li&gt;&quot;, $a);</span> </span><span id="L-77"><a name="L-77"></a><span class="x"> $return .= &quot;&lt;/li&gt;n&lt;/ul&gt;n&quot;;</span> </span><span id="L-78"><a name="L-78"></a><span class="x"> break;</span> </span><span id="L-79"><a name="L-79"></a><span class="x"> default :</span> </span><span id="L-80"><a name="L-80"></a><span class="x"> $return = join(&quot;n&quot;, $a);</span> </span><span id="L-81"><a name="L-81"></a><span class="x"> break;</span> </span><span id="L-82"><a name="L-82"></a><span class="x"> endswitch;</span> </span><span id="L-83"><a name="L-83"></a> </span><span id="L-84"><a name="L-84"></a><span class="x"> return apply_filters( &#39;dropdown_generate_tag_cloud&#39;, $return, $tags, $args );</span> </span><span id="L-85"><a name="L-85"></a><span class="x">}</span> </span><span id="L-86"><a name="L-86"></a> </span><span id="L-87"><a name="L-87"></a><span class="x">/*************************************</span> </span><span id="L-88"><a name="L-88"></a><span class="x">* USAGE</span> </span><span id="L-89"><a name="L-89"></a><span class="x">******************************************/</span> </span><span id="L-90"><a name="L-90"></a> </span><span id="L-91"><a name="L-91"></a><span class="x">&lt;select name=&quot;tag-dropdown&quot; onchange=&quot;document.location.href=this.options[this.selectedIndex].value;&quot;&gt;</span> </span><span id="L-92"><a name="L-92"></a><span class="x"> &lt;option value=&quot;#&quot;&gt;Tag&lt;/option&gt;</span> </span><span id="L-93"><a name="L-93"></a><span class="x"> </span><span class="cp">&lt;?php</span> <span class="nx">dropdown_tag_cloud</span><span class="p">(</span><span class="s1">&#39;number=0&amp;order=asc&#39;</span><span class="p">);</span> <span class="cp">?&gt;</span><span class="x"></span> </span><span id="L-94"><a name="L-94"></a><span class="x"> &lt;/select&gt;</span> </span></pre></div> </td></tr></table>
"Tag Dropdown", Wordpress