无自定义链接的导航项目中的URL片段

时间:2015-12-28 作者:frshjb373

我导航中的一些页面是零碎的URL,实际上不应该放在任何地方。换句话说,我有几个家长导航项目,如<a href="#">Services</a> 仅用作导航项,而不是实际的登录页。

我知道我可以在菜单中创建一个自定义链接来表示这一点,但如果我这样做,则不会动态创建该页面下任何子页面的url(即http://example.com/services/child-page). 我必须手动更改该子页面的url。

如何通过创建页面而不是在菜单中构建自定义链接来实现这一点?

1 个回复
SO网友:Milo

您可以修改href 生成菜单时特定菜单项的属性。

function wpd_convert_menu_items_to_hash( $atts, $item, $args ) {
    if( $somecondition ){
        $atts[\'href\'] = \'#\';
    }
    return $atts;
}
add_filter( \'nav_menu_link_attributes\', \'wpd_convert_menu_items_to_hash\', 10, 3 );
在本例中,$somecondition 无论你用什么方式识别这些菜单项。$item 允许您访问菜单项对象,其中包含页面ID和slug等内容。您还可以查看$atts[\'href\'], 这将是该页面的默认URL值。$args 将允许您访问nav菜单参数,因此您可以将整个内容定位到特定菜单。

你也可以钩住template_redirect 并将这些页面的请求发送到其他地方。

function wpd_check_if_page_should_be_visible(){
    if( is_page( \'services\' ) ){
        wp_redirect( home_url(\'/services/some-other-page/\') );
    }
}
add_action( \'template_redirect\', \'wpd_check_if_page_should_be_visible\' );
您可以修改上述内容以检查post meta中的值,这样slug就不会硬编码。您还可以查询子页面并转发到子页面,这样目标就不必是动态的。

相关推荐

Force pretty permalinks?

我正在构建一个插件,该插件将用于单个站点,并依赖于add_rewrite_rule 要工作,需要打开永久链接。打开它们并不困难,因为它只是一个站点,但我担心其中一个管理员可能会在不知道自己在做什么的情况下关闭它,并破坏该站点。如何以编程方式强制保持漂亮的永久链接?