我在permalink中添加了我的分类法,而不是自定义Post类型的slug,它工作得很好。我甚至会说一切都很好,但将WP安装更改为Multisite会破坏所有其他帖子和页面(而不是CPT)。
permalinks每次都正确生成为?p=123或其他猜测的URL,因此找到了帖子信息,但没有为循环找到。
这就是我如何用分类法代替CPT的slug的原因:
1) post\\u type重写定义为%listing\\u type%,工作正常,如下所示:
\'rewrite\' => array(
\'slug\' => \'/%listing_type%\',
\'with_front\' => false,
2)和以下函数分别替换url和术语链接中的%listing\\u type%和“listing\\u type”字符串,这些字符串由wp\\u list\\u categories()生成(从url中删除CPT的名称)
function listing_type_link_filter_function( $post_link, $id = 0, $leavename = FALSE ) {
if ( strpos(\'%listing_type%\', $post_link) === \'FALSE\' ) {
return $post_link;
}
$post = get_post($id);
if ( !is_object($post) || $post->post_type != \'listing\' ) {
return $post_link;
}
$terms = wp_get_object_terms($post->ID, \'listing_type\');
if ( !$terms ) {
return str_replace(\'/listing_type\', \'/\', $post_link);
}
return str_replace(\'%listing_type%\', $terms[0]->slug, $post_link);
}
add_filter(\'post_type_link\', \'listing_type_link_filter_function\', 1, 3);
function term_link_filter_function( $termlink, $term, $taxonomy ) {
if ( strpos(\'listing_type\', $termlink) === \'FALSE\' ) {
return $termlink;
} else return str_replace(\'/listing_type\', \'\', $termlink);
}
add_filter(\'term_link\', \'term_link_filter_function\', 1, 3);
现在,我几乎可以肯定,在我把它变成多站点之前,一切都很好。我将研究如何安全地取消它(多站点的事情),并在稍后发布更新。
你知道有什么会破坏上面CPT中没有的帖子和页面吗?如果我从post\\u类型的slug中删除%s,则一切正常。
UPDATAE
我注意到其他工作示例对每个自定义permalink都有一个重写规则,所以我添加了它,瞧,帖子现在已经修复了,但页面仍然被破坏
THIS PARTIALLY WORKS (posts only)
global $wp_rewrite;
$wp_rewrite->extra_permastructs[\'listing\'][0] = "%listing_type%/%postname%";
add_rewrite_rule("([^/]+)/([^/]+)/?$", \'index.php?post_type=listing&listing_type=$matches[1]&name=$matches[2]\', \'bottom\');
add_rewrite_rule("([^/]+)/([^/]+)/?$", \'index.php?post_type=listing&listing_type=$matches[1]&page=$matches[2]\', \'bottom\');
上述代码(在CPT定义函数内)
only fixed the posts, 但是页面(第二条add\\u rewrite\\u规则行的目的)仍然被破坏。