url-rewriting – reescribir reglas y cadenas de consulta

Pregunta:

Cuando voy a la url mysite.com/photos/120 estoy queriendo conseguir el 120 fuera.

En PHP, quiero poder capturar estos "parámetros" como si la URL fuera mysite.com?page=photos&id=120 o incluso simplemente mysite.com/photos?id=120

¿Puedo aprovechar las reglas de reescritura ? ¿O necesito hacer expresiones regulares en php para obtener lo que quiero?

**** EDITAR 1 ****

Por mi vida, no puedo hacer que esto funcione. Según las respuestas dadas aquí, es lo que tengo hasta ahora:

add_action( 'init', 'rewrite_photo_url' );
function rewrite_photo_url() {
    add_rewrite_rule( '^photos/([^/]*)/?','index.php?page=photos&photo_id=$matches[1]', 'top' );
}

add_rewrite_tag('%id%','([0-9]+)');

print(get_query_var('photo_id'));

¿Sospecho que me falta un concepto en alguna parte?

**** EDITAR 2 ****

Estoy empezando a ver que quizás esto deba estar en functions.php, así que ahora tengo:

function rewrite_photo_url() {
    add_rewrite_rule( '^photos/([^/]*)/?','index.php?page=photos&photo_id=$matches[1]', 'top' );
}
function register_custom_query_vars( $vars ) {
    array_push( $vars, 'photo_id' );
    return $vars;
}

add_action( 'init', 'rewrite_photo_url');
add_filter( 'query_vars', 'register_custom_query_vars', 1 );

Ahora solo necesito saber cómo obtener mi var deseada en mi plantilla de página. He intentado

print(get_query_var('photo_id'));

Pero eso no funciona.

Respuesta:

Puede agregar su propia regla de reescritura que le permitirá modificar la consulta a través de parámetros de URL:

add_action( 'init', 'rewrite_photo_url' );
function rewrite_photo_url() {
    add_rewrite_rule( 'photos/([^/]+)/?$','index.php?page=photos&photo_id=$matches[1]', 'top' );
}

Si necesita usar una variable personalizada, es decir, 'photo_id', debe registrar la variable para que la consulta la reconozca:

add_filter( 'query_vars', 'register_custom_query_vars', 1 );
function register_custom_query_vars( $vars ) {
    array_push( $vars, 'photo_id' );
    return $vars;
}

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım