Php WordPress添加\重写\规则和正则表达式正向前瞻
TL;DRPhp WordPress添加\重写\规则和正则表达式正向前瞻,php,regex,wordpress,url-rewriting,custom-post-type,Php,Regex,Wordpress,Url Rewriting,Custom Post Type,TL;DR 在WordPress add\u rewrite\u规则函数中,正外观是否是有效的正则表达式?我有一个详细的下面,似乎不工作,虽然看似有效 是否可以重写WordPress自定义帖子类型的帖子slug,以便多篇帖子可以具有相同的帖子名称,但可以根据其指定的类别进行区分 设置: WordPress安装 3页-“foo”、“bar”和“baz” 3类-“foo”、“bar”和“baz” 自定义帖子类型-“qux” “qux”中的帖子被分配为一个类别——“foo”、“bar”或“baz”
- WordPress安装
- 3页-“foo”、“bar”和“baz”
- 3类-“foo”、“bar”和“baz”
- 自定义帖子类型-“qux”
- “qux”中的帖子被分配为一个类别——“foo”、“bar”或“baz”
- 一旦分配了一个类别,自定义帖子段塞应该读“/[category]/[custom post name]/,看起来像是同名页面的子页面
function replace_link( $link, $post = 0 ) {
if ( $post->post_type == 'qux' && in_category( array( 'foo', 'bar', 'baz' )) ) {
$terms = get_the_terms( $post->ID, 'category' );
if ( $terms && ! is_wp_error( $terms ) ) :
$links = array();
foreach ( $terms as $term ) {
$links[] = $term->name;
}
$links = str_replace(' ', '-', $links);
endif;
if (in_array("foo", $links)) {
return home_url('foo/'. str_replace('-fo', '', $post->post_name) .'/');
}
if (in_array("bar", $links)) {
return home_url('bar/' . str_replace('-br', '', $post->post_name) .'/');
}
if (in_array("baz", $links)) {
return home_url('baz/'. str_replace('-bz', '', $post->post_name) .'/');
}
} else {
return $link;
}
}
add_filter('post_type_link', 'replace_link', 1, 3);
这很好,但我的理解是这只是一个表面的改变(如果我错了,请纠正我)。然后我使用了以下重写规则:
function custom_rewrite_rule_fo() {
add_rewrite_rule('foo\/(.+?)(?=-fo)','index.php?latest_work=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule_fo', 10, 0);
function custom_rewrite_rule_br() {
add_rewrite_rule('bar\/(.+?)(?=-br)','index.php?latest_work=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule_br', 10, 0);
function custom_rewrite_rule_bz() {
add_rewrite_rule('baz\/(.+?)(?=-bz)','index.php?latest_work=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule_bz', 10, 0);
我已经在各种在线测试人员中测试了regex,它似乎很有效(请参阅)
但是WordPress不支持,在查看页面时,它会重新连接到“/qux/norf fo/”和“/qux/norf br/”等。我得出结论,这是因为WordPress的regex不支持我使用的正向前瞻
我想这完全是因为我的正则表达式技能差,但我尝试了很多排列,似乎没有取得任何进展。。。非常感谢您的帮助!:) 找到了一个更简单的解决方案,可以满足我所有的URL需求 我选择了3种自定义帖子类型——“foo”、“bar”和“baz”,而不是1种自定义帖子类型“qux”。3个自定义post类型归档页面中的每一个都替代了同名的旧静态页面 一旦新的CPT建立起来,我就习惯于根据分配的类别将帖子从“qux”转移到各自的新CPT中
如果有人能在页面顶部找到我最初问题的答案,我仍然很好奇!:) 找到了一个更简单的解决方案,可以满足我所有的URL需求 我选择了3种自定义帖子类型——“foo”、“bar”和“baz”,而不是1种自定义帖子类型“qux”。3个自定义post类型归档页面中的每一个都替代了同名的旧静态页面 一旦新的CPT建立起来,我就习惯于根据分配的类别将帖子从“qux”转移到各自的新CPT中 如果有人能在页面顶部找到我最初问题的答案,我仍然很好奇!:)