西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > wordpress教程 >

WordPress离线发表文章自动生成别名

时间:2015-12-31 09:45来源:未知 作者:好模板 点击:
多人会把WordPress文章的固定链接设置为 postname ,也就是自己对每篇文章定义一个别名,作为文章的固定链接。这样使得文章链接更有意义,也有利于SEO优化。 而如果使用离线发布Word

多人会把WordPress文章的固定链接设置为postname,也就是自己对每篇文章定义一个别名,作为文章的固定链接。这样使得文章链接更有意义,也有利于SEO优化。

而如果使用离线发布WordPress博客的时候,往往不能直接设置postname,不得不发表到博客后自行修改。例如在我的这篇文章中,使用为知笔记作为离线编辑器,就会有这样的烦恼。

设置固定链接

首先肯定是要设置固定链接包含postname,如果没有这个需要,也就不需要看本文了。在设置-固定链接中将固定链接设置为自定义:/%postname%

修改WordPress主题

在WordPress主题的functions.php中添加下面的代码。


  1. // 文章自动别名
  2. function post_auto_slug( $postid ) {
  3.     global $wpdb;
  4.  
  5. $sql = "SELECT post_title,post_name FROM $wpdb->posts WHERE ID = '$postid' AND post_type = 'post' AND post_parent = '0'";
  6.     $results = $wpdb->get_results($sql);
  7. if( empty($results) ) {
  8.         return false;
  9.     }
  10.     $post_title = $results[0]->post_title;
  11.     $post_name = $results[0]->post_name;
  12.  
  13. $pos = strrpos( $post_title , '@@' );
  14. if( $pos > 0 ) {
  15.         $slug = substr( $post_title, $pos + 2 );
  16.         if( ! empty( $slug ) ) {
  17.             // 创建唯一的postname
  18.             $post_name_check = true;
  19.             $suffix = 1;
  20.             $after = '';
  21.             $check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != '$postid' LIMIT 1";
  22.             while ( $post_name_check ) {
  23.                 if ( $suffix > 1 ) {
  24.                     $after = '-' . $suffix;
  25.                 }
  26.                 $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug . $after ) );
  27.                 $suffix++;
  28.             }
  29.             $post_name = $slug . $after;
  30.         }
  31.         $post_title = substr( $post_title, 0, $pos );
  32.         $sql = "UPDATE $wpdb->posts SET post_name = '$post_name', post_title = '$post_title' WHERE ID = '$postid'";        
  33.         $wpdb->query($sql);
  34. }
  35. }
  36. add_action( 'publish_post', 'post_auto_slug' );

发布文章

发布文章时,将文章的标题设置为标题@@postname形式,即可自动处理。如果你的文章标题中就需要包含@@字符,你可以在上面的PHP代码中,将其改成其他分隔符。

前面的post_auto_slug方法的作用是,在文章发布前,将文章标题从@@符号截断为两部分,前面一半作为最终的标题,后面一半设置为postname,且对重复的postname自动添加后缀。例如已经有postnametest的文章,再次发送文章标题@@test,则自动改成test-2的形式。保证每篇文章的postname独一无二,这样才能正常通过网址访问。

(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
热点内容