Recientemente tuve un cliente que requería una modificación masiva de su contenido ya que necesitaba cambiar un texto específico por otro, en este artículo veremos diferentes formas de hacer modificaciones al contenido a través de código.
Generalidades
De manera general tenemos dos formas de realizar modificaciones al contenido a través de código, estas son:
- Modificaciones a través de Hooks de filtros
- Modificaciones permanentes en la Base de Datos
Modificación de contenido a través de Hooks de Filtro
Esta es la forma “light” de modificación, aunque si somos estrictos esto no sería una modificación real al contenido, ya que sólo cambiaremos la forma en la que el contenido se visualiza en el sitio web. Para realizar esto usamos el Hook de filtro llamado the_content
El siguiente código muestra un ejemplo de uso del filtro the_content para cambiar el texto de todas las entradas
add_filter('the_content', 'dcms_change_text_fixed_content');
function dcms_change_text_fixed_content($content){
if ( is_singular('post') || is_home() || is_archive() ) {
return str_replace('Texto cambiar', 'NUEVO TEXTO', $content);
}
return $content;
}
Es posible también usar expresiones regulares para detectar el texto y cambiarlo, por ejemplo:
add_filter('the_content', 'dcms_change_text_with_regexp');
function dcms_change_text_with_regexp($content){
if ( is_singular('post') || is_home() || is_archive() ) {
$pattern = '/(243)[ -]?(456)[ -]?(412)/i';
return preg_replace($pattern, "$1-$2$3", $content);
}
return $content;
}
Modificación de contenido de manera permanente en la Base de Datos
Esta sería la manera definitiva para la modificación de contenido, muy útil para temas de optimización, ya que evitarás el uso de filtros cada vez que se muestre el contenido.
También es recomendable en caso tu contenido sea consumido por otros servicios externos que se conecten directamente a la Base de Datos o a través de la API Rest.
Puedes usar el siguiente código en un nuevo archivo .php accesible desde la url de tu sitio, para que puedes ejecutarlo manualmente al ingresar la url en el navegador.
<?php
define( 'WP_USE_THEMES', false );
require __DIR__ . '/wp-blog-header.php';
global $wpdb;
$sql = "SELECT * FROM {$wpdb->prefix}posts
WHERE post_content REGEXP '243[ -]?456[ -]?412' AND post_type = 'post'";
$posts = $wpdb->get_results($sql);
kses_remove_filters();
foreach ($posts as $post) {
$content = $post->post_content;
$pattern = '/(243)[ -]?(456)[ -]?(412)/i';
$new_content = preg_replace($pattern, "$1-$2$3", $content);
$data = array(
'ID' => $post->ID,
'post_content' => $new_content,
);
$result = wp_update_post( $data );
error_log(print_r("Se actualizó post: {$result}", true));
}
kses_init_filters();
En el código anterior:
- Requerimos el archivo wp-blog-header.php para usar las funciones de WordPress
- Definimos el objeto global $wpdb para usar las funciones de Base de Datos
- Consultamos todos los registros que necesitamos actualizar
- Antes de hacer las modificaciones usamos la función kses_remove_filters() para quitar cualquier tipo de restricción de filtros en la actualización (por ejemplo por seguridad WordPress no permite insertar iframes a través de código)
- Usamos la lógica de actualización de contenido y usamos la función wp_update_post() para actualizar los cambios en la Base de Datos
- Finalmente activamos nuevamente los filtros de WordPress con kses_init_filters()
Conclusión
Si tienes que modificar muchas entradas, páginas o cualquier otro CPT, puedes evaluar hacerlo directamente a través de código, tal como hemos visto en este artículo ya sea usuando los filtros de WordPress o directamente modificando en la Base de Datos.
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.
La entrada Modificar contenido usando código en WordPress es un artículo reciente del sitio DecodeCMS.
0 Commentaires