芯彤 發表於 2023-6-8 00:00:00

详解WordPress开发中wp_title()函数的用法

<p>
wp_title 函数在 WordPress 中是用来显示文章、页面、分类等等等等标题的一个函数,但在首页索引,该函数将不显示任何的东西。该函数在 WordPress 官方主题中一直被使用,但目前很多定制的主题中这个函数总是为忽视。</p>
<p>
<strong>函数意义详解</strong><br>
wp_title 函数用来显示页面的标题,如在文章页面,则显示文章标题;在分类页面,则显示分类名称,但在首页索引,该函数将不显示任何的东西。<br>
有点像 WordPress 中的 get_the_title 和 single_cat_title()这两个函数的自适应用法(自动判断是页面、文章还是分类、归档、标签)。</p>
<p>
<strong>函数声明</strong><br>
有点长,希望您能耐心看一遍,哪怕只有那么一遍。</p>
<div>
<div>
<div id="highlighter_648752">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
<div>
30</div>
<div>
31</div>
<div>
32</div>
<div>
33</div>
<div>
34</div>
<div>
35</div>
<div>
36</div>
<div>
37</div>
<div>
38</div>
<div>
39</div>
<div>
40</div>
<div>
41</div>
<div>
42</div>
<div>
43</div>
<div>
44</div>
<div>
45</div>
<div>
46</div>
<div>
47</div>
<div>
48</div>
<div>
49</div>
<div>
50</div>
<div>
51</div>
<div>
52</div>
<div>
53</div>
<div>
54</div>
<div>
55</div>
<div>
56</div>
<div>
57</div>
<div>
58</div>
<div>
59</div>
<div>
60</div>
<div>
61</div>
<div>
62</div>
<div>
63</div>
<div>
64</div>
<div>
65</div>
<div>
66</div>
<div>
67</div>
<div>
68</div>
<div>
69</div>
<div>
70</div>
<div>
71</div>
<div>
72</div>
<div>
73</div>
<div>
74</div>
<div>
75</div>
<div>
76</div>
<div>
77</div>
<div>
78</div>
<div>
79</div>
<div>
80</div>
<div>
81</div>
<div>
82</div>
<div>
83</div>
<div>
84</div>
<div>
85</div>
<div>
86</div>
<div>
87</div>
<div>
88</div>
<div>
89</div>
<div>
90</div>
<div>
91</div>
<div>
92</div>
<div>
93</div>
<div>
94</div>
<div>
95</div>
<div>
96</div>
<div>
97</div>
<div>
98</div>
<div>
99</div>
<div>
100</div>
<div>
101</div>
<div>
102</div>
<div>
103</div>
<div>
104</div>
<div>
105</div>
<div>
106</div>
<div>
107</div>
<div>
108</div>
<div>
109</div>
<div>
110</div>
<div>
111</div>
<div>
112</div>
</td>
<td>
<div>
<div>
<code>/**</code>
</div>
<div>
<code> </code><code>* Display or retrieve page title for all areas of blog.</code>
</div>
<div>
<code> </code><code>*</code>
</div>
<div>
<code> </code><code>* By default, the page title will display the separator before the page title,</code>
</div>
<div>
<code> </code><code>* so that the blog title will be before the page title. This is not good for</code>
</div>
<div>
<code> </code><code>* title display, since the blog title shows up on most tabs and not what is</code>
</div>
<div>
<code> </code><code>* important, which is the page that the user is looking at.</code>
</div>
<div>
<code> </code><code>*</code>
</div>
<div>
<code> </code><code>* There are also SEO benefits to having the blog title after or to the 'right'</code>
</div>
<div>
<code> </code><code>* or the page title. However, it is mostly common sense to have the blog title</code>
</div>
<div>
<code> </code><code>* to the right with most browsers supporting tabs. You can achieve this by</code>
</div>
<div>
<code> </code><code>* using the seplocation parameter and setting the value to 'right'. This change</code>
</div>
<div>
<code> </code><code>* was introduced around 2.5.0, in case backwards compatibility of themes is</code>
</div>
<div>
<code> </code><code>* important.</code>
</div>
<div>
<code> </code><code>*</code>
</div>
<div>
<code> </code><code>* @since 1.0.0</code>
</div>
<div>
<code> </code><code>*</code>
</div>
<div>
<code> </code><code>* @param string $sep Optional, default is '&amp;raquo;'. How to separate the various items within the page title.</code>
</div>
<div>
<code> </code><code>* @param bool $display Optional, default is true. Whether to display or retrieve title.</code>
</div>
<div>
<code> </code><code>* @param string $seplocation Optional. Direction to display title, 'right'.</code>
</div>
<div>
<code> </code><code>* @return string|null String on retrieve, null when displaying.</code>
</div>
<div>
<code> </code><code>*/</code>
</div>
<div>
<code>function</code> <code>wp_title(</code><code>$sep</code> <code>= </code><code>'&amp;raquo;'</code><code>, </code><code>$display</code> <code>= true, </code><code>$seplocation</code> <code>= </code><code>''</code><code>) {</code>
</div>
<div>
<code>global</code> <code>$wpdb</code><code>, </code><code>$wp_locale</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>$m</code> <code>= get_query_var(</code><code>'m'</code><code>);</code>
</div>
<div>
<code>$year</code> <code>= get_query_var(</code><code>'year'</code><code>);</code>
</div>
<div>
<code>$monthnum</code> <code>= get_query_var(</code><code>'monthnum'</code><code>);</code>
</div>
<div>
<code>$day</code> <code>= get_query_var(</code><code>'day'</code><code>);</code>
</div>
<div>
<code>$search</code> <code>= get_query_var(</code><code>'s'</code><code>);</code>
</div>
<div>
<code>$title</code> <code>= </code><code>''</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>$t_sep</code> <code>= </code><code>'%WP_TITILE_SEP%'</code><code>; </code><code>// Temporary separator, for accurate flipping, if necessary</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there is a post</code>
</div>
<div>
<code>if</code> <code>( is_single() || ( is_home() &amp;&amp; !is_front_page() ) || ( is_page() &amp;&amp; !is_front_page() ) ) {</code>
</div>
<div>
<code> </code><code>$title</code> <code>= single_post_title( </code><code>''</code><code>, false );</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there's a category or tag</code>
</div>
<div>
<code>if</code> <code>( is_category() || is_tag() ) {</code>
</div>
<div>
<code> </code><code>$title</code> <code>= single_term_title( </code><code>''</code><code>, false );</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there's a taxonomy</code>
</div>
<div>
<code>if</code> <code>( is_tax() ) {</code>
</div>
<div>
<code> </code><code>$term</code> <code>= get_queried_object();</code>
</div>
<div>
<code> </code><code>$tax</code> <code>= get_taxonomy( </code><code>$term</code><code>-&gt;taxonomy );</code>
</div>
<div>
<code> </code><code>$title</code> <code>= single_term_title( </code><code>$tax</code><code>-&gt;labels-&gt;name . </code><code>$t_sep</code><code>, false );</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there's an author</code>
</div>
<div>
<code>if</code> <code>( is_author() ) {</code>
</div>
<div>
<code> </code><code>$author</code> <code>= get_queried_object();</code>
</div>
<div>
<code> </code><code>$title</code> <code>= </code><code>$author</code><code>-&gt;display_name;</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there's a post type archive</code>
</div>
<div>
<code>if</code> <code>( is_post_type_archive() )</code>
</div>
<div>
<code> </code><code>$title</code> <code>= post_type_archive_title( </code><code>''</code><code>, false );</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there's a month</code>
</div>
<div>
<code>if</code> <code>( is_archive() &amp;&amp; !</code><code>empty</code><code>(</code><code>$m</code><code>) ) {</code>
</div>
<div>
<code> </code><code>$my_year</code> <code>= </code><code>substr</code><code>(</code><code>$m</code><code>, 0, 4);</code>
</div>
<div>
<code> </code><code>$my_month</code> <code>= </code><code>$wp_locale</code><code>-&gt;get_month(</code><code>substr</code><code>(</code><code>$m</code><code>, 4, 2));</code>
</div>
<div>
<code> </code><code>$my_day</code> <code>= </code><code>intval</code><code>(</code><code>substr</code><code>(</code><code>$m</code><code>, 6, 2));</code>
</div>
<div>
<code> </code><code>$title</code> <code>= </code><code>$my_year</code> <code>. ( </code><code>$my_month</code> <code>? </code><code>$t_sep</code> <code>. </code><code>$my_month</code> <code>: </code><code>''</code> <code>) . ( </code><code>$my_day</code> <code>? </code><code>$t_sep</code> <code>. </code><code>$my_day</code> <code>: </code><code>''</code> <code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If there's a year</code>
</div>
<div>
<code>if</code> <code>( is_archive() &amp;&amp; !</code><code>empty</code><code>(</code><code>$year</code><code>) ) {</code>
</div>
<div>
<code> </code><code>$title</code> <code>= </code><code>$year</code><code>;</code>
</div>
<div>
<code> </code><code>if</code> <code>( !</code><code>empty</code><code>(</code><code>$monthnum</code><code>) )</code>
</div>
<div>
<code> </code><code>$title</code> <code>.= </code><code>$t_sep</code> <code>. </code><code>$wp_locale</code><code>-&gt;get_month(</code><code>$monthnum</code><code>);</code>
</div>
<div>
<code> </code><code>if</code> <code>( !</code><code>empty</code><code>(</code><code>$day</code><code>) )</code>
</div>
<div>
<code> </code><code>$title</code> <code>.= </code><code>$t_sep</code> <code>. zeroise(</code><code>$day</code><code>, 2);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If it's a search</code>
</div>
<div>
<code>if</code> <code>( is_search() ) {</code>
</div>
<div>
<code> </code><code>/* translators: 1: separator, 2: search phrase */</code>
</div>
<div>
<code>$title</code> <code>= sprintf(__(</code><code>'Search Results %1$s %2$s'</code><code>), </code><code>$t_sep</code><code>, </code><code>strip_tags</code><code>(</code><code>$search</code><code>));</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// If it's a 404 page</code>
</div>
<div>
<code>if</code> <code>( is_404() ) {</code>
</div>
<div>
<code> </code><code>$title</code> <code>= __(</code><code>'Page not found'</code><code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>$prefix</code> <code>= </code><code>''</code><code>;</code>
</div>
<div>
<code>if</code> <code>( !</code><code>empty</code><code>(</code><code>$title</code><code>) )</code>
</div>
<div>
<code> </code><code>$prefix</code> <code>= </code><code>" $sep "</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// Determines position of the separator and direction of the breadcrumb</code>
</div>
<div>
<code>if</code> <code>( </code><code>'right'</code> <code>== </code><code>$seplocation</code> <code>) { </code><code>// sep on right, so reverse the order</code>
</div>
<div>
<code>$title_array</code> <code>= </code><code>explode</code><code>( </code><code>$t_sep</code><code>, </code><code>$title</code> <code>);</code>
</div>
<div>
<code>$title_array</code> <code>= </code><code>array_reverse</code><code>( </code><code>$title_array</code> <code>);</code>
</div>
<div>
<code>$title</code> <code>= implode( </code><code>" $sep "</code><code>, </code><code>$title_array</code> <code>) . </code><code>$prefix</code><code>;</code>
</div>
<div>
<code>} </code><code>else</code> <code>{</code>
</div>
<div>
<code> </code><code>$title_array</code> <code>= </code><code>explode</code><code>( </code><code>$t_sep</code><code>, </code><code>$title</code> <code>);</code>
</div>
<div>
<code> </code><code>$title</code> <code>= </code><code>$prefix</code> <code>. implode( </code><code>" $sep "</code><code>, </code><code>$title_array</code> <code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>$title</code> <code>= apply_filters(</code><code>'wp_title'</code><code>, </code><code>$title</code><code>, </code><code>$sep</code><code>, </code><code>$seplocation</code><code>);</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>// Send it out</code>
</div>
<div>
<code> </code><code>if</code> <code>( </code><code>$display</code> <code>)</code>
</div>
<div>
<code> </code><code>echo</code> <code>$title</code><code>;</code>
</div>
<div>
<code> </code><code>else</code>
</div>
<div>
<code> </code><code>return</code> <code>$title</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>用法</strong></p>
<div>
<div>
<div id="highlighter_915320">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php wp_title( </code><code>$sep</code><code>, </code><code>$echo</code><code>, </code><code>$seplocation</code> <code>); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
<strong>参数详解</strong></p>
<ul>
<li>
$sep:分隔符;</li>
<li>
$echo:是否显示;</li>
<li>
$seplocation:分隔符所在位置(左还是右,只接受'right',如果不是right自动判定为左)</li>
</ul>
<p>
<strong>总结</strong></p>
<p>
WordPress 中相同功能的函数有很多,都是从基层到高级不断的经过封装最后到达使用层的,当然如果我们需要一些灵活用法的话,我们可以直接用中间那层的函数,如果我们懒的话我们可以直接使用最高级的那层函数,诸如本函数 wp_title ,其实这个函数我们从源代码来看, wp 替我们针对 分类、标签、文章、归档、作者、页面等多种类型的页面进行了判断,并根据不同页面调用不同的标题函数来达到目的。<br>
如果有时间,您可以对下面几个函数进行深入研究一下,一遍更灵活的进行seo<br>
single_post_title 文章页面提取标题的函数<br>
single_term_title tag(标签)、cat(分类)、日期、提取标题的函数 类似于 single_cat_title()函数<br>
get_queried_object 作者页面提取对象的函数(对象中有作者名)<br>
post_type_archive_title()规档等等提取标题的函数<br>
还等什么?<br>
GO GO GO !</p>
頁: [1]
查看完整版本: 详解WordPress开发中wp_title()函数的用法