get_page_link()
从ID中获取页面的永久链接:<a href="<?php echo get_page_link(40); ?>">Map</a>
我很好奇是否有任何方法可以对the进行相同的处理页面的内容-像这样:
<a href="<?php echo get_page_link('map'); ?>">Map</a>
#1 楼
您是在说Pages对吗?没有帖子。这就是您要找的东西吗?
get_permalink( get_page_by_path( 'map' ) )
get_permalink( get_page_by_title( 'Map' ) )
home_url( '/map/' )
#2 楼
我认为这样会更好: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的“原始”
get_page_by_title
模式。 (第3173行)rgds
评论
为什么会更好?你可以解释吗?
– julien_c
2012年4月11日下午13:11
最后的评论-我认为sql需要再有一个条件:function get_page_by_slug($ page_slug,$ output = OBJECT,$ post_type ='page'){全局$ wpdb; $ page = $ wpdb-> get_var($ wpdb-> prepare(“从$ wpdb-> posts中选择ID,post_name =%s AND post_type =%s AND post_status ='publish'”,$ page_slug,$ post_type));如果($ page)返回get_page($ page,$ output);返回null; }
–user25790
2013年1月9日14:27
为什么?它不会仅仅为了获取ID而生成完整的post对象。
– s_ha_dum
2013年1月9日14:53
@webcitron我认为这只是因为遵循Wordpress的原始模式通过“标题”发布帖子,只是更改为“ slug”。 (检查链接)
– Matheus Eduardo
13年5月13日在11:08
这是一个很好的答案。这绕过了流氓插件掩盖页面或错误过滤页面的可能性。如果从发布表中返回ID,则可以从中创建\ WP_Post的实例,该实例可以直接在所有检查其他值的wordpress函数中解析。 \ WP_Post还提供直接找到有关帖子的大多数相关数据的方法。
– mopsyd
18-3-23的3:53
#3 楼
这是汤姆·麦克法兰(Tom McFarlin)在他的博客上发布的方法: br />#4 楼
接受的答案是错误的,因为层次页面无法像这样工作。简而言之,该段并不总是页面或帖子的路径。例如。您的网页上有一个孩子,等等。路径将为parent-slug/child-slug
,而get_page_by_path
将无法通过这种方式找到child-slug
。正确的解决方案是这样的:function mycoolprefix_post_by_slug($the_slug, $post_type = "page"){
$args = array(
'name' => $the_slug,
'post_type' => $post_type,
'post_status' => 'publish',
'numberposts' => 1
);
$my_page = get_posts($args)[0];
return $my_page;
}
<a href="<?php echo mycoolprefix_post_by_slug('map'); ?>">Map</a>
#5 楼
试试看:<a href="<?php echo get_page_link( get_page_by_path( 'map' ) ); ?>">Map</a>
返回页面/帖子对象,get_page_by_path( 'path' )
可以使用该页面/帖子对象,因为它接受帖子/页面对象并返回永久链接。 评论
请编辑您的答案,并添加解释:为什么这可以解决问题?
– fuxia♦
18-2-26在13:27
#6 楼
function theme_get_permalink_by_title( $title ) {
// Initialize the permalink value
$permalink = null;
// Try to get the page by the incoming title
$page = get_page_by_title( strtolower( $title ) );
// If the page exists, then let's get its permalink
if( null != $page ) {
$permalink = get_permalink( $page->ID );
} // end if
return $permalink;
} // end theme_get_permalink_by_title
通过
使用此功能
if( null == theme_get_permalink_by_title( 'Register For This Site' ) ) {
// The permalink doesn't exist, so handle this however you best see fit.
} else {
// The page exists, so do what you need to do.
} // end if/else
评论
您是说get_permalink(get_page_by_path('contact')-> ID));吗?
–桑普森
2010-12-7 22:22
嗯,不是吗?身份证号是什么?
– zeo
10-12-8'1:52
get_page_by_path()返回所有页面信息的数组。 get_permalink()将页面ID作为第一个参数。我以为我必须明确传递ID值。
–桑普森
2010-12-8 4:47
@Jonathan:并不总是有文档记录,但是许多WP函数都接受数字ID和完整的post对象作为参数。
– Jan Fabry
2010年12月8日在7:18
似乎在处理子页面时使用get_page_by_path()可能会非常复杂...
– Kaaviar
2011年11月14日14:57