WordPress获取当前文章别名

日期: 标签:WordPress教程 49 条留言
如需帮忙改代码,或者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

业余编程爱好者,主业是淘宝店主,卖些工艺品,感兴趣可以到我的淘宝店看看(旺旺不提供技术咨询):西西弗sisyphe

49 条留言

点此留言
  1. 西门

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

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

    • Ludou

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

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

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

  2. 滔滔乐

    已将博客订阅,关注中!

  3. 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是返回值.

    • 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/

  4. 米修

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

    • Ludou

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

  5. GO时尚网

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

    • Ludou

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

      • 王琪亮

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

  6. 武汉SEO

    他会自已译成英文?

    • Ludou

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

  7. 假睫毛

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

  8. 杜彬的博客

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

  9. 漠天

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

    • Ludou

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

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

      ?>

  10. fool

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

    • Ludou

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

      • fool

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

        • Ludou

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

          • fool

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

    • 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

  11. 京[飞翔]

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

    • Ludou

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

      • 京[飞翔]

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

        • Ludou

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

          get_post不行就换成get_page

  12. Arens

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

    • 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;
      }
      }

  13. Colin

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

  14. 露兜你好

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

  15. lee

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

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

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

    球指导 T_T….

    • Ludou

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

  16. WINDBRAVE

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

  17. 源泉

    路过,。。

  18. 股民先生

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

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

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

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

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

  19. 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' );
    }
    }
    有这段代码如何修改能够实现,谢谢

  20. h5游戏

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

    • 露兜

      @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; ?>

    • 露兜

      @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 ?>

      • h5游戏

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

    • 露兜

      @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()

  21. 盘古科技

    感谢楼主

发表留言