按照建议,前往function reference 从那里到Source File (位于wp_includes/link-template.php
) 其中有四个函数,每个函数返回相似的结果。
<?php echo get_post_permalink() ?>
http://newdep.localhost/instruments/jester/
<?php echo post_permalink() ?>
http://newdep.localhost/instruments/jester/
<?php the_permalink() ?>
/乐器/小丑/
<?php echo get_the_permalink() ?>
http://newdep.localhost/instruments/jester/
在这种情况下,由于这是一种自定义的post类型,文档描述为为其设计的功能是
get_post_permalink()
, 其中
get_*()
函数返回结果,而不是显示结果,需要
echo
\'D
/**
* 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 The post permalink.
*/
function get_post_permalink( $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;
$draft_or_pending = isset( $post->post_status ) && in_array( $post->post_status, array( \'draft\', \'pending\', \'auto-draft\', \'future\' ) );
$post_type = get_post_type_object($post->post_type);
if ( $post_type->hierarchical ) {
$slug = get_page_uri( $id );
}
if ( !empty($post_link) && ( !$draft_or_pending || $sample ) ) {
if ( ! $leavename ) {
$post_link = str_replace("%$post->post_type%", $slug, $post_link);
}
$post_link = home_url( user_trailingslashit($post_link) );
} else {
if ( $post_type->query_var && ( isset($post->post_status) && !$draft_or_pending ) )
$post_link = add_query_arg($post_type->query_var, $slug, \'\');
else
$post_link = add_query_arg(array(\'post_type\' => $post->post_type, \'p\' => $post->ID), \'\');
$post_link = home_url($post_link);
}
/**
* Filter the permalink for a post with a custom post type.
*
* @since 3.0.0
*
* @param string $post_link The post\'s permalink.
* @param WP_Post $post The post in question.
* @param bool $leavename Whether to keep the post name.
* @param bool $sample Is it a sample permalink.
*/
return apply_filters( \'post_type_link\', $post_link, $post, $leavename, $sample );
}