获取永久链接(int | WP_发布 $帖子,布尔 $leavename(名字) =  ):字符串|假

检索当前帖子或帖子ID的完整永久链接。

参数

$帖子整数|WP_支柱可选择的
发布ID或发布对象。默认为全局$帖子.
$leavename(名字)布尔可选择的
是否保留帖子名称或页面名称。

违约:

返回

字符串|假永久链接URL。如果帖子不存在,则为False。

更多信息

在插件或主题中,它最早可以在设置主题(_theme)行动。任何早期使用,包括加载的插件,生成致命错误。

请注意,当在没有ID参数的帖子页面(索引、存档等)的The Loop外部使用时,它将返回The Loop中最后一篇帖子的URL,当前页面的永久链接。

来源

函数get_permalink($post=0,$leavename=false){$rewritecode=数组(“%year%”,“%monthnum%”,“%day%”,“%hour%”,“%分钟%”,“%second%”,$leavename?“”:“%postname%',“%post_id%”,“%category%”,“%author%”,$leavename?“”:“%页面名称%',);if(isobject($post)&&isset($post->filter)&&'sample'===$post->filter{$sample=真;}其他{$post=获取post($post);$sample=假;}if(空($post->ID)){返回false;}if(“页面”===$post->post_type){return get_page_link($post,$leavename,$sample);}elseif(“附件”===$post->post_type){return get_attachment_link($post,$leavename);}elseif(in_array($post->post_type,get_post_types(数组('_builtin'=>false)),true)){返回get_post_permink($post,$lavename,$sample);}$permalink=获取选项('permalink_structure');/***在替换令牌之前,过滤帖子的永久链接结构。**仅适用于post_type为“post”的帖子。**@自3.0.0起**@param string$permalink站点的permalink-结构。*@param WP_Post$Post有问题的帖子。*@param bool$lavename是否保留帖子名称。*/$permalink=应用过滤器('pre_post_link',$permallink,$post,$leavename);如果($永久链接&&! wp_force_plain_post_permalink($post)) {$category=“”;if(str_contains($permalink,“%category%”){$cats=get_the_category($post->ID);if($cats){$cats=wp_list_sort($只猫,阵列('term_id'=>'ASC',));/***筛选在%category%永久链接标记中使用的类别。**@自3.5.0起**@param WP_Term$cat要在永久链接中使用的类别。*@param array$cats与帖子关联的所有类别(WP_Term对象)的数组。*@param WP_Post$Post有问题的帖子。*/$category_object=应用过滤器('post_link_category',$cats[0],$cats,$post);$category_object=get_term($categori_object,'类别');$category=$categary_object->slug;if($category_object->parent){$类别=get_category_parents($category_object->parent,false,'/',true)$类别;}}/**在永久链接中显示默认类别,*无需显式赋值。*/if(空($category)){$default_category=get_term(get_option('default_catagory'),'category');if($default_category&&!is_wp_error($default _category)){$category=$default_category->slug;}}}$author='';if(str_contains($permalink,“%author%”){$authordata=get_userdata($post->post_author);$author=$authordata->user_nicename;}/**这不是API调用,因为永久链接基于存储的post_date值,*它应该被解析为本地时间,而不管默认的PHP时区是什么。*/$date=爆炸(“”,str_replace(数组(“-”,“:”),“”,$post->post_date));$rewritereplace=数组($日期[0],$date[1],$日期[2],$日期[3],$日期[4],$日期[5],$post->post_name,$post->ID,$类别,$作者,$post->post_name,);$permalink=home_url(str_replace($rewritecode,$rewrite replace,$permalindk));$permalink=user_trailingslashit($permalink,'single');}else{//如果他们没有使用奇特的永久链接选项。$permalink=home_url('?p='.$post->ID);}/***过滤帖子的永久链接。**仅适用于post_type为“post”的帖子。**@自1.5.0起**@param string$permalink帖子的永久链接。*@param WP_Post$Post有问题的帖子。*@param bool$leavename是否保留帖子名称。*/return apply_filters('post_link',$permalink,$post,$leavename);}

挂钩

应用筛选器(“post_link”,一串 $永久链接,WP_支柱 $帖子,布尔 $leavename(名字) )

过滤帖子的永久链接。

应用筛选器('帖子链接类别',WP_术语 $猫,阵列 $只猫,工作包支柱 $帖子 )

筛选在%category%永久链接标记中使用的类别。

应用筛选器(“pre_post_link”,一串 $永久链接,WP_支柱 $帖子,布尔 $发酵剂 )

在替换令牌之前,过滤帖子的永久链接结构。

变更日志

版本描述
1.0.0介绍。

用户贡献的笔记

  1. 跳到备注13内容

    通过slug获取帖子或页面(或其他)永久链接:

    函数get_link_by_slug($slug,$type='post'){$post=get_page_by_path($slug、OBJECT、$type);return get_permalink($post->ID);}

    如果你正在使用polylang(就像我通常做的那样),你可以从任何一个语言段开始获取permalink(我通常从我的语言开始,通常是网站的默认语言):

    函数get_link_by_slug($slug,$lang_slug=null,$type='post'){$post=get_page_by_path($slug、OBJECT、$type);$id=($lang_slug)?pll_get_post($post->ID,$lang_slug):$post->ID;返回get_permalink($id);}
  2. 跳到备注15内容

    传入post对象而不是ID
    这显示了如何使用页面标题而不是ID获取永久链接。

    <a href=“<?php echo esc_url(get_permalink(get_page_by_title('每月事件'));?>”><?php esc_html_e(“每月事件”,“textdomain”);?></a>
  3. 跳到注释16内容

    链接到特定帖子
    返回两个特定帖子(帖子ID 1和10)的永久链接,作为信息列表中的超文本链接。

    <ul><li><?php esc_html_e('我的博客信息:','文本域');?><ul><li><a href=“<?php echo esc_url(get_permalink(1));?>”><?php esc_html_e(“关于MyBlog”,“textdomain”);?></a></li><li><a href=“<?php echo esc_url(get_permalink(10));?>”><?php esc_html_e(“关于所有者”,“textdomain”);?></a></li></ul></li></ul>
  4. 跳到注释21内容

    从当前子页面获取页面父级的永久链接(在循环中使用):

    while(have_posts()):post();获取永久链接(wp_get_post_parent_id(get_the_id()));结束时;

    获取ID:获取当前页面的id。
    wp_get_post_parent_id:获取当前页面的父页面id。

  5. 跳到注释22内容

    通过其模板slug获取页面永久链接:

    函数wpdocs_wp_get_page_url_by_template_slug($template_slug){$url=空;$template=“页面-”$template_slug.'。php';$pages=get_posts(数组('post_type'=>'page',“meta_query”=>数组(阵列(“key”=>“_wp_page_template”,“value”=>$template,“比较”=>“=”,))) );if(isset($pages[0])){$url=获取永久链接($pages[0]->ID);}返回$url;}

    您可以在主题中的任意位置调用该函数,如下所示:

    //输出类似于“http://(www.)(subdomain.)domain.com/shopping-cart-page-name__depends-on-permalink-settings/”的urlecho wpdocs_wp_get_page_url_by_template_slug('shopping_cart');

    注:该函数仅检索使用给定模板的第一个页面。我写它是为了获取我的购物车的url,诸如此类,显然这些只使用了一次。我已经修改了我的模板下拉列表,以便在其他帖子中使用某些模板时,它不会显示这些模板。如果要获取使用给定模板的所有帖子,请按如下方式修改函数:

    函数wpdocs_wp_get_page_url_by_template_slug($template_slug){$urls=数组();$template=“页面-”$template_slug.'。php';$pages=get_posts(数组(“post_type”=>“页面”,“meta_query”=>数组(阵列(“key”=>“_wp_page_template”,“value”=>$template,“比较”=>“=”,))) );foreach($pages作为$page){$urls[]=获取永久链接($page->ID);}返回!空($urls)$urls:false;}
  6. 跳到注释24内容

    对于安全措施,请确保使用:

    esc_url($url:string,$protocols:array|null,$_context:string);

    例子:

    echo esc_url(get_permalink(),'textdomain');

    请参见https://developer.wordpress.org/plugins/security/securing-output/

你必须登录在能够贡献笔记或反馈之前。