WordPress 页面通过别名获取链接
通过页面(page)的别名(slug)获取其链接,可能这是一个小众的需求,以至于 WordPress 没有直接提供该功能的原生 API。之前在百度搜到一个方法,通过 SQL 语句可以实现,且该函数可以获取页面与分类两种形式别名对应的链接。代码如下:
function get_pagelink_by_slug( $slug, $type='page' ) {
global $wpdb;
if ( $type == 'page' ) {
$id = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_name = '" . $slug . "'" );
return get_the_permalink( $id );
} else {
$id = $wpdb->get_var( "SELECT term_id FROM $wpdb->terms WHERE slug = '" . $slug . "'" );
return get_category_link( $id );
}
}
昨天看到这段代码,突然想是否能通过 WordPress 的原生 API 实现。目前已经知道通过赋予 get_the_permalink()
函数 id 参数就可以获取文章(post)或者页面的链接,那么现在只需要找到通过别名取得 id 的方法即可,曲线救国的思路,简单说就是 “slug->id->link”。搜了一会儿,最后还是在老外的论坛上找到的,需要用到的函数为 get_page_by_path()
,把它稍加改造:
function get_pagelink_by_slug( $page_slug ) {
$page_id = get_page_by_path( $page_slug ) ? get_page_by_path( $page_slug )->ID : '';
return get_permalink( $page_id );
}
这样功能就实现了。
思考:由第一段代码可以知道,get_category_link()
函数可以实现分类的别名获取链接;另外前面提到 get_permalink()
不仅可以用于页面,也是可以通过文章的 id 获取链接的。那么就可以把代码加以完善,通过指定不同类型的别名,获取不同类型的网页链接。暂时还用不到,就等有心情的时候再做这件事吧。
/* edit @ 2016-08-13 */
精简代码。
function get_pagelink_by_slug( $page_slug ) {
$page = get_page_by_path( $page_slug ) ? get_page_by_path( $page_slug ) : '';
return get_permalink( $page );
}
/* edit @ 2018-02-20 */
可以指定文章(post)的别名获取其链接。
function get_permalink_by_slug( $page_path, $post_type = 'page' ) {
if ( 'page' == $post_type ) {
$post = get_page_by_path( $page_path );
} elseif ( 'post' == $post_type ) {
$post = get_page_by_path( $page_path, 'OBJECT', 'post' );
} else {
return;
}
return get_permalink( $post );
}
快来发表评论吧!