WordPress URL 重写是 WordPress 的一种常见做法,其中(要显示的)内容会发生更改。
让我解释。通常,当您键入 URL 时,服务器会转到该位置并提供在那里找到的任何文件。在 WordPress URL 重写的情况下,URL 保持不变,但服务器会转到重写的 URL 来查找内容。
本文将向您展示如何:
- 在 WordPress 中为自定义帖子类型永久链接添加重写规则
- 使用基于重写规则的页面模板
考虑以下新闻帖子类型。用于此类型的永久链接是 news/{news-event}。
现在我想向此 WordPRess URL 结构添加两个单独的端点、照片和视频。添加这些端点后,新的 URL 结构将是 news/{news-event}/photos 和 news/video。
自定义网址
123456功能 prefix_news_rewrite_rule ( ) {添加重写规则( '新闻/([^/]+)/照片' , 'index.php?news=$matches[1]&photos=yes' , '顶部' ) ;添加重写规则( '电影/([^/]+)/视频' , 'index.php?news=$matches[1]&videos=yes' , '顶部' ) ; }添加动作( '在里面' , 'prefix_news_rewrite_rule' ) ;
通过使用add_rewrite_rule函数,我向基本 URL 添加了两个自定义重写规则。同时,我有
将两个查询变量设置为 WordPress URL。请注意,我已经避免使用add_rewrite_endpoint函数,因为我不想将端点添加到网站上的每个永久链接。
注册查询变量
1234567功能 prefix_register_query_var ( $变量 ) { $变量[ ] = '相片' ; $变量[ ] = “视频” ;返回 $变量; }添加过滤器( 'query_vars' , 'prefix_register_query_var' ) ;
我已将这些查询变量添加到 WordPress 中。我现在可以轻松地在自定义代码中使用它们。现在请注意,如果我转到 URL news/{news-event}/photos ,浏览器的地址栏仍将显示single-news.php或single.php
设置模板
12345678910111213功能 prefix_url_rewrite_templates ( ) {如果 ( 获取查询变量( '相片' ) && is_singular( 'news' ) ) { add_filter( 'template_include', function() { return get_template_directory() . '/single-news-image.php'; } ) ; }如果 ( 获取查询变量( “视频” ) && is_singular( 'news' ) ) { add_filter( 'template_include', function() { return get_template_directory() . '/single-news-video.php'; } ) ; } }添加动作( '模板重定向' , 'prefix_url_rewrite_templates' ) ;
现在在这个片段中,我设置了条件,如果有查询变量,照片或视频,并且它是单个新闻页面,则将模板设置为single-news-image.php和single-news-event.php (取决于根据查询变量)
结论
在本教程中,我讨论了 WordPress 中基于 URL 重写的自定义页面模板。如果您在理解这个想法时需要任何帮助,或者想为问题提供替代解决方案,请在下面发表评论。
RSS