Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo sobreescribir un script js en un child theme de WordPress

Imago voragine.net
[actualizado el ] • Por Enlace permanente

Para modificar un archivo javascript en un tema hijo (child theme) de WordPress no basta con incluirlo en la carpeta del child theme y esperar que WordPress lo use en vez del equivalente en el parent theme (tema padre), como ocurre con los archivos PHP.

Con los archivos javascript tenemos que realizar dos operaciones: eliminar de la cola de scripts el archivos del parent theme, y añadir el archivo modificado alojado en la carpeta del child theme:

function child_theme_prefix_load_scripts() {
 wp_dequeue_script('parent-theme-script-handler');
 wp_enqueue_script(
   'child-theme-script-hadler',
   get_stylesheet_directory_uri().'/js/script.js',
   array( 'jquery' ), // dependencias
   '1.0', // versión
   false // incluir script en la sección header del HTML
 );
}
add_action( 'wp_print_scripts', 'child_theme_prefix_load_scripts', 100 );

Usar el hook wp_print_scripts, en vez de wp_enqueue_scripts, nos asegura que la acción se ejecutará después de que el parent theme haya registrado y añadido a la cola los scripts.

Además de la función wp_dequeue_script existe wp_deregister_script. Ambas conseguirán que el script del parent theme no se cargue, pero usando la segunda sin la primera obtendremos un notice de PHP. Parece ser que lo correcto es usar ambas.

Cómo cargar archivos .mo con las cadenas de traducción en un tema hijo en WordPress

Cuando se trabaja con un tema hijo (child theme) en WordPress para una página en varios idiomas nos encontraremos con cadenas a traducir en el parent theme y en el child theme. Cada uno tendrá sus archivos .po y .mo y los archivos de traducciones se activarán desde el archivo functions.php.

Para el archivo con las cadenas del chid theme utilizamos load_child_theme_textdomain:

add_action( 'after_setup_theme', 'child_theme_setup' );
function child_theme_setup() {
  load_child_theme_textdomain( 'child-theme-text-domain', get_stylesheet_directory() . '/ruta-al-archivo-mo' );
}

Si el archivo con las cadenas del parent theme no está cargado, lo podemos cargar en el child theme de la misma manera que el del child theme pero usando el hook load_theme_textdomain.

Desactivar la capacidad de editar archivos del theme desde el panel de WordPress

La capacidad de edición de archivos del theme o de los plugins desde el panel de administración de WordPress puede ser una vulnerabilidad importante si un usuario no deseado consigue acceso de administrador al panel, ya que podrá editar los archivos libremente e incluir código malicioso.

En una instalación estándar de WordPress esta capacidad está activa. Para desactivarla podemos incluir la siguiente línea en el archivo wp-config.php:

define( ‘DISALLOW_FILE_EDIT’, true );

Cómo ocultar la versión de WordPress de la cabecera de la web: deshabilitando wp_generator

La función wp_head() presente en todas las cabeceras de WordPress incluye una llamada a otra función, wp_generator(), que se encarga de incluir en la sección head del código de la web la versión activa de WordPress.

Hay un gran debate sobre si es un problema de seguridad o no tener visible la versión activa de WordPress. En cualquier caso no tenerla visible no es ningún problema: la etiqueta solo sirve para propósitos estadísticos.

Para no mostrar la versión de WordPress se puede incluir la siguiente línea en el archivo functions.php del theme activo:

remove_action('wp_head', 'wp_generator');

Ejecutar acciones al activar o desactivar un theme en WordPress

Imago voragine.net
[actualizado el ] • Por
Al activar un theme de WordPress hay veces que viene bien modificar algún valor de configuración de WordPress para que el theme funcione plenamente sin que el usuario tenga que hacer nada. Por ejemplo activar el registro de usuarios que por defecto está deshabilitado. Igualmente, hay que prever dejar todo como estaba cuando el theme se desactive. Para ello WordPress dispone de dos hooks a los que podemos asociar acciones.

Cómo habilitar el uso de shortcodes en los widgets de WordPress

Para usar cualquier shortcode en los widgets de WordPress, y de esa manera evitar el uso de algunos plugins, basta añadir la siguiente línea al archivo functions.php del theme que se esté usando.

add_filter('widget_text', 'do_shortcode');

Una vez añadida la línea podemos usar shortcodes en el contenido de cualquier widget de texto.

Qué hacer si WordPress no sale del modo mantenimiento

Mientras se lleva a cabo una actualización en WordPress se activa el modo mantenimiento. Si hay algún problema durante el proceso nuestra web puede quedar atrapada en modo mantenimiento. Lo sabremos porque al visitarla nos aparecerá el siguiente mensaje en lugar de la web: «No disponible por mantenimiento programado. Vuelve a comprobar el sitio en unos minutos.», o en inglés: «Briefly unavailable for scheduled maintenance. Check back in a minute.»

WordPress activa el modo mantenimiento generando un archivo llamado .maintenance en la raíz del árbol de carpetas. Para salir del modo mantenimiento lo único que hay que hacer es eliminarlo, vía FTP por ejemplo.

En cambio, para entrar en modo mantenimiento manualmente no basta con crear el archivo .maintenance.

Permitir incrustar servicios externos (embed) en el contenido de un post en WordPress Multisite: la capacidad unfiltered_html y los filtros kses

Imago voragine.net
• Por

Por seguridad WordPress Multisite desactiva la capacidad de incluir determinado código HTML para usuarios que no sean superadministradores (administradores de la red de sitios). Es una medida lógica para evitar que un usuario incluya código malicioso a través de la caja de contenido de un post. Sin embargo en redes de sitios controladas, con una comunidad de usuarios de confianza, puede tener sentido activar esta capacidad.

Lo que hace WordPress Multisite añadir los filtros KSES, que normalmente solo se aplican a colaboradores y autores, a los usuarios editores y administradores. También desactiva la capacidad unfiltered_html para editores y administradores.

El plugin Unfiltered MU elimina esta limitación. Para quien prefiera prescindir de plugin se puede incluir la activación en el theme que se esté usando.

Cómo eliminar el slug «blog» de la estructura de permalinks de WordPress Multisite

Imago voragine.net
[actualizado el ] • Por Enlace permanente

WorPress Multisite añade el slug «blog» a los permalinks del sitio principal bajo la configuración de subdirectorios, no de subdominios, y lo hace por una razón: para evitar conflictos al coincidir la URL de un contenido del sitio principal (el que está alojado en el dominio) y la URL de otro de los sitios del Multisite (los que están alojados en un subdirectorio).

Eliminar «blog» de los permalinks puede traer problemas: tenemos que estar atentos para que ningún slug de un post, etiqueta o categoría del sitio principal sea igual al slug de uno de los sitios.

Si aún así se necesita eliminar la palabra blog, se puede hacer de la siguiente manera:

  1. Ir a la sección Permalinks dentro de Ajustes del sitio principal. Elegir la opción Predeterminado.
  2. Ir a la sección Sitios dentro de Administrador de la red. Allí seleccionar la opción Editar del sitio principal.
  3. En la pestaña Ajustes modificar la opción Permalink Structure, Category Base y Tag Base.

Eso sí, si se actualiza en el sitio principal la estructura de permalinks, «blog» volverá a aparecer en ellos. Si se quiere actualizar por alguna razón (por ejemplo cuando añadimos un nuevo post type hay que actualizar los permalinks para que el nuevo post type funcione), habrá que repetir el procedimiento.