Índice del artículo
Solución para corregir la directiva ‘RewriteBase’ y el plugin WPML en WordPress
Este código en PHP es un fragmento de código que realiza una modificación en las reglas de reescritura de URL en un sitio web. La modificación está destinada a corregir el valor de la directiva «RewriteBase» para trabajar correctamente con el plugin WPML (WordPress Multilingual Plugin), que se utiliza para crear sitios web multilingües en WordPress.
Ajuste de las reglas de reescritura de URL en WPML para una integración perfecta, paso a paso
Explicación del código.
- Se define una función llamada
tms_fix_rewritebaseutilizando la funciónfunction_existspara asegurarse de que no haya otra función con el mismo nombre definida previamente. Si ya existe, este código no se ejecutará. Además se agrega la función medianteadd_filteral hookmod_rewrite_rules.
if ( ! function_exists( 'tms_fix_rewritebase' ) ) :
add_filter( 'mod_rewrite_rules', 'tms_fix_rewritebase' );
function tms_fix_rewritebase( $rules ) {
}
endif;
- Dentro de la función
tms_fix_rewritebase, se obtiene la ruta base del sitio utilizando la funciónparse_urly la funciónhome_url(). La funciónhome_url()devuelve la URL principal del sitio. Si la URL tiene una ruta (por ejemplo, «https://example.com/path/»), se almacena esa ruta en la variable$home_rootutilizando la funcióntrailingslashitpara asegurarse de que termine con una barra diagonal.
$home_root = parse_url( home_url() );
if ( isset( $home_root['path'] ) ) :
$home_root = trailingslashit( $home_root['path'] );
else :
$home_root = '/';
endif;
- Se obtiene la ruta base de WPML utilizando la función
parse_urly la funciónget_option('home'). La funciónget_option('home')devuelve la URL principal del sitio en la configuración de WordPress. Si la URL tiene una ruta, se almacena en la variable$wpml_rootde manera similar a como se hizo anteriormente.
$wpml_root = parse_url( get_option( 'home' ) );
if ( isset( $wpml_root['path'] ) ) :
$wpml_root = trailingslashit( $wpml_root['path'] );
else :
$wpml_root = '/';
endif;
- Se reemplaza la cadena «RewriteBase $home_root» en las reglas de reescritura por «RewriteBase $wpml_root» utilizando la función
str_replace. Esto asegura que la directiva «RewriteBase» apunte correctamente a la ruta base de WPML en lugar de la ruta base del sitio principal.
$rules = str_replace( 'RewriteBase $home_root', 'RewriteBase $wpml_root', $rules );
- De manera similar, se reemplaza la cadena «RewriteRule . $home_root» por «RewriteRule . $wpml_root» utilizando la función
str_replace. Esto asegura que las reglas de reescritura de las URL también utilicen la ruta base de WPML.
$rules = str_replace( 'RewriteRule . $home_root', 'RewriteRule . $wpml_root', $rules );
- Finalmente, se devuelve el valor modificado de las reglas de reescritura utilizando la variable
$rules.
return $rules;
En resumen, este código modifica las reglas de reescritura de URL para asegurarse de que el plugin WPML funcione correctamente al utilizar la ruta base de WPML en lugar de la ruta base del sitio principal. Esto es necesario para garantizar el correcto funcionamiento de la traducción y la gestión de idiomas en un sitio web multilingüe construido con WordPress y WPML.
Mejorando la compatibilidad de WPML con las reglas de reescritura de URL en WordPress
Aquí el codigo completo para copiar.
if ( ! function_exists( 'tms_fix_rewritebase' ) ) :
add_filter( 'mod_rewrite_rules', 'tms_fix_rewritebase' );
function tms_fix_rewritebase( $rules ) {
$home_root = parse_url( home_url() );
if ( isset( $home_root['path'] ) ) :
$home_root = trailingslashit( $home_root['path'] );
else :
$home_root = '/';
endif;
$wpml_root = parse_url( get_option( 'home' ) );
if ( isset( $wpml_root['path'] ) ) :
$wpml_root = trailingslashit( $wpml_root['path'] );
else :
$wpml_root = '/';
endif;
$rules = str_replace( 'RewriteBase $home_root', 'RewriteBase $wpml_root', $rules );
$rules = str_replace( 'RewriteRule . $home_root', 'RewriteRule . $wpml_root', $rules );
return $rules;
}
endif;
