WordPress获取当前文章别名

日期: 标签:WordPress教程
如需帮忙改代码,或者WordPress二次开发、PHP网站建设等需求,可联系我购买付费服务:  点此联系我

     相信很多人在使用WordPress的时候,都喜欢使用文章别名作为固定链接,如我的博客固定链接形式为 https://www.ludou.org/%postname%.html,这个postname就是文章的别名(也称 slug name)。你在后台编写文章的时候,可以自己定义文章的别名,如下图的黄色部分:

文章缩略名

     当然你可以在文章编辑页,点击某篇文章下的"快速编辑",那里也可以编辑别名:

文章缩略名

     现在有个问题,我怎样才能获取这个文章别名呢?WordPress中提供了<?php the_title(); ?>来获取文章标题,<?php the_permalink(); ?>用于获取当前文章的链接,但是并没有发现获取文章别名的函数。找不到相应的函数,我们可以自己写个函数,以下是已编写好的函数,你可以编辑你的主题目录中的functions.php,在 ?> 前面添加以下函数:

function the_slug() {
    $post_data = get_post($post->ID, ARRAY_A);
    $slug = $post_data['post_name'];
    return $slug; 
}

     然后你就可以在你需要的地方调用该函数了:

<?php echo the_slug(); ?>

     输出结果为当前文章的别名,如本文的为 wordpress-post-slug-and-page-slug-function

     如果你用的别名是中文,那么调用出来的将会是一堆乱码,因为WordPress对中文的别名进行了编码,在数据库中存储的不是中文。

 

参考文章:

-- 完 --

本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:露兜即刻 https://www.ludou.org/wordpress-post-slug-and-page-slug-function.html
露兜
kaapass@outlook.com  QQ 825533758

业余编程爱好者。

49 条留言

点此留言
  1. 西门 西门

    不好意思,本人愚笨,不是很懂什么意思。

    是不是我想用标题作为文章的链接,但是如果用/%postname%.html就变成中文或者乱码了,用这个方法可以自动转还成wordpress-post-slug-and-page-slug-function这种英文形式?

  2. Ludou

    @西门 不是!
    本文只是教你如何获取文章的别名,至于你想怎么用就随你愿了,%postname%.html只是举个例子!

    如果你的文章别名是中文,而且用%postname%.html这种固定链接形式,那么文章网址将会是中文(Firefox中),或者乱码(IE)

    如果你想使用%postname%.html这种链接形式,且不想出现乱码情况,可以搜索自动将中文名称转成拼音的插件。

  3. 滔滔乐 滔滔乐

    已将博客订阅,关注中!

  4. Ludou

    @滔滔乐 谢谢关注!

  5. cxy152376

    WP中文论坛路过.

    function the_slug() {
    $post_data = get_post($post->ID, ARRAY_A);
    $slug = $post_data['post_name'];
    return $slug;
    }

    这个函数你测试过吗, $post是the loop中的全局变量, 在函数体内使用应该先 "global $post;"声明吧..

    话说, 按照WP模板标签风格, the_xxx之类tag一般是直接输出值, get_the_xxx是返回值.

  6. Ludou

    @cxy152376 1、the_slug()是自定义的函数,不是WordPress内置函数,名称可以自己起个;
    2、至于该函数到底是直接输出值,还是返回值,你可以自己做些更改,不必拘泥于WordPress标签风格
    3、该函数我已经测试过,可以正常使用,在index.php的主循环中可以正常使用,在single.php中未加循环的情况下也可以正常使用;
    4、$post在主循环外部仍然有效,不必添加全局变量声明,当然添加了也没有错

    可以参考:
    http://playworkplay.com/blog/wordpress-quicktips-getting-a-posts-id/

  7. 米修 米修

    可以不用修改这些代码啊,个人使用方法是先用英文或拼音写标题,然后发布,这样英文链接就形成了,然后再编辑为你要的中文名称重新发布就好了。

  8. Ludou

    @米修 本文只是教你如何获取文章的别名;
    本文并不是教你如何设置英文链接。

  9. GO时尚网 GO时尚网

    看了半天 没看个明白
    调用别名
    数据库里没中文,
    那只能调英文…

  10. Ludou

    @GO时尚网 是的!数据库中不存放中文,如果别名是中文,WordPress会对其解码成%形式再存放,取出来的时候再解码,至于怎么解码,至今没研究出来。

  11. 王琪亮

    @Ludou 那个%形式是ASCII码的十六进制形式,每个字符以%做前缀。

  12. 武汉SEO 武汉SEO

    他会自已译成英文?

  13. Ludou

    @武汉SEO 不会!你自己填。
    待你熟悉WordPress就知道了。

  14. 假睫毛 假睫毛

    我搜索到这里就是为了一个,就是能不能文章别名和标签别名,中文自动转换成拼音或者英文

  15. Ludou

    @假睫毛 你可以尝试搜索关键字:wordpress 文章 别名 中文 拼音

  16. 假睫毛 假睫毛

    @Ludou 不过显示出来会很长,楼主你自己也是手动的嘛?

  17. Ludou

    @假睫毛 是的

  18. 假睫毛 假睫毛

    @Ludou 嗯,插件还是没有手动好!

  19. 杜彬的博客 杜彬的博客

    不好意思,打扰下,我按照你的方法弄了一下,并且我的别名也是英文,但是调出来的确是乱码是怎么回事呢?

  20. Ludou

    @杜彬的博客 这种情况我没见过,你在自己找找原因。

  21. 漠天 漠天

    你好,我想请教你一个问题,我想获取文章里第一个标签的别名,怎么实现。
    先谢谢你。

  22. Ludou

    @漠天 代码:
    <?php
    $post_tags = wp_get_post_tags($post->ID);

    if ($post_tags)
        echo $post_tags[0]->slug;

    ?>

  23. fool fool

    请问下 <?php echo the_slug(); ?>
    这个应该添加到哪呢. . 不好意思.我是初学者

  24. Ludou

    @fool 那你想添加在哪个页面,哪个地方?

  25. fool fool

    @Ludou 你的就是直接替换固定链接那里.把中文的替换成了 拼音

  26. Ludou

    @fool 如果你是想要这个功能,那么你来错地方了,我的固定连接是我自己写的英文,而不是拼音。

  27. fool fool

    @Ludou 不是你可能误会了. . 这代码不是实现输出 文章别名吗 ? 需要手动改. .
    在后台发布文章后,固定连接仍然是中文 … 所以那段代码是不是应该显示在后台?这样我该添加到哪个页面

  28. Ludou

    @fool https://www.ludou.org/create-wordpress-themes-template-hierarchy.html
    你参考上面的说明,将这段代码放在主题的合适页面的合适位置就可以了!

    另外,这段代码不会帮你自动将中文别名转换成拼音别名,如果你需要这样的功能,请选择下面任一插件:
    http://www.williamlong.info/archives/1027.html
    http://blog.2i2j.com/being-humble-opinion/wp-slug-for-wordpress-plugins.html

  29. 京[飞翔] 京[飞翔]

    请问,我要调用任意的page页面,别名怎么调用,求代码,谢谢!

  30. Ludou

    @京[飞翔] 同理。按文中在functions.php中添加函数后,将以下代码放在任意page页面,即可输出别名:
    <?php echo the_slug(); ?>

  31. 京[飞翔] 京[飞翔]

    @Ludou 我意思是不调用当前文章的别名,调用任意单页的别名,由ID号来判断的!先谢谢了!

  32. Ludou

    @京[飞翔] 看你的网站貌似也是搞网站技术方面。同理,把函数里面的代码提取出来:
    // $post->ID 改成你的ID
    $post_data = get_post($post->ID, ARRAY_A);
    echo $post_data["post_name"];

    get_post不行就换成get_page

  33. Arens

    的确可以调用Page Name,但如果我的Page下包含子级Page,如何调用其改页面和子级页面的page name?

  34. Ludou

    @Arens $cur_page = get_page( $post->ID );echo $cur_page->post_title;

    $args = array(
    'child_of' => $post->ID,
    'post_type' => 'page',
    'post_status' => 'publish'
    );
    $sub_pages = get_pages( $args );

    if(!empty($sub_pages)) {
    foreach($sub_pages as $sub_page) {
    // 打印所有子分类的标题
    echo ', ' .$sub_page->post_title;
    }
    }

  35. Colin Colin

    不错的博客,以后常来请教~

  36. 露兜你好 露兜你好

    露兜你好,在我的网站上我采用了你的前台投稿页面,作为我网站的投稿页。首先对此表示万分感谢。然后现在我的投稿页面上增加了一些新内容,基本都差不多了,最后剩下一个别名的问题弄不来,就是我想把后台填写别名slug name的这个功能调用到前台。让用户自行在前台直接填写文章别名为英文或拼音,然后把这个别名作为固定连接。为了seo优化。请一定指教。另,欢迎到小站参观,现在内测,还是空架子,请勿见笑。

  37. lee

    技术哥,有个小难题想请您协助一下:

    如果实现只获取文章标题的英文内容呢?

    例如标题是“我爱中国 i love china”,然后用代码获取英文 i love china 。

    球指导 T_T….

  38. Ludou

    @lee https://www.ludou.org/php-get-latin-alphabet-from-string.html

  39. WINDBRAVE

    为什么这个SLUG NAME显示的时候,必须是带中横杠的。
    我是个产品页面,这个别名我希望是对产品的简单描述,那么在显示的时候,我不想看到中横杠,应该怎么办?

  40. Ludou

    @WINDBRAVE SLUG NAME不支持空格

  41. 源泉 源泉

    路过,。。

  42. 股民先生 股民先生

    楼主的博客真的货真价实!

    我刚刚建站不到1个月,百度收录也刚刚开始,

    请问博主,固定链接怎么样设置对SEO更好?

    我现在是这样的
    http://www.gmsir.com/ruanjian/317.html
    中间的ruanjian是分类目录,317是文章ID,
    是否取消分类目录,直接下面这样会更好?
    http://www.gmsir.com/317.html

    还是使用你说的文章名或者文章别名的效果更好?

  43. zcl zcl

    我想用已发布文章数量加1作文章别名,看了网上的许多代码
    add_action( 'save_post', 'using_id_as_slug', 10, 2 );
    function using_id_as_slug($post_id, $post){
    global $post_type;
    if($post_type=='post'){ //只对文章生效
    // 如果是文章的版本,不生效
    if (wp_is_post_revision($post_id))
    return false;
    // 取消挂载该函数,防止无限循环
    remove_action('save_post', 'using_id_as_slug' );
    // 使用文章ID作为文章的别名
    wp_update_post(array('ID' => $post_id, 'post_name' => $post_id ));
    // 重新挂载该函数
    add_action('save_post', 'using_id_as_slug' );
    }
    }
    有这段代码如何修改能够实现,谢谢

  44. h5游戏 h5游戏

    Ludou哥能不能指定文章id获取上下篇文章呢?get_permalink 这个是默认的 不能指定文章id啊

  45. 露兜

    @h5游戏 <?php
    // 下一篇
    $next_post = get_next_post();
    if (!empty( $next_post )): ?>
    <a href="<?php echo get_permalink( $next_post->ID ); ?>"><?php echo $next_post->post_title; ?></a>
    <?php endif; ?>

  46. 露兜

    @h5游戏 <?php
    // 上一篇
    $prev_post = get_previous_post();
    if (!empty( $prev_post )): ?>
    <a href="<?php echo $prev_post->guid ?>"><?php echo $prev_post->post_title ?></a>
    <?php endif ?>

  47. h5游戏 h5游戏

    @露兜 能指定id 比如post_id =5之类的上下篇文章吗?

  48. 露兜

    @h5游戏 https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/link-template.php#L0
    搜索:function get_adjacent_post(
    用这个函数改个名放到你的主题的functions.php中,给里面的get_post传递一下id即可:$post = get_post()

  49. 盘古科技

    感谢楼主

发表留言