首页 > 分类 > 网络百科 > 文章内容

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 );
}
您可能还会对这些文章感兴趣
快来发表评论吧!
发表评论

您的电子邮箱地址不会被公开。必填项已用 * 标注

你好,新朋友!

emojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemojiemoji