如何从子页面永久链接中删除父slug?

时间:2013-04-28 12:35:30

标签: wordpress

如何从子页面的永久链接中删除父slug?这可能不是Atahualpa特有的,但我无法弄清楚如何做到这一点......也许有一个可能有效的插件?

我使用设置为父页面的子页面的页面(即非帖子)。在我的菜单栏导航中,它们显示为

/services/page1.html
/services/page2.html
/services/page3.html

我想要的是:

/page1.html
/page2.html
/page3.html

(我正在使用“html-on-pages”插件添加.html,因为我正在从另一台服务器移动此站点,这是它当前的站点结构。)

无论如何要完成我想做的事情?我考虑过不使用父/子选项,但我的导航中没有所有实际的页面名称,有太多太长的时间。我需要能够使用下拉功能,但我不希望在网址中有额外的父名称。

5 个答案:

答案 0 :(得分:3)

将此添加到您的functions.php

add_filter( 'post_link', 'remove_parent_cats_from_link', 10, 3 );
function remove_parent_cats_from_link( $permalink, $post, $leavename )
{
$cats = get_the_category( $post->ID );
if ( $cats ) {
// Make sure we use the same start cat as the permalink generator
usort( $cats, '_usort_terms_by_ID' ); // order by ID
$category = $cats[0]->slug;
if ( $parent = $cats[0]->parent ) {
// If there are parent categories, collect them and replace them in the link
$parentcats = get_category_parents( $parent, false, '/', true );
// str_replace() is not the best solution if you can have duplicates:
// myexamplesite.com/luxemburg/luxemburg/ will be stripped down to myexamplesite.com/
// But if you don't expect that, it should work
$permalink = str_replace( $parentcats, '', $permalink );
}
}
return $permalink;
}

答案 1 :(得分:3)

试试这个Custom Permalinks plugin。这可能会对你有帮助。

答案 2 :(得分:0)

也许Custom Permalinks插件可能会对您有所帮助。

该插件基于每个帖子,每个标签或每个类别设置自定义永久链接。

答案 3 :(得分:0)

它没有解决从URL中删除父slug的问题,但它可能会解决您遇到的问题。它需要您更改主题并使用WordPress的本机菜单构建器。

正常创建所有页面,但将它们嵌套在父项下除外。然后创建一个新菜单(外观>菜单)并添加“父”页面。使用菜单构建器,您可以使顶级页面嵌套在这些“父”页面下。完成所有操作后,将此菜单设置为主菜单。 (一旦进入此菜单构建器页面,这一切都很直观)

最后,您需要更改主题以删除其正在使用的名称菜单(可能是wp_list_pages或类似的东西),然后在新的主菜单中调用。您可以使用此代码调用该新菜单:

< ?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary' ) ); ?>

Here's a more complete guide on accomplishing this.

FWIW,我正在尝试从自定义帖子类型的网址中删除父slug,所以如果你偶然发现,请告诉我。我很想知道你为完成这项工作所做的工作。

答案 4 :(得分:0)

如果有人需要不同的提示:
如果您想使用PARENT页面下拉导航菜单,则从管理仪表板创建一个菜单,您可以使用PARENT PAGES设置下拉菜单。