是否可以仅从子弹中获取页面的永久链接?我知道您可以使用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/' )


评论


您是说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

#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