#推荐
[WordPress教程] wordpress文章URL重写规则和重写标签 -静鱼客栈

2021-09-30 0 629

wordpress是可以自定义文章的连接的,可是有些文章我们想通过文章的ID直接访问,而不是通过post_name去访问,比如自定义的分类里面的文章,比如我们有一篇文章的ID为4656,自定义分类为book,那么如何通过这样的“www.ruikeedu.com/book/4656.html”链接访问文章呢?

重写规则

如果熟悉了wordpress的重写规则,那么很简单:


add_action('generate_rewrite_rules', 'ashu_rewrite_rules' );   
function ashu_rewrite_rules( $wp_rewrite ){   
    $new_rules = array(   
        'book/([0-9]+)?.html$' => 'index.php?post_type=book&p=$matches[1]',   
        'top'   
    );   
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;   
}

上面的重写规则中正则表达式:[0-9]即匹配数字,在主题的functions.php中添加上面的代码即可,如果你需要其它类型的URL重写规则,你可以自己编写上面的正则表达式。

然而我们从通过模板输出的链接,或者通过后台点击查看文章,发现链接还是:“www.ruikeedu.com/book/文章名”,在主题中添加下面的代码:


add_filter('post_type_link', 'ashu_book_link', 1, 3); //过滤器post_type_link即输出链接的时候用
function ashu_book_link( $link, $post = 0 ){
    if ( $post->post_type == 'book' ){ //判断如果是book类型的文章
        return 'https://www.ruikeedu.com/book/'.$post->ID .'html'; //返回一个正确的链接
    } else {
        return $link;
    }
}

即可输出正确的链接,然而教程到了这里,还没进入正题–重写标签。上面两个代码知识为了熟悉一下重写规则的使用。

重写标签

重写标签在wordpress后台-设置-固定连接里面用到的 %post_id% %post_name%之类的就是重写标签了,我们前面也说过,wordpress后台设置的“固定链接格式”是会保存到数据库中的 _options表中,重写标签的主要作用也就是用来建立一个“固定链接格式”

上面添加的段代码,完全可以用下面的一段代码来代替


add_action('init', 'ashu_book_rewrite');   
function ashu_book_rewrite() {   
  global $wp_rewrite;   
  $queryarg = 'post_type=book&p=';   
  $wp_rewrite->add_rewrite_tag('%book_id%', '([^/]+)', $queryarg);   
  //这里的%book_id%就是重写标签,第二个参数为匹配这个标签的正则表达式,第三个参数这个标签匹配的翻译规则   
  $wp_rewrite->add_permastruct('book', '/book/%book_id%.html', false);    
  //add_permastruct是往数据库中保存一个固定链接格式,第一个参数为名称   
}   
  
add_filter('post_type_link', 'ashu_book_permalink', 1, 3);   
function ashu_book_permalink($post_link, $post = 0) {   
  global $wp_rewrite;   
  if ( $post->post_type == 'book' ){ //判断文章类型   
      if ( is_wp_error( $post ) )   
        return $post;   
      $newlink = $wp_rewrite->get_extra_permastruct('book'); //获取前面保存的名为book的固定链接格式   
      $newlink = str_replace("%post_id%", $post->ID, $newlink); //将格式里面的重写标签替换为文章ID   
      $newlink = home_url(user_trailingslashit($newlink)); //完整的链接地址   
      return $newlink; //返回   
    } else {   
        return $post_link;   
    }   
}

上面的代码中,输出连接就不用解释了。翻译:当访客访问地址“www.ruikeedu.com/book/4656.html”,这个地址刚好匹配了名 为“book”的固定连接格式,而这个格式里面的标签“%book_id%”是要翻译成“post_type=book&p=”的,所以翻译为 “www.ruikeedu.com/?post_type=book&p=4656”这样就能正确翻译了。所以上面的 add_rewrite_tag和add_permastruct两个函数组合的效果和使用函数添加重写的规。

在wordpress的开发中,需要添加url自定义参数传送接收值,同时重写路由规则保证url地址的美观,要用到add_rewrite_rule函数,和init动作和query_vars过滤器。如下代码示例了添加url自定义参数和定义路由规则的方法:


function products_plugin_rules() {
   add_rewrite_rule('products/?([^/]*)', 'index.php?pagename=products&product_id=$matches[1]', 'top');
}

function products_plugin_query_vars($vars) {
   $vars[] = 'product_id';
   return $vars;
}

add_action('init', 'products_plugin_rules');
add_filter('query_vars', 'products_plugin_query_vars');

定义了自定义url参数,我们接收参数的值在wordpress中,不建议直接用$_GET获取,有专门的函数get_query_var,以下代码演示了在wordpress中获取url中参数的值:


function products_plugin_display() {
   $products_page = get_query_var('pagename');
   $product_id = get_query_var('product_id');
   if ('products' == $products_page && '' == $product_id):
    //show all products
    exit;
   elseif ('products' == $products_page && '' != $product_id):
    //show product page
    exit;
   endif;
 }
 
 //register plugin custom pages display
 add_filter('template_redirect', 'products_plugin_display');

 

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝/QQ扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!305582964@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有U点奖励和额外收入!

静鱼客栈 学习中心 [WordPress教程] wordpress文章URL重写规则和重写标签 -静鱼客栈 https://www.52jyu.cn/9655.html

静鱼客栈的帅逼站长~

常见问题
  • 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP贵宾介绍。
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器没有下载完整造成的,可以重新进行下载即可~
查看详情

相关文章

发表评论
暂无评论
静鱼客栈-站长

为您解决烦忧 - 专业服务 看到消息会进行回复