Permalinks for custom post types. Props prettyboymp. see #9674

git-svn-id: https://develop.svn.wordpress.org/trunk@12923 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Ryan Boren
2010-02-01 23:12:26 +00:00
parent f4775300f1
commit 46b701d830
3 changed files with 116 additions and 27 deletions
+40 -1
View File
@@ -104,8 +104,10 @@ function get_permalink($id = 0, $leavename = false) {
if ( $post->post_type == 'page' )
return get_page_link($post->ID, $leavename, $sample);
elseif ($post->post_type == 'attachment')
elseif ( $post->post_type == 'attachment' )
return get_attachment_link($post->ID);
elseif ( in_array($post->post_type, get_post_types( array('_builtin' => false) ) ) )
return get_post_link($post);
$permalink = get_option('permalink_structure');
@@ -159,6 +161,43 @@ function get_permalink($id = 0, $leavename = false) {
}
}
/**
* Retrieve the permalink for a post with a custom post type.
*
* @since 3.0.0
*
* @param int $id Optional. Post ID.
* @param bool $leavename Optional, defaults to false. Whether to keep post name.
* @param bool $sample Optional, defaults to false. Is it a sample permalink.
* @return string
*/
function get_post_link( $id = 0, $leavename = false, $sample = false ) {
global $wp_rewrite;
$post = &get_post($id);
if ( is_wp_error( $post ) )
return $post;
$post_link = $wp_rewrite->get_extra_permastruct($post->post_type);
$slug = $post->post_name;
if ( !empty($post_link) && ( ( isset($post->post_status) && 'draft' != $post->post_status && 'pending' != $post->post_status ) || $sample ) ) {
$post_link = ( $leavename ) ? $post_link : str_replace("%$post->post_type%", $slug, $post_link);
$post_link = home_url( user_trailingslashit($post_link) );
} else {
$post_type = get_post_type_object($post->post_type);
if ( $post_type->query_var && ( isset($post->post_status) && 'draft' != $post->post_status && 'pending' != $post->post_status ) )
$post_link = "?$post_type->query_var=$slug";
else
$post_link = "?post_type=$post->post_type&p=$post->ID";
$post_link = home_url($post_link);
}
return apply_filters('post_type_link', $post_link, $id);
}
/**
* Retrieve permalink from post ID.
*