답변:
당신은 페이지에 대해 이야기하고 있습니까? 게시물이 아닙니다.
이것이 당신이 찾고있는 것입니까?
get_permalink( get_page_by_path( 'map' ) )
get_permalink( get_page_by_title( 'Map' ) )
home_url( '/map/' )
get_page_by_path()
모든 페이지 정보의 배열을 반환합니다. get_permalink()
첫 번째 인수로 페이지 ID를 사용합니다. ID 값을 명시 적으로 전달해야한다고 생각했습니다.
나는 이것이 더 나을 수 있다고 생각한다.
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
워드 프레스 의 "원본"패턴 을 따른다 . (라인 3173)
rgds
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 AND post_status = 'publish'", $page_slug, $post_type ) ); if ( $page ) return get_page($page, $output); return null; }
\WP_Post
다른 값을 확인하는 모든 wordpress 함수에서 직접 확인됩니다. \WP_Post
또한 게시물에 대한 대부분의 관련 데이터를 찾는 방법을 직접 제공합니다.
이것은 Tom McFarlin 이 자신의 블로그에 게시 한 방법입니다 .
/**
* 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;
}
맞춤 게시물 유형 및 기본 제공 게시물 유형 (예 : post
및 page
) 과 함께 작동합니다 .
계층 적 페이지가 그렇게 작동하지 않기 때문에 허용되는 대답이 잘못되었습니다. 간단히 말해서, 슬러그가 항상 페이지 또는 게시물의 경로는 아닙니다. 페이지가 등 아이가 예를 들어 경로가 될 것입니다 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>
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));
?