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

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

作者:斌果 字体:[增加 减小] 类型:转载 时间:2015-12-17 我要评论

这篇文章主要介绍了WordPress中获取页面链接和标题的相关PHP函数用法解析,分别为get_permalink()和wp_title()函数的使用,需要的朋友可以参考下

get_permalink()(获取文章或页面链接)
get_permalink() 用来根据固定连接返回文章或者页面的链接。在获取链接时 get_permalink() 函数需要知道要获取的文章的 ID,如果在循环中则自动默认使用当前文章。

用法

?
1
get_permalink( $id , $leavename );

参数

$id

(混合)(可选)文章或者页面的 ID(整数);还可以是文章对象。

默认值:在循环中自动调用当前的文章

$leavename

(布尔)(可选)转化成链接是是否忽略文章别名。如果设置成 True,那么将返回 http://www.example.com/%postname% 而不是 http://www.example.com/my-post-name

默认值:None

返回值

(字符串 | 布尔)成功获取链接则返回链接,失败则返回 False.

例子

根据 ID 获取文章或页面的链接:

?
1
<a href= "<?php echo get_permalink( 268 ); ?>" >获取指定 ID 的文章或页面链接</a>

循环中获取当前文章的链接:

?
1
<?php echo get_permalink(); ?>

根据页面标题获取页面链接:

?
1
<a href= "<?php echo esc_url( get_permalink( get_page_by_title( '留言板' ) ) ); ?>" >留言板</a>

其它

此函数位于:wp-includes/link-template.php

wp_title()(获取网页标题)
wp_title() 用来获取当前网页的标题,也就是 title 标签里边的内容。

wp_title() 能在不同的页面自动生成不同的标题(比如首页就是网站标题、文章页就是文章标题)。WordPress 官方的主题都在使用这个函数生成标题,但是在国内的主题中却总是被忽视(因为默认情况下这个函数对 SEO 并不是太好)。

我还是推荐使用这个函数调用标题,更加符合主题开发规范,如果你要让他变的更加符合 SEO,可以使用过滤器优化一下,本文结尾有优化方法。

用法

?
1
wp_title( $sep , $display , $seplocation );

参数

$sep

(字符串)(可选)标题内容的分隔符,一般设置成 “|” 或者 “-”。

默认值:»(»)

$display

(布尔)(可选)是否直接打印标题,如果设置成 False 则返回标题,可以存储到变量里。

默认值:True(直接打印输出)

$seplocation

(字符串)(可选)分隔符所在位置,左边还是右边,如果传递 “right” 则为右边,其它任何内容都是左边。

默认值:空字符串(左边)

返回值

(字符串)如果 $display 参数设置成 False,才能返回标题的内容,根据不同的标题会返回不同的内容,默认情况下返回的内容是这样的:

  • 文章页:文章标题
  • 日期页:日期
  • 分类页:分类标题
  • 作者页:作者名字

如果你想更加详细的了解,可以阅读下边的函数源码:


?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/**
  * Display or retrieve page title for all areas of blog.
  *
  * By default, the page title will display the separator before the page title,
  * so that the blog title will be before the page title. This is not good for
  * title display, since the blog title shows up on most tabs and not what is
  * important, which is the page that the user is looking at.
  *
  * There are also SEO benefits to having the blog title after or to the 'right'
  * or the page title. However, it is mostly common sense to have the blog title
  * to the right with most browsers supporting tabs. You can achieve this by
  * using the seplocation parameter and setting the value to 'right'. This change
  * was introduced around 2.5.0, in case backwards compatibility of themes is
  * important.
  *
  * @since 1.0.0
  *
  * @param string $sep Optional, default is '»'. How to separate the various items within the page title.
  * @param bool $display Optional, default is true. Whether to display or retrieve title.
  * @param string $seplocation Optional. Direction to display title, 'right'.
  * @return string|null String on retrieve, null when displaying.
  */
function wp_title( $sep = '»' , $display = true, $seplocation = '' ) {
   global $wp_locale ;
  
   $m = get_query_var( 'm' );
   $year = get_query_var( 'year' );
   $monthnum = get_query_var( 'monthnum' );
   $day = get_query_var( 'day' );
   $search = get_query_var( 's' );
   $title = '' ;
  
   $t_sep = '%WP_TITILE_SEP%' ; // Temporary separator, for accurate flipping, if necessary
  
   // If there is a post
   if ( is_single() || ( is_home() && !is_front_page() ) || ( is_page() && !is_front_page() ) ) {
     $title = single_post_title( '' , false );
   }
  
   // If there's a post type archive
   if ( is_post_type_archive() ) {
     $post_type = get_query_var( 'post_type' );
     if ( is_array ( $post_type ) )
       $post_type = reset( $post_type );
     $post_type_object = get_post_type_object( $post_type );
     if ( ! $post_type_object ->has_archive )
       $title = post_type_archive_title( '' , false );
   }
  
   // If there's a category or tag
   if ( is_category() || is_tag() ) {
     $title = single_term_title( '' , false );
   }
  
   // If there's a taxonomy
   if ( is_tax() ) {
     $term = get_queried_object();
     if ( $term ) {
       $tax = get_taxonomy( $term ->taxonomy );
       $title = single_term_title( $tax ->labels->name . $t_sep , false );
     }
   }
  
   // If there's an author
   if ( is_author() && ! is_post_type_archive() ) {
     $author = get_queried_object();
     if ( $author )
       $title = $author ->display_name;
   }
  
   // Post type archives with has_archive should override terms.
   if ( is_post_type_archive() && $post_type_object ->has_archive )
     $title = post_type_archive_title( '' , false );
  
   // If there's a month
   if ( is_archive() && ! empty ( $m ) ) {
     $my_year = substr ( $m , 0, 4);
     $my_month = $wp_locale ->get_month( substr ( $m , 4, 2));
     $my_day = intval ( substr ( $m , 6, 2));
     $title = $my_year . ( $my_month ? $t_sep . $my_month : '' ) . ( $my_day ? $t_sep . $my_day : '' );
   }
  
   // If there's a year
   if ( is_archive() && ! empty ( $year ) ) {
     $title = $year ;
     if ( ! empty ( $monthnum ) )
       $title .= $t_sep . $wp_locale ->get_month( $monthnum );
     if ( ! empty ( $day ) )
       $title .= $t_sep . zeroise( $day , 2);
   }
  
   // If it's a search
   if ( is_search() ) {
     /* translators: 1: separator, 2: search phrase */
     $title = sprintf(__( 'Search Results %1$s %2$s' ), $t_sep , strip_tags ( $search ));
   }
  
   // If it's a 404 page
   if ( is_404() ) {
     $title = __( 'Page not found' );
   }
  
   $prefix = '' ;
   if ( ! empty ( $title ) )
     $prefix = " $sep " ;
  
   /**
    * Filter the parts of the page title.
    *
    * @since 4.0.0
    *
    * @param array $title_array Parts of the page title.
    */
   $title_array = apply_filters( 'wp_title_parts' , explode ( $t_sep , $title ) );
  
    // Determines position of the separator and direction of the breadcrumb
   if ( 'right' == $seplocation ) { // sep on right, so reverse the order
     $title_array = array_reverse ( $title_array );
     $title = implode( " $sep " , $title_array ) . $prefix ;
   } else {
     $title = $prefix . implode( " $sep " , $title_array );
   }
  
   /**
    * Filter the text of the page title.
    *
    * @since 2.0.0
    *
    * @param string $title    Page title.
    * @param string $sep     Title separator.
    * @param string $seplocation Location of the separator (left or right).
    */
   $title = apply_filters( 'wp_title' , $title , $sep , $seplocation );
  
   // Send it out
   if ( $display )
     echo $title ;
   else
     return $title ;
  
}

很显然默认情况下标题是比较简陋的,对 SEO 并不是很友好。

例子

?
1
<title><?php wp_title( '|' , true, 'right' ); ?></title>

其它

标题可以使用 wp_title 过滤器定制,此函数位于:wp-includes/general-template.php

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值