add_rewrite_rule no carga la página correcta ni obtiene variables

4

Estoy tratando de obtener un título de showreel y un ID de video en una URL a la que la página pueda acceder.

tengo los dos en la misma URL y no funciona o solo aparece uno. ¿Actualmente no se encuentra la página? (Estoy constantemente limpiando los enlaces permanentes)

La URL de la que quiero obtener las variables se verá como directores / test-director / showreel / showreel-name / video / 111 /

El sitio actualmente se encuentra en una carpeta de prueba llamada independent_02 pero no está seguro de si eso afecta algo.

Aquí está el código;

function wpse13483_init() {

    add_rewrite_rule( 'directors/(.+?)/showreels/([^/]+)?/?$', 'index.php?category_name=$matches[1]&showreel=a', 'top' );
    add_rewrite_rule( 'directors/(.+?)/showreels/([^/]+)/video/([^/]+)?/?$', 'index.php?category_name=$matches[1]&showreel=c1&video=c2', 'top' );
    // directors is a custom post_type and should go to single-directors.php

    add_rewrite_rule( 'showreels/(.+?)/video/([^/]+)?/?$', 'index.php?category_name=$matches[1]&video=b', 'top' );
    // showreels is a custom post_type and should go to single-showreels.php

}
add_action( 'init', 'wpse13483_init' );

Cualquier ayuda apreciada!

ACTUALIZACIONES : esta regla ahora funciona principalmente y captura las variables. Sin embargo, se va a archive.php y no Directors-single.php?

add_rewrite_rule( 'directors/(.+?)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&showreel=$matches[2]&video=$matches[3]', 'top' );
// directors is a custom post_type and should go to single-directors.php

Creo que tiene que ver con '? post_type = Directors' pero no puedo encontrar ninguna referencia de lo que debería ser cargar single.php

ACTUALIZACIÓN 2 En cuanto a Rewrite analyzeri, ¿cree que falta la variable post_type?

    
pregunta v3nt 21.05.2012 - 17:25

3 respuestas

2

¡Esto parece funcionar!

? post_type = directores & nombre = $ coincidencias [1] parece ser la clave

add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );

código final ahora;

function wpse13483_init() {

    add_rewrite_rule( 'directors/([^/]*)/showreels/([^/]*)/video/([^/]*)/?', 'index.php?post_type=directors&name=$matches[1]&showreel=$matches[2]&video=$matches[3]', 'top' );

}
add_action( 'init', 'wpse13483_init' );

function wpa52794_query_vars( $vars) {
    $vars[] = 'video';
    $vars[] = 'showreel';

    return $vars;
}
add_filter( 'query_vars', 'wpa52794_query_vars' );
    
respondido por el v3nt 30.05.2012 - 11:46
2

WordPress eliminará las variables de consulta que no entiende de forma predeterminada. Entonces, además de registrar sus reglas de reescritura personalizadas, también debe registrar sus variables de consulta personalizadas.

add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars ) {
    $vars[] = 'video';
    $vars[] = 'showreel';

    return $vars;
}

Para completar aún más la respuesta, también debe especificar las variables de consulta regulares que WordPress está esperando. Su ejemplo original no está pasando el post_type ni nada para identificar la publicación (ID, nombre, babosa, etc.) como ya anotó en sus propios comentarios. Sin esto, WordPress no entiende cómo enrutar la solicitud internamente.

Felicitaciones por descubrir esto con un analizador de reescritura. Esa fue de hecho la pieza que falta.

    
respondido por el EAMann 21.05.2012 - 17:50
0

Además de la respuesta de @EAMann, puedo decir que es necesario vaciar las reglas de reescritura.

@EAMann answer :

add_filter( 'query_vars', 'wpa52794_query_vars' );
function wpa52794_query_vars( $vars) {
    $vars[] = 'video';
    $vars[] = 'showreel';

    return $vars;
}

Reglas de reescritura de descarga :

function myplugin_activation() {
    flush_rewrite_rules();
}
register_activation_hook ( __FILE__, 'myplugin_activation' );

function myplugin_deactivation() {
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'myplugin_deactivation' );
    
respondido por el Eugene Manuilov 28.05.2012 - 15:05

Lea otras preguntas en las etiquetas