tl;dr = 安装免费插件“Permalinks Customizer“。将页面的“PostTypes Settings”设置为“%postname%”,然后编辑页面以相应地修改相应的永久链接。我已经用分层和非分层页面的场景对此进行了测试,ivt工作起来没有任何困难。
<小时>The longer answer
OP的场景基于一个通用页面,在我看来,这是一个重大的、可能是不可能的挑战,因为解决方案必须匿名应用。也就是说,没有可预测的“触发器”或“句柄”可用于创建将创建有效请求的重写。自定义post类型可能会起作用(或不起作用),但OP已将其排除在this选项之外。OP提出的方法也存在重复页面的风险。考虑到所有这些,有人可能会认为OP提出的方法既不值得,也不明智,但我会让OP自己来判断。
OP非常正确;Nicu提出的答案不起作用,因为这一行具有从原始父代构建uri的效果。
$uri = get_post( $parent )->post_name . "/" . $uri;
我有(
unsuccessfully) 致力于满足OP要求的过滤器。我在这里提供它,以防它可能对其他人有用。出于参考目的,我的所有测试都是在将Permalinks设置为“Post Name”的情况下完成的,每次我调整过滤器时,都会刷新Permalinks页面。我创建了四页。祖先、父母(父母=\'祖先\')、子女(父母=\'父母\')和交通(无父母)。
我发现创建uri很容易,至少看起来很容易。这个替代方案(在functions.php中)可以工作:
function wpse_182006_pages_permalink( $link, $post_id) {
// get the post_type and evaluate
$posttype = get_post_field( \'post_type\', $post_id, \'display\' );
if ($posttype !== \'page\'){
return link;
}
// build the uri from the slug
$slugname = get_post_field( \'post_name\', $post_id, \'display\' );
$slugname = $slugname."/";
$link = home_url($slugname);
return $link;
}
add_filter( \'page_link\', \'wpse_182006_pages_permalink\', 10, 3 );
“祖先”和“运输”页面均正常打开
打开“父”和“子”页面(每个页面都有一个“父”页面)会出现404个错误
如果您查看请求查询(请参阅下文),很明显生成404是因为WordPress将“页面”解释为“帖子”,而不存在此类帖子。请注意,在失败的查询中不使用post ID。也许这是成功重写的关键,但这超出了我的能力。
以下是“祖先”的“请求”详细信息以供参考:匹配查询;页码=\'匹配规则(.?.+?)(?:/([0-9]+)?/?$\'
主查询=选择wp\\U帖子。*来自wp\\u posts,其中1=1和(wp\\u posts.ID=\'46\')以及wp\\u posts。post\\u type=“page”按wp\\u posts排序。post\\u日期描述
相比之下,这些是“Children”的“request”详细信息:匹配查询;页面=\'匹配规则([^/]+)(?:/([0-9]+))?/?$\'
主查询=选择wp\\U帖子。*来自wp\\U POST,其中1=1和wp\\U POST。post\\u名称=\'父项\'和wp\\u post。post\\U类型=“post”按wp\\U posts排序。post\\u日期描述
FWIW,通过这样设置永久链接,永久链接是不可编辑的。之前:
之后: