Removendo páginas hierárquicas no permalink

4

Eu tenho várias páginas configuradas em uma hierarquia no meu site. Atualmente, as páginas e URLs do site são assim.

Page name        | Current URL           | Preferred URL 
-----------------|----------------------------------------
Page AAA         | /pageAAA/             | /pageAAA/
|-- Page BBB     | /pageAAA/pageBBB/     | /pageBBB/
Page CCC         | /pageCCC/             | /pageCCC/
Page DDD         | /pageDDD/             | /pageDDD/
|-- Page EEE     | /pageDDD/pageEEE/     | /pageEEE/

Eu gostaria de remover a hierarquia de páginas do URL e usar o nome da página. Atualmente, isso não é um problema para os "POSTS", pois configurei o "Permalink" para /%postname%/

Edit: O motivo que eu quero fazer isso é; Estou importando um site existente para o wordpress. O site existente tem uma hierarquia para as páginas (menu), mas uma estrutura de URL plana. Não sei se isso tem algum benefício adicional para SEO, mas quero manter a estrutura da URL igual à do site antigo

    
por Steven smethurst 21.03.2013 / 19:14

2 respostas

1

Eu ficaria curioso se alguém puder encontrar uma solução melhor para isso. Aqui está o que eu criei:

function wpse_91821_flatten_page_paths( $wp ) {
    if ( false !== strpos( $wp->matched_query, 'pagename=' ) && isset( $wp->query_vars['pagename'] ) && $wp->query_vars['pagename'] && false === strpos( $wp->query_vars['pagename'], '/' ) ) {
        if ( !get_page_by_path( $wp->query_vars['pagename'] ) ) {
            $page = get_posts( array(
                'name'        => $wp->query_vars['pagename'],
                'post_type'   => 'page',
                'post_status' => 'publish',
                'numberposts' => 1
            ) );
            if ( $page && isset( $page[0] ) ) {
                $wp->query_vars['pagename'] = get_page_uri( $page[0]->ID );
                $wp->request = $wp->query_vars['pagename'];
            }
        }
    }
}
add_action( 'parse_request', 'wpse_91821_flatten_page_paths', 5 );

O que estou fazendo aqui é interceptar parse_request e se é uma solicitação de nome de página, e o nome da página não tem um "/" nele, então eu verifico se consigo encontrar uma postagem com o nome correto . Se eu encontrar uma página, eu configuro a consulta var, que permite que o resto da cadeia de pedidos continue normalmente, porque o WordPress pensa que a requisição é a hierarquia completa.

Você também deseja adicionar um filtro a post_type_link para que seus links sejam gerados corretamente (caso contrário, eles continuarão hierárquicos).

    
por Matthew Boynes 23.05.2013 / 21:17
0

Eu não alteraria o comportamento do permalink da página. Uma solução muito mais simples / segura será definir a hierarquia de páginas simples (se você realmente quiser que seja simples).

Se você quiser ter hierarquia no menu, você ainda pode tê-lo - você pode criar um menu personalizado e exibi-lo com a função wp_nav_menu .

    
por Krzysiek Dróżdż 20.06.2013 / 22:21