WordPress 页面通过别名获取链接
通过页面(page)的别名(slug)获取其链接,可能这是一个小众的需求,以至于 WordPress 没有直接提供该功能的原生 API。之前在百度搜到一个方法,通过 SQL 语句可以实现,且该函数可以获取页面与分类两种形式别名对应的链接。代码如下:
<?php 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()
,把它稍加改造:
<?php 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 */
精简代码。
<?php 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)的别名获取其链接。
<?php 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 ); } ?>
快来发表评论吧!