问题描述
有没有办法将.html
扩展添加到自定义帖子类型没有插件?
对于帖子我可以使用/%postname.html
在永久链接设置
对于我可以使用的页面:
add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
global $wp_rewrite;
if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' )
$wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}
自定义帖子类型?
有没有一些类似于上述的代码,可以让我改变或添加.html
在自定义帖子类型的 url?
最佳解决方案
这似乎工作:
创建重写规则,如 post-type/post-name.html
。您可以使用数组为仅仅一些帖子类型创建规则,而不是为其创建所有这些规则。
add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
$new_rules = array();
foreach ( get_post_types() as $t )
$new_rules[ $t . '/([^/]+).html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
return $new_rules + $rules;
}
格式化这些帖子类型的新固定链接结构。
add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
global $post;
$type = get_post_type( $post->ID );
return home_url( $type . '/' . $post->post_name . '.html' );
}
然后停止重定向规范网址以删除尾部斜线。这可能需要更多的工作,因为您可能希望在大多数情况下保持重定向。
add_filter( 'redirect_canonical', '__return_false' );
正如其他人在这里说的,在完成上述之后,您需要刷新规则,这可以通过访问 Dashboard -> Settings -> Permalinks
中的 options-permalink.php
管理页面进行。
次佳解决方案
您可以为此替代替代内置固定链接的重写规则,例如为自定义帖子类型”product” …
add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
add_rewrite_rule('^product/([^/]+).html', 'index.php?product=$matches[1]', 'top');
}
(不要忘了用 re-saving 您的固定链接或使用 flush_rules
以上述方式刷新您的规则) 。
Caveats
-
我不认为像
the_permalink()
这样的功能会使用它,所以你可能需要为post_link
添加一个过滤器来捕获这些链接。您还可以添加到redirect_canonical
过滤器以重定向默认固定链接,以便/product /foo 和/product /foo /redirect 重定向到/product/foo.html 。 -
您需要为您网站使用的其他网址添加附加重写,例如 feed URL,后续页面,trackbacks 等。上面的代码将适用于主要的自定义帖子类型页面。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。