有没有可能从它的插件中获得页面链接?

时间:2010-12-07 作者:Sampson

单从slug就可以获得页面的永久链接吗?我知道您可以使用get_page_link():

<a href="<?php echo get_page_link(40); ?>">Map</a>
我很好奇,是否有任何方法可以对页面的slug进行同样的处理,比如:

<a href="<?php echo get_page_link(\'map\'); ?>">Map</a>

7 个回复
最合适的回答,由SO网友:zeo 整理而成

这就是你想要的吗:

  1. get_permalink( get_page_by_path( \'map\' ) )
  2. get_permalink( get_page_by_title( \'Map\' ) )
  3. home_url( \'/map/\' )

SO网友:Matheus Eduardo

我认为这可能更好:

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;
}
遵循“原创”模式get_page_by_title of wordpress. (第3173行)

rgds

SO网友:shea

这是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;
}
它适用于自定义帖子类型和内置帖子类型(例如postpage).

SO网友:Sigma Wadbude

尝试以下操作:

<a href="<?php echo get_page_link( get_page_by_path( \'map\' ) ); ?>">Map</a>
get_page_by_path( \'path\' ) 返回可由使用的页/帖子对象get_page_link() 因为它接受post/page对象并返回permalink。

SO网友:Toskan

公认的答案是错误的,因为分层页面不是这样工作的。简单地说,slug并不总是页面或帖子的路径。E、 g.您的页面有一个子页面等。路径将是parent-slug/child-slugget_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>

SO网友:user46487

    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

SO网友:Josh Rodgers

有点晚了,但有点。。。

您可以这样做:
<?php $map = get_page_by_title( \'map\' ); ?>
<a href="<?php echo get_page_link(\'$map->ID\'); ?>">Map</a>

我就是这样做的:-)

谢谢,乔希

结束

相关推荐

Custom theme - pages in menu

我很高兴有机会成为这个社区的一员。最近我决定开始学习wordpress和主题构建,所以这是我在这里的第一篇帖子。我在网上阅读了一些关于如何构建自定义主题的教程。我的问题是,如何构建自定义菜单?例如,我在psd上有模板,我将其切片,然后我想将其集成到wordpress上。我支持先构建页面。那么,如何使用自定义css/xhtml构建菜单,使每个链接都指向我创建的页面?也许描述不清楚,但我想你明白我的意思。提前感谢。