个性化的WordPress原创主题

WordPress文章企业网站主题模板
WordPress主题建站 > WordPress标签 > WordPress根据文档ID显示链接URL标签get_permalink()

WordPress根据文档ID显示链接URL标签get_permalink()

责任编辑:玲熙 更新时间: 关注:545

之前文档中我们有介绍,使用the_permalink()来显示文档链接URL;如果我们只知道文档的ID,需要使用get_permalink()标签来获取文档链接URL,以下方法$post_ID是您要调用文档的ID,使用方法如下:

  1. <?php echo get_permalink($post_ID); ?>

当然,如果您是在当前文档中,可以直接使用the_permalink();来读取当前文档链接,例如:

  1. <?php the_permalink(); ?>

WordPress根据文档ID显示链接URL标签get_permalink

  1. get_permalink()位于 /wp-includes/link-template.php 176行[5.9.3版本]
  1. /**
  2.  * Retrieves the full permalink for the current post or post ID.
  3.  *
  4.  * @since 1.0.0
  5.  *
  6.  * @param int|WP_Post $post      Optional. Post ID or post object. Default is the global `$post`.
  7.  * @param bool        $leavename Optional. Whether to keep post name or page name. Default false.
  8.  * @return string|false The permalink URL or false if post does not exist.
  9.  */
  10. function get_permalink( $post = 0, $leavename = false ) {
  11. $rewritecode = array(
  12. '%year%',
  13. '%monthnum%',
  14. '%day%',
  15. '%hour%',
  16. '%minute%',
  17. '%second%',
  18. $leavename ? '' : '%postname%',
  19. '%post_id%',
  20. '%category%',
  21. '%author%',
  22. $leavename ? '' : '%pagename%',
  23. );

  24. if ( is_object( $post ) && isset( $post->filter ) && 'sample' === $post->filter ) {
  25. $sample = true;
  26. } else {
  27. $post   = get_post( $post );
  28. $sample = false;
  29. }

  30. if ( empty( $post->ID ) ) {
  31. return false;
  32. }

  33. if ( 'page' === $post->post_type ) {
  34. return get_page_link( $post, $leavename, $sample );
  35. } elseif ( 'attachment' === $post->post_type ) {
  36. return get_attachment_link( $post, $leavename );
  37. } elseif ( in_array( $post->post_type, get_post_types( array( '_builtin' => false ) ), true ) ) {
  38. return get_post_permalink( $post, $leavename, $sample );
  39. }

  40. $permalink = get_option( 'permalink_structure' );

  41. /**
  42.  * Filters the permalink structure for a post before token replacement occurs.
  43.  *
  44.  * Only applies to posts with post_type of 'post'.
  45.  *
  46.  * @since 3.0.0
  47.  *
  48.  * @param string  $permalink The site's permalink structure.
  49.  * @param WP_Post $post      The post in question.
  50.  * @param bool    $leavename Whether to keep the post name.
  51.  */
  52. $permalink = apply_filters( 'pre_post_link', $permalink, $post, $leavename );

  53. if (
  54. $permalink &&
  55. ! wp_force_plain_post_permalink( $post )
  56. ) {

  57. $category = '';
  58. if ( strpos( $permalink, '%category%' ) !== false ) {
  59. $cats = get_the_category( $post->ID );
  60. if ( $cats ) {
  61. $cats = wp_list_sort(
  62. $cats,
  63. array(
  64. 'term_id' => 'ASC',
  65. )
  66. );

  67. /**
  68.  * Filters the category that gets used in the %category% permalink token.
  69.  *
  70.  * @since 3.5.0
  71.  *
  72.  * @param WP_Term  $cat  The category to use in the permalink.
  73.  * @param array    $cats Array of all categories (WP_Term objects) associated with the post.
  74.  * @param WP_Post  $post The post in question.
  75.  */
  76. $category_object = apply_filters( 'post_link_category', $cats[0], $cats, $post );

  77. $category_object = get_term( $category_object, 'category' );
  78. $category        = $category_object->slug;
  79. if ( $category_object->parent ) {
  80. $category = get_category_parents( $category_object->parent, false, '/', true ) . $category;
  81. }
  82. }
  83. // Show default category in permalinks,
  84. // without having to assign it explicitly.
  85. if ( empty( $category ) ) {
  86. $default_category = get_term( get_option( 'default_category' ), 'category' );
  87. if ( $default_category && ! is_wp_error( $default_category ) ) {
  88. $category = $default_category->slug;
  89. }
  90. }
  91. }

  92. $author = '';
  93. if ( strpos( $permalink, '%author%' ) !== false ) {
  94. $authordata = get_userdata( $post->post_author );
  95. $author     = $authordata->user_nicename;
  96. }

  97. // This is not an API call because the permalink is based on the stored post_date value,
  98. // which should be parsed as local time regardless of the default PHP timezone.
  99. $date = explode( ' ', str_replace( array( '-', ':' ), ' ', $post->post_date ) );

  100. $rewritereplace = array(
  101. $date[0],
  102. $date[1],
  103. $date[2],
  104. $date[3],
  105. $date[4],
  106. $date[5],
  107. $post->post_name,
  108. $post->ID,
  109. $category,
  110. $author,
  111. $post->post_name,
  112. );

  113. $permalink = home_url( str_replace( $rewritecode, $rewritereplace, $permalink ) );
  114. $permalink = user_trailingslashit( $permalink, 'single' );

  115. } else { // If they're not using the fancy permalink option.
  116. $permalink = home_url( '?p=' . $post->ID );
  117. }

  118. /**
  119.  * Filters the permalink for a post.
  120.  *
  121.  * Only applies to posts with post_type of 'post'.
  122.  *
  123.  * @since 1.5.0
  124.  *
  125.  * @param string  $permalink The post's permalink.
  126.  * @param WP_Post $post      The post in question.
  127.  * @param bool    $leavename Whether to keep the post name.
  128.  */
  129. return apply_filters( 'post_link', $permalink, $post, $leavename );
  130. }
  • 获赞29
  • 声明:内容版权归原作者所有,未经授权不得任意转载
  • 本文标题和链接:
    WordPress根据文档ID显示链接URL标签get_permalink()
    https://e.69525.com/f/f0c591cbe13827c4/

相关阅读

Copyright © 2023 WordPress主题. All rights reserved.Powered by e.69525.com.

本站基于WordPress主题搭建,正在以新的版本流畅运行;由69525提供主题免费升级支持