Creación de una regla de reescritura de WordPress que apunte a un archivo en el servidor y envíe variables

¿Alguna vez ha intentado reescribir una URL de WordPress para que apunte a un archivo en el servidor?

Inicialmente intenté hacer esto:

// Add Custom Rewrite Rules
function custom_rewrite_basic() {
  flush_rewrite_rules();
  add_rewrite_rule('^leaf/([0-9]+)/?', 'wp-content/plugins/my-plugin/index.php?leaf=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');

pero tuve que descubrir que WordPress admite agregar una regla de reescritura que no apunte a index.php

Por eso fui por el método .htaccess:

RewriteRule ^index\.php$ - [L]
RewriteRule ^leaf/([0-9]+)/? /wp-content/plugins/my-plugin/index.php?leaf=$1 [QSA,L]

pero esto no estaba funcionando de la manera que esperaba. Simplemente no estaba redirigiendo a mi archivo. Ahora que lo pienso, no recuerdo si lo inserté en la parte superior del archivo .htaccess para que pudiera leerse primero, pero en caso de que lo intentes, no olvides ponerlo en la parte superior.

Así que fui por el parse_request gancho, que resultó ser una gran manera de hacerlo.
Inserté esto dentro de mi tema hijo y todo salió bien:

add_action( 'parse_request', function( $wp ){
  // The regex can be changed depending on your needs
  if ( preg_match( '#^leaf/(.*)/?#', $wp->request, $matches ) ) {
    // Get the Leaf Number
    $leaf = $matches[1]; 

    // Define it for my-plugin's index.php
    $_GET['leaf'] = urldecode($leaf);

    // Load your file - make sure the path is correct.
    include_once WP_CONTENT_DIR . '/plugins/my-plugin/index.php';
    exit; // and exit
  }
});

Tenga en cuenta que para ser seguro al recopilar y procesar la variable GET, es posible que deba aplicarle un poco de limpieza. Ejemplo: mysql_real_escape_string, htmlspecialchars, strip_tags, stripslashes, preg_quote, escapeshellarg, escapeshellcmd, etc.

Similar Posts

Leave a Reply

Your email address will not be published.