Agregar regla de reescritura en el complemento: con .htaccess en la carpeta del complemento o usando las funciones de WordPress

3

Necesito agregar una regla de reescritura en mi complemento y distribuirla con mi código. Todo funciona bien si pongo la regla en .htaccess en la carpeta raíz de WordPress, pero necesito distribuir el complemento con mi regla.

Intento colocar un .htaccess dentro de la carpeta del complemento e intento usar la función add_rewrite_rule pero no funciona cualquiera.

Aquí el código .htaccess que funciona correctamente en la carpeta raíz de WordPress pero no funciona en mi carpeta de complementos:

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteRule my-plugin/pages/tp(.*)\.php$ wp-content/plugins/my-plugin/pages/request.php?pid=$1

</IfModule>

Intento el código de seguimiento en mi complemento pero tampoco funciona:

add_filter( 'query_vars', 'add_query_vars' );
function add_query_vars( $query_vars )
{
    $query_vars[] = 'pid';
    return $query_vars;
}
add_action( 'init', 'add_init' );
function add_init()
{
    $plugin_url = 'the-path-to-my-plugin-folder';
    add_rewrite_rule('my-plugin/pages/tp(.*)\.php'
                  , $plugin_url . 'pages/request.php?pid=$matches[1]','top');

    global $wp_rewrite;
    $wp_rewrite->flush_rewrite_rules(); // I know this should be called only one time, but I put it here just to keep simple the sample code
}

Pero siempre recibo el error de que no se encontró la URL. ¿Qué estoy haciendo mal? ¿Cómo puedo hacer lo que necesito? Busqué preguntas similares pero ninguna resuelve mi problema.

    
pregunta leticia 31.01.2013 - 05:43

1 respuesta

1
  

NOTA: la API de WordPress Rewrite no es lo mismo que el módulo Apache Rewrite.   WP Rewrite API no redirige una solicitud a otra URL, solía hacerlo   analizar la URL actual y rellenar query_vars array.

El problema está en el segundo parámetro de tu llamada de función add_rewrite_rule . Tiene que comenzar desde index.php? y luego deberían estar tus argumentos, como pid , por ejemplo:

"index.php?pid=$matches[1]...."

Entonces su función add_init debería ser así:

add_action( 'init', 'wpse8170_add_init' );
function wpse8170_add_init()
{
    add_rewrite_rule('my-plugin/pages/tp(.*)\.php', 'index.php?pid=$matches[1]', 'top');
}

No te olvides de borrar las reglas de reescritura visitando la página Settings » Permalinks .

Lectura adicional:

respondido por el Eugene Manuilov 31.01.2013 - 09:45

Lea otras preguntas en las etiquetas