Regras de reescrita personalizadas para páginas

4

Estou tentando fazer com que o WordPress reconheça uma estrutura de URL como esta:

example.com/parent/page/{id}/{first_name}/{last_name}

A ideia básica é que preciso acessar o id , first_name e last_name na minha página e eles precisam vir por meio do URL. Então eu tenho que colocar regras como:

(/some_page/child_page/)/([0-9]+)/([^/]+)/([^/]+) =>
index.php?pagename=$matches[1]&id=$matches[2]&fname=$matches[3]&lname=$matches[4]

para cada página, usando o filtro page_rewrite_rules .

A pergunta é: Como obter o "nome da página" para cada página? A parte /some_page/child_page/ . Eu posso pegar o post_name , mas sinto falta da página pai, avô.

    
por Dan F. 19.01.2011 / 10:14

1 resposta

4

O padrão que o WordPress usa para reconhecer as páginas é (.+?) , que corresponderá a qualquer coisa, mas não é guloso , então permite que você coloque algo no final. O código a seguir funciona para mim no WordPress 3.0.1: ele coloca o padrão extra no penúltimo lugar da lista, porque o padrão final é tão genérico que corresponderá a cada URL:

add_filter( 'page_rewrite_rules', 'wpse7243_page_rewrite_rules' );
function wpse7243_page_rewrite_rules( $rewrite_rules )
{
    // The most generic page rewrite rule is at end of the array
    // We place our rule one before that
    end( $rewrite_rules );
    $last_pattern = key( $rewrite_rules );
    $last_replacement = array_pop( $rewrite_rules );
    $rewrite_rules +=  array(
        '(.+?)/([0-9]+)/([^/]+)/([^/]+)/?$' => 'index.php?pagename=$matches[1]&id=$matches[2]&fname=$matches[3]&lname=$matches[4]',
        $last_pattern => $last_replacement,
    );
    return $rewrite_rules;
}

Esteja ciente de que as páginas, como qualquer postagem, também podem ser divididas em várias páginas com o <!--nextpage--> snippet, e a URL normal para isso é /pagename/2/ , o que pode ser confuso quando você também tem /pagename/3/jan/fabry/ , onde o 3 é um ID. Você pode alterar o padrão para incluir um número de página opcional no final, então isso pode se tornar /pagename/3/jan/fabry/2/ , em que o% final 2 é o número da página e o primeiro 3 é o ID.

Se você estiver alterando as regras de regravação, recomendo minha reescrita plugin do analisador (logo no repositório, mas obtenha a versão atual via Dropbox ), ajuda você a depurar essas coisas.

    
por Jan Fabry 21.01.2011 / 11:47