无限流 發表於 2023-7-6 00:00:00

WordPress中获取页面链接和标题的相关PHP函数用法解析

<p>
<strong>get_permalink()(获取文章或页面链接)</strong><br>
get_permalink() 用来根据固定连接返回文章或者页面的链接。在获取链接时 get_permalink() 函数需要知道要获取的文章的 ID,如果在循环中则自动默认使用当前文章。</p>
<p>
用法</p>
<div>
<div>
<div id="highlighter_685329">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>get_permalink( </code><code>$id</code><code>, </code><code>$leavename</code> <code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
参数</p>
<p>
$id</p>
<p>
(混合)(可选)文章或者页面的 ID(整数);还可以是文章对象。</p>
<p>
默认值:在循环中自动调用当前的文章</p>
<p>
$leavename</p>
<p>
(布尔)(可选)转化成链接是是否忽略文章别名。如果设置成 True,那么将返回 http://www.example.com/%postname% 而不是 http://www.example.com/my-post-name</p>
<p>
默认值:None</p>
<p>
返回值</p>
<p>
(字符串 | 布尔)成功获取链接则返回链接,失败则返回 False.</p>
<p>
例子</p>
<p>
根据 ID 获取文章或页面的链接:</p>
<div>
<div>
<div id="highlighter_556709">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;a href=</code><code>"&lt;?php echo get_permalink( 268 ); ?&gt;"</code><code>&gt;获取指定 ID 的文章或页面链接&lt;/a&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
循环中获取当前文章的链接:</p>
<div>
<div>
<div id="highlighter_692676">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;?php </code><code>echo</code> <code>get_permalink(); ?&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
根据页面标题获取页面链接:</p>
<div>
<div>
<div id="highlighter_103428">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;a href=</code><code>"&lt;?php echo esc_url( get_permalink( get_page_by_title( '留言板' ) ) ); ?&gt;"</code><code>&gt;留言板&lt;/a&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
其它</p>
<p>
此函数位于:wp-includes/link-template.php</p>
<p>
<strong>wp_title()(获取网页标题)</strong><br>
wp_title() 用来获取当前网页的标题,也就是 title 标签里边的内容。</p>
<p>
wp_title() 能在不同的页面自动生成不同的标题(比如首页就是网站标题、文章页就是文章标题)。WordPress 官方的主题都在使用这个函数生成标题,但是在国内的主题中却总是被忽视(因为默认情况下这个函数对 SEO 并不是太好)。</p>
<p>
我还是推荐使用这个函数调用标题,更加符合主题开发规范,如果你要让他变的更加符合 SEO,可以使用过滤器优化一下,本文结尾有优化方法。</p>
<p>
用法</p>
<div>
<div>
<div id="highlighter_393098">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>wp_title( </code><code>$sep</code><code>, </code><code>$display</code><code>, </code><code>$seplocation</code> <code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
参数</p>
<p>
$sep</p>
<p>
(字符串)(可选)标题内容的分隔符,一般设置成 “|” 或者 “-”。</p>
<p>
默认值:&amp;raquo;(»)</p>
<p>
$display</p>
<p>
(布尔)(可选)是否直接打印标题,如果设置成 False 则返回标题,可以存储到变量里。</p>
<p>
默认值:True(直接打印输出)</p>
<p>
$seplocation</p>
<p>
(字符串)(可选)分隔符所在位置,左边还是右边,如果传递 “right” 则为右边,其它任何内容都是左边。</p>
<p>
默认值:空字符串(左边)</p>
<p>
返回值</p>
<p>
(字符串)如果 $display 参数设置成 False,才能返回标题的内容,根据不同的标题会返回不同的内容,默认情况下返回的内容是这样的:</p>
<ul>
<li>
文章页:文章标题</li>
<li>
日期页:日期</li>
<li>
分类页:分类标题</li>
<li>
作者页:作者名字</li>
</ul>
<p>
如果你想更加详细的了解,可以阅读下边的函数源码:</p>
<p>
 </p>
<div>
<div>
<div id="highlighter_937511">
<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>
<div>
113</div>
<div>
114</div>
<div>
115</div>
<div>
116</div>
<div>
117</div>
<div>
118</div>
<div>
119</div>
<div>
120</div>
<div>
121</div>
<div>
122</div>
<div>
123</div>
<div>
124</div>
<div>
125</div>
<div>
126</div>
<div>
127</div>
<div>
128</div>
<div>
129</div>
<div>
130</div>
<div>
131</div>
<div>
132</div>
<div>
133</div>
<div>
134</div>
<div>
135</div>
<div>
136</div>
<div>
137</div>
<div>
138</div>
<div>
139</div>
<div>
140</div>
<div>
141</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 '»'. 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>'»'</code><code>, </code><code>$display</code> <code>= true, </code><code>$seplocation</code> <code>= </code><code>''</code><code>) {</code>
</div>
<div>
<code>  </code><code>global</code> <code>$wp_locale</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>$m</code> <code>= get_query_var(</code><code>'m'</code><code>);</code>
</div>
<div>
<code>  </code><code>$year</code> <code>= get_query_var(</code><code>'year'</code><code>);</code>
</div>
<div>
<code>  </code><code>$monthnum</code> <code>= get_query_var(</code><code>'monthnum'</code><code>);</code>
</div>
<div>
<code>  </code><code>$day</code> <code>= get_query_var(</code><code>'day'</code><code>);</code>
</div>
<div>
<code>  </code><code>$search</code> <code>= get_query_var(</code><code>'s'</code><code>);</code>
</div>
<div>
<code>  </code><code>$title</code> <code>= </code><code>''</code><code>;</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><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>  </code><code>// If there is a post</code>
</div>
<div>
<code>  </code><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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If there's a post type archive</code>
</div>
<div>
<code>  </code><code>if</code> <code>( is_post_type_archive() ) {</code>
</div>
<div>
<code>    </code><code>$post_type</code> <code>= get_query_var( </code><code>'post_type'</code> <code>);</code>
</div>
<div>
<code>    </code><code>if</code> <code>( </code><code>is_array</code><code>( </code><code>$post_type</code> <code>) )</code>
</div>
<div>
<code>      </code><code>$post_type</code> <code>= reset( </code><code>$post_type</code> <code>);</code>
</div>
<div>
<code>    </code><code>$post_type_object</code> <code>= get_post_type_object( </code><code>$post_type</code> <code>);</code>
</div>
<div>
<code>    </code><code>if</code> <code>( ! </code><code>$post_type_object</code><code>-&gt;has_archive )</code>
</div>
<div>
<code>      </code><code>$title</code> <code>= post_type_archive_title( </code><code>''</code><code>, false );</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If there's a category or tag</code>
</div>
<div>
<code>  </code><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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If there's a taxonomy</code>
</div>
<div>
<code>  </code><code>if</code> <code>( is_tax() ) {</code>
</div>
<div>
<code>    </code><code>$term</code> <code>= get_queried_object();</code>
</div>
<div>
<code>    </code><code>if</code> <code>( </code><code>$term</code> <code>) {</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><code>}</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If there's an author</code>
</div>
<div>
<code>  </code><code>if</code> <code>( is_author() &amp;&amp; ! is_post_type_archive() ) {</code>
</div>
<div>
<code>    </code><code>$author</code> <code>= get_queried_object();</code>
</div>
<div>
<code>    </code><code>if</code> <code>( </code><code>$author</code> <code>)</code>
</div>
<div>
<code>      </code><code>$title</code> <code>= </code><code>$author</code><code>-&gt;display_name;</code>
</div>
<div>
<code>  </code><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// Post type archives with has_archive should override terms.</code>
</div>
<div>
<code>  </code><code>if</code> <code>( is_post_type_archive() &amp;&amp; </code><code>$post_type_object</code><code>-&gt;has_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>  </code><code>// If there's a month</code>
</div>
<div>
<code>  </code><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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If there's a year</code>
</div>
<div>
<code>  </code><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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If it's a search</code>
</div>
<div>
<code>  </code><code>if</code> <code>( is_search() ) {</code>
</div>
<div>
<code>    </code><code>/* translators: 1: separator, 2: search phrase */</code>
</div>
<div>
<code>    </code><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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>// If it's a 404 page</code>
</div>
<div>
<code>  </code><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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>$prefix</code> <code>= </code><code>''</code><code>;</code>
</div>
<div>
<code>  </code><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>  </code><code>/**</code>
</div>
<div>
<code>   </code><code>* Filter the parts of the page title.</code>
</div>
<div>
<code>   </code><code>*</code>
</div>
<div>
<code>   </code><code>* @since 4.0.0</code>
</div>
<div>
<code>   </code><code>*</code>
</div>
<div>
<code>   </code><code>* @param array $title_array Parts of the page title.</code>
</div>
<div>
<code>   </code><code>*/</code>
</div>
<div>
<code>  </code><code>$title_array</code> <code>= apply_filters( </code><code>'wp_title_parts'</code><code>, </code><code>explode</code><code>( </code><code>$t_sep</code><code>, </code><code>$title</code> <code>) );</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>   </code><code>// Determines position of the separator and direction of the breadcrumb</code>
</div>
<div>
<code>  </code><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>    </code><code>$title_array</code> <code>= </code><code>array_reverse</code><code>( </code><code>$title_array</code> <code>);</code>
</div>
<div>
<code>    </code><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>} </code><code>else</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><code>}</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>  </code><code>/**</code>
</div>
<div>
<code>   </code><code>* Filter the text of the page title.</code>
</div>
<div>
<code>   </code><code>*</code>
</div>
<div>
<code>   </code><code>* @since 2.0.0</code>
</div>
<div>
<code>   </code><code>*</code>
</div>
<div>
<code>   </code><code>* @param string $title    Page title.</code>
</div>
<div>
<code>   </code><code>* @param string $sep     Title separator.</code>
</div>
<div>
<code>   </code><code>* @param string $seplocation Location of the separator (left or right).</code>
</div>
<div>
<code>   </code><code>*/</code>
</div>
<div>
<code>  </code><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>  </code><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>
很显然默认情况下标题是比较简陋的,对 SEO 并不是很友好。</p>
<p>
例子</p>
<div>
<div>
<div id="highlighter_219324">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>&lt;title&gt;&lt;?php wp_title( </code><code>'|'</code><code>, true, </code><code>'right'</code> <code>); ?&gt;&lt;/title&gt;</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
其它</p>
<p>
标题可以使用 wp_title 过滤器定制,此函数位于:wp-includes/general-template.php</p>
頁: [1]
查看完整版本: WordPress中获取页面链接和标题的相关PHP函数用法解析