问题描述
是否有可能从一个单独的页面获得页面的永久链接?我知道您可以使用 get_page_link()
从 ID 获取页面的永久链接:
<a href="<?php echo get_page_link(40); ?>">Map</a>
如果有什么办法可以像这样的一个页面一样做,我很好奇:
<a href="<?php echo get_page_link('map'); ?>">Map</a>
最佳解决方案
你说的是正确的页面?不是帖子
这是你想要的:
-
get_permalink( get_page_by_path( 'map' ) )
-
get_permalink( get_page_by_title( 'Map' ) )
-
home_url( '/map/' )
次佳解决方案
我认为这可能会更好:
function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
global $wpdb;
$page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s", $page_slug, $post_type ) );
if ( $page )
return get_page($page, $output);
return null;
}
遵循 WordPress 的”original” get_page_by_title
模式。 (行 3173)
rgds
第三种解决方案
这是 Tom McFarlin on his blog 发表的一种方法:
/**
* Returns the permalink for a page based on the incoming slug.
*
* @param string $slug The slug of the page to which we're going to link.
* @return string The permalink of the page
* @since 1.0
*/
function wpse_4999_get_permalink_by_slug( $slug, $post_type = '' ) {
// Initialize the permalink value
$permalink = null;
// Build the arguments for WP_Query
$args = array(
'name' => $slug,
'max_num_posts' => 1
);
// If the optional argument is set, add it to the arguments array
if( '' != $post_type ) {
$args = array_merge( $args, array( 'post_type' => $post_type ) );
}
// Run the query (and reset it)
$query = new WP_Query( $args );
if( $query->have_posts() ) {
$query->the_post();
$permalink = get_permalink( get_the_ID() );
wp_reset_postdata();
}
return $permalink;
}
它适用于自定义帖子类型和 built-in 帖子类型 (如 post
和 page
) 。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。