TL; DRWordPress的add_rewrite_rule和正則表達式正向前查找
- 是積極的向前看符號在WordPress add_rewrite_rule功能也有效的正則表達式?我有一個詳細的下面,似乎並沒有工作,雖然似乎有效。
- 是否有可能重寫一個WordPress自定義帖子類型的帖子slu so讓多個帖子可以擁有相同的帖子名稱,但是可以根據其分配的類別進行區分?
的設置:
- 安裝WordPress
- 3頁 - '富', '酒吧' 和 '巴茲'
- 3類 - '富', '酒吧'和 '巴茲'
- 定製後型 - 'qux'
- 帖子在 'qux' 被分配第1類 - 要麼 '富', '酒吧' 或 '巴茲'
- 一旦分配類別,自定義後塞應讀「/ [類別]/[自定義後名稱] /,看來是類似名稱的頁面的子
的問題
在「qux」中分配給不同類別的帖子可以具有相同的名稱,例如可以將'norf'[1]分配給'foo'並將'norf'[2]分配給'bar'。
顯然,WordPress不允許重複頁面slu so,所以我添加了與類別修飾符同名的帖子(例如'norf-fo'(發佈'norf'分配給'foo')和'norf- br'(發佈'norf'分配給'bar'))。這給了我前端的'/ foo/norf-fo /'和'/ bar/norf-br /'。我的問題是如何使用WordPress的重寫API來獲得'/ foo/norf /'和'/ bar/norf /'?
我的解決方案到目前爲止
我設法通過在編輯器中正確顯示的網址如下:
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);
我已經測試了各種在線測試儀的正則表達式,它似乎工作(見https://regex101.com/r/tL1iV4/1)。
然而,WordPress並沒有在瀏覽頁面時回到'/ qux/norf-fo /'和'/ qux/norf-br /'等等。我得出結論,這是因爲WordPress的正則表達式不支持我使用的積極lookahead。
我認爲這完全取決於我的可憐的正則表達式技能,但我已經嘗試了很多很多的組合,並且似乎沒有得到任何地方......任何幫助非常感謝! :)