Reglas de reescritura personalizadas para páginas

4

Estoy intentando que WordPress reconozca una estructura de URL como esta:

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

La idea básica es que necesito acceder a id , first_name y last_name en mi página y tienen que venir a través de la URL. Así que tengo que poner reglas 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, utilizando el filtro page_rewrite_rules .

La pregunta es: ¿Cómo obtengo el "pagename" para cada página? La parte /some_page/child_page/ . Puedo obtener post_name , pero luego extraño a la página de padres y abuelos.

    
pregunta Dan F. 19.01.2011 - 10:14

1 respuesta

4

El patrón que WordPress usa para reconocer páginas es (.+?) , que coincidirá con cualquier cosa, pero no es codicioso , por lo que le permite poner algo al final. El siguiente código me funciona en WordPress 3.0.1: coloca el patrón adicional en el segundo lugar de la lista, porque el patrón final es tan genérico que coincidirá con todas las 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;
}

Tenga en cuenta que las páginas, como cualquier publicación, también se pueden dividir en varias páginas con el fragmento <!--nextpage--> , y la URL normal es /pagename/2/ , lo que puede resultar confuso cuando también tienen /pagename/3/jan/fabry/ donde 3 es una ID. Puede cambiar el patrón para incluir un número de página opcional al final, por lo que puede convertirse en /pagename/3/jan/fabry/2/ donde el final 2 es el número de la página, y el primer 3 es el ID.

Si está cambiando las reglas de reescritura, recomiendo mi reescritura complemento analizador (pronto en el repositorio, pero obtenga la versión actual a través de Dropbox ), te ayuda a depurar estas cosas.

    
respondido por el Jan Fabry 21.01.2011 - 11:47

Lea otras preguntas en las etiquetas